[BUUCTF]PWN------[BJDCTF 2nd]r2t3

[BJDCTF 2nd]r2t3

例行检查,32bit,开启NX保护

在这里插入图片描述
nc 一下,没有有用的信息
加粗样式
用IDA打开,注意到了/bin/sh,继续跟进
在这里插入图片描述
找到了这个后门函数,shell_addr=-0x084858B,再去查看主函数
在这里插入图片描述
我们可以看到,buf的大小是0x408,但限制读取0x400,所以不存在溢出,
在这里插入图片描述
再看name_check函数,它对我们的长度进行了规定,要在4~7之间,但它负责接收buf的变量v3是unsigned_int8型的,即无符号整形。因此可以表示的范围为0–2^8-1(255) buf的最大长度是0x400(1024),所以这里存在整型溢出。
strlen()这个函数,如果参数的长度大于了它的固定的长度,就会将前面的扔掉,留下剩下的
比如:a的长度为260,b也是定义的unsigned_int8,因此b=strlen(a)=260-255=5
我们就可以利用strlen函数的这一点来绕过长度的检查,根据上述,我们可以用来绕过长度检查的字符串的长度应该是255+4(259) ~ 255+7(262)
在这里插入图片描述
在长度检查之后,主函数13行会将我们输入的字符串赋值到dest中,看一下dest在栈上的位置
在这里插入图片描述
在这里插入图片描述
它距离返回地址r=0x4-(-0x11)=0x15,因此我们在构造输入字符串的时候可以先输入0x15个a用来定位到返回地址,然后将返回地址填上shell_addr,之后补上(260-0x15-4)个长度的a来绕过长度检查
exp:

在这里插入图片描述
flag

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值