題目只給出nc埠沒有附件 連接發現
Pwntools is such an awesome python module, right?
Tell you a secret (only smart baby can see it) :
Maybe I will tell you again when you clever than ELSEpush .
最後面有省略號我猜測應該是沒有輸出完所以我們使用pwntools攻擊 recvline() 接受沒有顯示出來的內容
然後發現有一個base64加密的字符串 結合題目說聰明得人才能發現解密出來就是flag{n0tf4stert6an_y0u}
拿到題目我一般的做題思路是首先checksec一下看到附件之打開了NX保護所以程序中不能直接使用shellcode執行任意代碼 以及32位的elf linux程序
然後通過看到的文件基本信息選擇64位或者32位的IDA Pro 這個ret2text我們選擇用32位的來靜態分析它的原始碼
用IDA打開之後它自動停在main函數處首先展現出來的是彙編代碼 我們要將彙編代碼轉成我們能通俗易懂的c語言代碼按F5進行反彙編發現這個函數的主函數並沒有什麼漏洞但是main的子函數vulnerable裡面定義了緩衝區有8位元組然後gets函數這裡是一個棧溢出的基本漏洞 gets函數可以有棧溢出的漏洞對讀入的數據不受限制 所以可以藉助溢出的漏洞來到它的返回地址 我們從靜態調試中得到棧裡與ebp距離為16位元組而緩衝區只定義了8位元組 然後我們就用gets函數執行可讀多個字節來覆蓋棧裡的程序
在ida中我們還發現有一個system函數這就是一般pwn題的後門函數當我們用垃圾數據寫出的payload成功劫持了程序的執行流時 需要寫一個指針的返回地址來執行我們需要的惡意代碼 這個system地址就是8048522
根據綜上分析exp如下 python 1.from pwn import * 2.c=remote('...', ) 3.#c=process(./ret2text) 4.py=b'A'*16+b'BBBB'+p32(0x8048522) 5.c.sendline(py) 6.c.interactive()
首先了解pwntools,pwntools是一個二進位利用框架。下面我給大家介紹下pwntools的使用方法 pwntools腳本 python 1.from pwn import * 2.c = remote("127.0.0.1", 8080) 3.sendline("AAAA" * 18 + p32(0x8048522) 4.c.interactive() remote("一個域名或者ip地址", 埠) 會連接到我們指定的地址及埠。然後該函數會返回remote對象 (這裡,我們將該對象保存到了變量 c). remote對象主要用來進行對遠程主機的輸入輸出. 它有如下幾個方法:
send(payload) 發送payload
sendline(payload) 發送payload,並進行換行(末尾\n)
sendafter(some_string, payload) 接收到 some_string 後, 發送你的 payload
recvn(N) 接受 N(數字) 字符
recvline() 接收一行輸出
recvlines(N) 接收 N(數字) 行輸出
recvuntil(some_string) 接收到 some_string 為止