BUU-cmcc_pwnme2-WP

Posted on Nov 21, 2020

此题,无canary,有gets溢出,偏移为0x6C+0x4,这个时候其实怎么样都能做,大不了ret2csu然后用DynELF爆破,shell总是可以拿的,但是这样会比较麻烦,而我们又可以看到

有这三个函数,我们一个一个看一下

这个函数可以输出在string中存的文件地址的文件的内容。

这个函数则是给string加上/home

这个则是加上/.flag1,那么看名字我们可以想到执行这三个函数就可以输出.flag1中的内容了。这很容易,32位的程序通过栈来传参,也不需要使用特别复杂的gadgets。由于add_home和add_flag两个函数需要传入参数并进行判断,所以我们需要两组gadgets来实现函数的连续调用,一组弹出add_home的参数(弹出一次即可),一组弹出add_flag的参数(弹出两次)

我找到了这两个,那么exp就很好写了

然后我们运行一下,结果给我气的啊

我猜测是因为buu为了防止flag的泄露,每次都是随机生成flag,所以之前做题的时候总是会发现既有flag又有flag.txt,但是他们没想到有题目会把名字叫成.flag1,所以这题正解是不能拿flag的。

既然我们基本能猜到flag在哪个文件里面,那么我们就直接手动修改string就行了,由于程序中有gets,我们可以轻易的修改string,这很简单,直接上exp

顺利取得flag