非典型canary爆破和格式化字符串漏洞

#第一题

这个是main函数

这个是canary函数,是打开根目录的一个文件,取前四个字符的ascll码作为canary

没有远程环境,我直接创建了一个这样的文件放在了根目录

这个是ctfshow函数,我们去找一下后门函数

函数地址可以看出来是0x8048696

我们再回过头来看ctfshow这个函数

首先他会接受用户的输入,接受一个字节,作为下面读入的字节数,所以我们第一次输入让他尽可能的大,所以我们输入0xff,然后再第二次读入的时候把v6填满,然后就该填写v7了,v7是四个字节,我们要爆破四个字节,然后我们通过写脚本来一个一个的爆破canary

脚本奉上

爆破出来第一个字节之后填写到p8前面

以此类推

我们爆破出来四个字节

完事之后把这些注释掉,然后开始写脚本,爆破出来之后脚本就很简单了,先填写0x20个垃圾数据把v6填满然后填写爆破出来的四个字节,然后在输入0x10个垃圾数据覆盖掉rbp,然后接下来就是覆盖返回地址,p32(shell)覆盖返回地址到flag后门函数,即可把这个flag打印出来

脚本奉上

#第二题

第二题是格式化字符串漏洞

查询得知开了pie保护,我们要通过泄露地址,来计算出来pie基址

放进ida看

我们逐个看一下case1,2,3

这第三个乍一看啥也没,我们去看汇编

发现是跳转走了,发现这个函数下面有我们要的后门函数,把地址记下来

0x129a,ida我们可以不太一样,反正记得时候记得记下来偏移地址哈,别记下来这个地址这个地址是加上了pie基址之后的,pie每次运行基址都会变的,左下角那边有偏移地址

所以我们通过分析main函数,可以知道,他一共进行两次循环,第一次循环我们选择2进入格式化字符串漏洞泄露pie,然后最后一次循环我们选择1然后覆盖返回地址到0x129a就能获得权限,这个地方不要误以为是站迁移哈,虽然他正好多出来0x10个字节

进入到call print看一下栈的情况

这是对应的那个

然后往下数偏移,

%5$p是对应的0那个,就是0x19999...下面那个,然后往下就不是了,隔过去那些,从-20这个位置开始继续往下数(这个位置是下一个栈空间的rsp,在这是第六个%6$p),具体为啥我不太懂哈,pass,然后数到rbp下面那个位置接受,去计算pie基址,所以我们要填写的是%11$p

完事之后他会把这个地址打印出来,我们接受一下,注意接受的时候int转化,不用u64哈,不是byte格式的,我们找一下main+181的偏移地址

就这个0x13a0,或者你减去main函数的偏移地址,再减去181也可以,都一样,完事之后pie基址我们就找到了,之后就是进入最后一个循环,我们选择一下1,然后覆盖rbp,覆盖返回地址到这个后门函数加上pie偏移,就能获取权限了

脚本奉上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值