SuCTF2018 Pwn Writeup

最近毕业的事情很多,wp耽误了很长时间。
Heapprint 与 Noend 是收获很大的两个题目,感谢Ne0师傅

lock2

一道格式化字符串的盲Pwn,之前遇到盲Pwn,思(Xia)路(chai)能力不足,这道盲Pwn好好做了一下。
本以为,弱密钥登陆后,后面也比较简单,但测试后,该题通过简(xia)单(ji)做(ba)法(gao)应该是搞不定的,所以Dump Binary 后逆向再做。

首先,这道Pwn与一般不同的在于开启了PIE
Bypass PIE
通过泄露栈中的返回地址retaddr,找到.text段基地址,再根据页对齐Page align,不断减0x1000,直到找到ELF的Magic:”\x7FELF”,即得到的程序加载的基地址。

Leaking Binary
根据反复测试,Input 格式化字符串的是gets函数,遇到”\n”会截断
所以,在leaking binary时,遇到”\x0A”的地址,无法leak,Exp因为地址不合法而报错,所以类似地址只能跳过,默认写入”\x00″。
如图,当PIE将.text段地址某个字节随机为”\x0a”时,就会dump出如下图所示:

Dump的Binary完整与否,与PIE有关。
Leaking Function Table
Dump下来的Binary简单修复,能够逆向后,由于Dump下的只有.text段,没有.data段或者其他段,可以选择修复下PLT与GOT,实际也没有必要,看一下参数,猜一下即可。

Pwn
利用Format-string 修改下面的Memery,绕过该函数

后在Pandora_Box函数中存在栈溢出,泄露Canary再return到Getflag函数即可。

note

漏洞在scanf任意大小能够造成HeapOverflow
通过覆盖topchunk的size,在下一次分配时free topchunk到fastbin中,再溢出覆盖fastbin的*fd指针写到malloc_hook,getshell即可
因为题目中存在明显的scanf栈溢出,也可以利用house-of-orange,不过在2.24的libc下,还需要Bypass _IO_FILE_jumps的检测。

heap

与题目的名称一致offbyone,edit函数中能够溢出1byte,直接unlink改写GOT表即可

noend

题目比较短小,流程如下:

题目漏洞是malloc(size)并未限制size,申请的size过大将造成malloc失败,返回-1(0xfffffffffffffff),从而*((_BYTE *)buf + size - 1) = 0;会造成任意地址写1byte \x00

首先想到,1byte 写"\x00"_IO_write_base,但是题目中不存在利用_IO_FILE进行IO操作的函数(例如:scanf),无法进一步覆盖_IO_2_1_stdin_,从而劫持控制流

思路:
1byte写"\x00"Topchunk,通过提前布置,更改topchunk的size为LargerNumber,进而利用House-of-force劫持控制流

但是在整体思路的实现过程中,需要绕过以下坑:
1. Leaking: size<0x7f,在申请后都会被free,而size>0x7f不会。通过布置大量的fastbin,之后再申请一个larger bin,触发malloc_consolidate,fastbin合并形成smallbin,泄露地址。
2. 如果申请Size过大,会造成heap切换main_arena切换为arena1,但在arena1中再次申请很大的Size,arena不会再次切换,这给我们写topchunk提供了可能,但是还需要用同样的方式泄露arena
3. 使用House-of-force时,由于arena1是通过mmaped出来的,其chunk的M位置1,在__libc_malloc中执行_int_malloc后会检查mmaped的chunk(即Mbit=1)是否是页面对齐的,代码如下:

假设我们写__free_hook,通过malloc写在__free_hook附近,再次malloc无法通过该check失败。
所以直接的方法,是通过Topchunk更改后的size直接写到__free_hook,这就需要提前计算好offset。
4. chunk的size在64bit下,其地址LSB应为0x8,即该方法只能写LSB是0x8的地址,若其他libc中__free_hookLSB为0x0,则会由于heap align对齐检查而失败。

heapprint

Magic printf Emmm…
直接通过一次格式化字符串修改main返回函数地址为one_gadget
Exp成功的几率是1/32

发表评论