[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