story
- 保护 : full relro , stack canary , nx
- 程序流程 :
- 获取用户 id | id 处输出时 有格式化字符串漏洞点
- 获取 故事内容 | 此处输入特别的size , 可以造成栈溢出
- 利用过程:
- 通过格式化字符串 leak canary 和 libc地址
- 通过输入大于 0x80 或者 int64_min 的 size来造成栈溢出
- 栈溢出 system("/bin/sh") getshell
- exp
noinfoleak
- 保护 : patial relro | nx | canary
- 程序流程:
- add
- delete
- edit
- 漏洞点
- delete 处 free 后指针未置为0
- 利用过程:
- 使用fastbin attack 中的 double free( 此处没有真的free两次去触发,因为可以直接使用edit来控制被free的chunk的 fd) 来 控制 指针数组 的内容
- 控制指针数组的内容为 free@got puts@got , 修改free@got 为 puts@plt + 6 , 从而使用free进行infoleak , 得到libc相关值
- 控制 free@got 为 system , 然后用预留的 /bin/sh 完成 getshell
- exp
storm note
- 这题基本是完全参考师傅的wp写的,练习了 off-by-one-null-byte 的利用 并且了解了 large bin attack
- 这题的利用手段拓展了利用的思路,在此之前我只想过根据现有的chunk条件来构造Arbitrary Alloc(double free , house of spirt .....) , 没想到过在利用过程中完成对chunk条件的满足,从而Arbitrary Alloc
- (参考链接)https://ch4r1l3.github.io/2018/08/15/large-bin-attack-%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/#more
- 保护 : nx , pie , stack canary 功能分析:
- 新增一个指定大小的chunk (0 - 0xffff)
- delete
- free 一个指定chunk 并且将相关指针和数字置为空
- edit
- 根据指定 idx 的 chunk 的 size(add中输入) 来进行edit
- 此处存在漏洞 , *(ptr + input_size) = 0 | off by one null byte
- 根据指定 idx 的 chunk 的 size(add中输入) 来进行edit
- backdoor
- 程序初始化时在指定地址读入 0x30 长度的随机字符串 , 如果我们的输入与该地址上0x30 长度的字符串相同即可执行 system("/bin/sh")
- 利用过程:
- 这个道题目开启了 pie , stack canary , nx , 并且没有leak点,所以常规手段行不通。有后门函数 ,通过 large bin attack 完成 Arbitrary Alloc 来控制指定地址的内容,从而满足后门函数的条件
- 使用 off-by-one-null-byte 进行shrink chunk 从而达到 chunk overlap , 最终可以进行堆溢出,控制指定chunk的内容
- 使用 large bin attack 来控制指定地址内容
- 使用后门函数 getshell
- exp