2019.7.22 babypie(canary绕过)和一些调试技巧

本文介绍了在遇到canary保护的程序时,如何利用gdb进行调试和分析。通过示例,展示了如何利用gdb附加到进程,观察ASLR的影响,以及如何在没有调试符号的情况下设置断点。此外,还讲解了canary的工作原理,以及如何计算所需填充的字符长度,以实现栈溢出攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在这里插入图片描述
在这里插入图片描述
以上是程序的反编译代码和保护机制。我们可以看出他开了canary保护。我们运行一下程序,发现只要输入一定数额的字符,其可以保持正常功能。
2.在这里插入图片描述canary总是保存在bp的上面,意是我们虽然开辟了48字节的空间,但真正能写的只有40字节。最近遇到一个pwn大佬,跟着他学到了很多gdb调试的技巧,我想把它结合这个题目记录下来。
3.
我们可以在代码中加入gdb.attach(io,’’),让程序停在某个特定的位置并吊出一个本次运行的 gdb界面。一般让他停在send之前,然后查看各个数据,因为很多程序是开了ASLR,导致地址在每次运行都会发生变化。我们在运行exp的时候,在后面加上大写的DEBUG,可以看到我们发送的东西和程序收到的东西,结合吊出来的gdb界面查的内容,我们可以检查我们发送到程序的数据是否是我们想要发送的。
4.在这里插入图片描述
这里的1是程序的加载地址,当程序开了PIE以后程序的加载地址始终在变化,但是在gdb中,gdb是默认将PIE关掉了的,所以每次用vmmap或piebase来查看都是不变的,此时在IDA中解析出来的是相对ELF文件头(也就是1)的相对地址。当程序关了PIE以后,
IDA解析出来的是绝对地址。且不管是开PIE还是没开,在gdb中用 p 打印出来的函数都是真实地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值