[Pwnable.kr] BrainFuck

24. 2月 2016 pwnable writeup 1

第二部分的第一题,150分(比第一部分总和还高……),F5整理一下代码还是很容易看懂的:

case里的部分用字符替换一下,大概意思就是p是一个字符指针,用”<“、”>“控制指针位置,”,”表示写入,”.”显示该位置的值,想办法exploit。

这里p的初始位置是&tape,从ida中可以看到:

KO)JR1%D~4VXN[O[Z@XS0}H
$HM}_KVQ7FWY[1{Z6)UZICC

我们就知道了p的初始位置是0x0804a0a0。

引用外部库函数需要通过plt表来定位其在动态链接库里的相对位置(关处于got表和plt表网上有介绍,此略过),我们可以在ida中找到.plt.got段,里面包含了我们要使用的libc的函数及地址。

XCBA(1GK4XNNQ949H4I~C9J

所以我们只需要通过相对位置修改plt表,就可以控制调用其他的函数。替换哪个比较好呢?O3@]1$_K9GG3F6{4GI9O}S7

看这两行,如果memset变成了gets,fgets变成了system,不是正好?v6恰好也是一个字符数组。

但是我们修改plt的过程是发生在这两句之后的,如何再重新执行这两条命令呢?

我们只需要把putchar的plt表值改写成main函数的地址即可,这样在下次调用”.”命令的时候,会调用putchar,就直接跳转到main函数入口了

poc:


1 thought on “[Pwnable.kr] BrainFuck”

发表回复

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

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