[Pwnable.kr] tiny_easy

01. 3 月 2016 pwnable writeup 0

这道题提供了一个跑步起来的可执行文件,用IDA分析

([@<code srcset=GU2F]2ZKICEHBHS56HX” width=”461″ height=”263″>

之后就没有下文了,然后我们用gdb-peda调试一下试试——首先用ulimit -s unlimited关闭ALSR

 

这里插播一个小技巧,对于这种没有任何symbol的可执行文件如何下断点呢,首先我们给0地址下一个断点,当然会出错,提示:

1

然后我们查看一下pc

Screenshot from 2016-03-01 22-08-51

我们就看到了ep的地址,之后在这个0x8048054下断点就可以了

 

单步运行我们看到问题处在call edx这一步

Screenshot from 2016-03-01 22-10-55

此时edx值是原来栈上程序绝对目录,所以call edx的时候会引发段错误。那是不是我们控制了执行路径就控制了这个edx的值呢?我们试一下

首先我们用ulimit -c unlimited打开coredump,然后用exec执行程序

)0G</code>6ZDE5ZEA4JQO{I]}886″ width=”722″ height=”122″></p>
<p>用gdb打开core文件进行调试</p>
<p><img loading=

如我们所料,崩溃点在0x44434241,也就是‘ABCD’。但是我们在这里只能执行一条指令,这条指令最好是跳转指令,可以跳到我们预先布置好的其他位置,执行其他代码就好了。

这里要介绍另一种方法,一种类似heap spray的方法,使用大量的[shellcode][nop][shellcode][nop]指令段来填充栈,其中nop非常的长,以至于只要eip指针落到nop段中,就一定可以被引导到我们的shellcode段执行我们设定的指令。

跳转的地址可以选择gdb那种图里的栈地址,比如0xfff97de8这个。

 

关于shellcode的制作,可以直接从网上找,有个分享shellcode的网站shell-storm.org,我选择了这个http://shell-storm.org/shellcode/files/shellcode-585.php作为我的shellcode。

第一步我们将我们的shellcode段填充到环境变量里面去

然后我们执行payload:

Y9R~F(R4@35Y5YGP03AKGNT

经过若干次尝试我们终于在本机成功了,然后我们到服务器上重复上述步骤,成功拿到flag。


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据