整数溢出(攻防世界新手pwn题)
2020-05-05 12:23
369 查看
int_overflow
先检查防御机制,开启了NX保护,即堆栈不可执行。
先试着随便输入些字符,发现选择1后共输入2次,而且success了。
用ida查看主函数,既然只能选择1那就查看选择1后执行的函数login()。输入的buf规定长度为0x199u,即409。
继续查看check_passwd()函数。因为v3只有一个字节,可想到当传入的密码长度足够长时可以利用整数溢出的原理,使其统计的长度仍在4~8的范围内,从而绕过 if(v3<=3u || v3>8u),并且实现我们想要的数据覆盖。 同时此处复制到dest的长度为0x14。
在其他函数中找到一个后门函数,地址为0x804868B,猜想在输入的时候把它写到返回函数地址的位置上,直接跳转到该函数中cat flag。
再查看check_passwd()函数的汇编语句看看整个流程有没有什么细节没注意到。如图,将s复制到dest位置之后跳转到 loc_804871D 的位置,执行了“ leave ”指令(相当于执行了mov esp,ebp和pop ebp)。所以在执行到返回地址之前有一次出栈,为防止出栈的数据是我们填充的地址,需要在地址前再传入4个字节的数据。
根据之前的数据可知输入的密码总长度不能大于0x199(即409)。除了复制给dest的0x14个字符,填充的地址(4个字节)和上面提到的需要再填充的4个字节的字符,还有剩下的字符数没确定(需要保证它们的和整数溢出后在4~8的范围内)。用计算器先查看4 ~ 8的二进制数,再手动输入一个最后四位完全相同的二进制数,其十进制值就是输入密码的总长度:
取260作为总长度,写payload:
再运行:
相关文章推荐
- 3.pwn入门新手做无system泄露libc.so版本攻防世界pwn100 pwn200(dynelf 、libsearcher与got表plt表解)
- 攻防世界pwn新手区writeup
- 1.pwn入门新手看完别人写的wp,然后自己写,攻防世界CGfsb格式化字符串漏洞
- 9.pwn入门新手练习攻防世界stack2 低位读取内存
- 攻防世界XCTF新手区pwn
- 攻防世界杂项新手题
- 攻防世界web新手区合集
- EPS2.2 整数溢出漏洞分析到利用pwntools进行漏洞利用
- 攻防世界MISC新手练习区give_you_flag
- 【攻防世界】CTF web新手03 robots协议
- CTF攻防世界 WEB方向 新手练习区 题解
- XCTF攻防世界web新手练习_ 4_disabled_button
- 攻防世界web新手之disabled_button
- 攻防世界MISC新手练习区pdf
- 攻防世界-WEB新手练习篇
- 攻防世界web新手练习区前六题
- 攻防世界题目练习--MISC新手关(1~6)
- 小白学习笔记(18)攻防世界-re新手区-maze
- 攻防世界MISC新手练习区this_is_flag
- 攻防世界web新手之buckup