(此文章是本人学习pwn的思路笔记,内容不肯定百分百正确,如有错误望指出)
题目链接:https://pan.baidu.com/s/1Aw6JgRLZhMfQp1NdOtJLPw?pwd=1234
提取码:1234
所需环境和软件:python、pwn库、gdb、IDA、ROPgaget
阅读此文章需要有一点ROP基础,下好此文件后,将此可执行文件复制一份放入Linux操作系统中(给gdb调试用和用python脚本攻击),再复制一份放入Windows操作系统中(用IDA32查看反汇编代码)
题目思路:
1、拿到题目用Linux的checksec工具查看文件类型、查看文件安全措施情况,命令为:
"checksec 文件名",如下图所示,可以看到是32位的ELF文件,小端,用的是静态链接(代码段很多),该ELF文件没有canary 保护,栈不可执行。
2、在windows中用IDA32软件查看该文件的伪代码,如下图所示可以看到main方法里定义了一个v4变量,且用了gets函数向v4输入内容,输入的内容长度是无限制的(gets()函数的特性),所以我们可以尝试栈溢出。
3、如下图所示,在Linux的shell里用gdb打开该ELF文件进行动态调试,因为我提前设置好了pwndbg为gdb的默认调试工具,所以在pwndbg用 b main 命令来给main函数设置断点,然后使用命令 r 开始运行程序,程序就会一直运行到断点位置(这里是main函数的开始),然后暂停运行。