fgo
- 漏洞点 :
- 利用过程:
- add(0x10) 两个组合 0x10(pointer) + 0x18(content)
- del 0 -> del 1
- add(0x8) , 0x10(pointer | chunk 1 pointer) + 0x10(content | chunk 0 pointer) ,从而可以 修改 chunk 0 的指针域为 secret 函数
- 调用 print(0) , 从而触发后门函数
exp
GUESS
- 流程分析:
- 读入 flag 到栈上
- 3轮 指定栈上字符串输入 , gets 输入造成溢出
- 输入与 flag对比
- 利用过程:
- 该 题目 利用stack stamsh 的点进行指定地点的leak
- tip : 这道题目需要用多次 stack smash进行leak , 能持续进行输入程序不崩溃的原因是 ,输入的函数是用fork启动的。
- leak , puts 函数地址,得到libc地址
- 根据 libc 地址计算出 libc["__environ"] 的地址 ,leak __environ 得到一个栈上的地址
- 根据2中的栈地址的相对偏移计算出flag地址, leak flag
exp
easyFMT
- 功能分析
- while True 的 字符串输入 , 然后输出 | 长度限制 0x64
- 漏洞点: 格式化字符串
- 利用方法:
- leak printf@got , 得到 printf 地址
- 计算得到 system 地址
- 修改 printf@got 的值 为 system
- 输入 /bin/sh getshell
exp
babyheap
- 这道题目 考察了堆利用的技巧结合...
- 学到了 unlink 的后向合并
- 还利用到了 fastbin attack
- 功能分析:
- alloc :
- 分配到指定index 一个 0x30 大小的chunk | malloc(0x20)
- 并且进行 0x20 的输入
- edit
- 编辑指定 index 的 chunk , 做一个 0x20 的 输入
- 最多 编辑3次
- delete
- free 指定 index 的 chunk | uaf
- show
- 利用 过程
- 分配 6 个chunk , 做好 fastbin attack 和 unlink 的准备工作
- leak heap 地址
- 根据 heap 地址,edit(0) 构造条件,使用 fastbin attack 分配一个chunk到 堆上 , 将 uaf 拓展成 堆溢出
- 用堆溢出 修改 chunk 1 的 size 为 0xa1
- free chunk 1 | free 0xa1 大小的chunk 进行 unsorted bin leak , 并且进行 unlink (后向)
- 根据 libc 地址 计算出 one_gadget 地址
- edit(4) | 使用 unlink 覆盖 ptr[1] 为 __free_hook 地址 | Full Relro 不可修改got表
- edit(1) | 覆盖 __free_hook 为one_gadget
exp
blind
- 这个题目 学到了 io_file 的利用 , 看来还是要再好好看看 io_file_plus 的结构体和相关调用。
- 参考链接 : https://www.jianshu.com/p/f14adeda85df
- 功能分析:
- new | 分配一个 0x68 大小的chunk 到指定 index
- change | 修改 指定 index 的 chunk 内容
- release | free 指定 index 的 chunk | uaf 漏洞
- 漏洞点:
- 利用过程:
- 利用 fastbin attack , 分配 chunk 到 0x60204d(stderr + 5 + 8) , 从而可以控制 ptr 数组
- 控制 ptr 数组为 &stdout , &bss+0x300 + 0x68 * n (n : 0 - 3)
-
- 布置 bss + 0x300 开始 为 fake_io_file 和 fake_vtable
- 3.1 这次构造 发现可以布置除了 flag 和 vtable 之外的值全为 null , 但是还是要详细了解下原理。。。。
- 3.2 如果设置其他值的 , io_read_* ,io_write_* 最好不要覆盖。
- 3.3 可以把 fake_io_file 和 fake_vtable 布置在一起,但是需要主意 3.2 , 并且设置好 vtable的地址
- 3.4 先布置好vtable 然后再修改 *stdout 为 &fake_io_file
exp 1 , 2 的区别是 fake_io_file 和 fake_vtable 是否分开
exp1
exp2