CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤一】使用IDA打开first文件进行静态反编译,在过程中我们可以得知分析出:ESP与RET的的地址相差24h;wuwu函数入口地址为0804849B。而只需将RET修改为wuwu函数的入口地址即可在执行完haha函数后跳转到wuwu函数。

CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤二】本次使用虚拟机进行试验,打开虚拟机后需要重新进行对共享文件夹进行挂载。
CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤三】进入01-first文件夹,使用命令ls -al查看我们对文件夹中文档的权限,有x就是有权限,没有x就是无权限。若我们对first无权限,可使用chmod +x first命令,执行过后我们就会拥有first的权限。
CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤四】尝试一下,可以看到first可以执行。

CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤五】接下来使用命令gdb first进行反编译。

CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤六】使用命令b main在main函数中添加断点,成功后输入r开始运行程序。
CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤七】可以看到我们已经进入了main函数,使用命令n可以执行下一步。

CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤八】使用命令si进入到haha函数内部。一直进行下一步直到gets这一步时,输入比较明显的标志,比如AAAA,方便查看在内存中的位置。

CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤九】使用stack 20查看栈20行的信息。可以发现存储AAAA的地址为0xffffcfd0,与ebp(0xffffcfe8)的距离为18h,再加4ge字节的ebp,而0xffffcfec存储的就是返回地址。

CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤十】一开始我们已经利用IDA获得了wuwu函数的入口地址:0804849B,不难发现很难通过手工输入的方式输入此地址,因为他并不是正常的ASCII码。那么我们可以借助工具写一个脚本。使用命令vi a.py打开一个编译器,输入如下代码,输入完成后,点击esc键退出编辑模式,再输入:wq保存且退出。
CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤十一】使用命令q退出pwndbg后再使用命令python
a.py运行脚本,发现可以毫无问题地成功运行,成功进入了study.621m.cn服务器的目录。使用ls查看得到如下结果

CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)

【步骤十二】使用find | grep flag 查找名中flag文件,发现在host目录下。使用cd host进入host目录,ls查看目录,果然发现有一个flag文件,使用命令cat flag将flag文件的内容输出到屏幕上,成功!

CTF--PWN--作业记录之栈溢出(仅做个人课程学习作业记录,可能对各位帮助不大)