-
-
[原创][Black Hat 2023] Pwn House of minho 解题报告
-
发表于: 1天前 854
-
**1. 题目信息 **
附件:
最终 flag:
参考环境:
2.漏洞点分析
源码核心如下:
当选择 small 时:
但输入时固定读入:
所以 small chunk 存在堆溢出,可以覆盖后续 chunk 的 metadata,包括 size、fd、bk 等字段。
程序限制:
全局只有一个指针,delete 后会置空:
所以没有直接 UAF,但可以通过堆溢出、scanf 内部 malloc/realloc、tcache safe-linking 泄露与 smallbin-to-tcache 技巧完成利用。
3.利用总体思路
利用链分四段:
关键 libc 偏移:
4.libc 泄露
先溢出修改 Top Chunk size:
然后向 scanf("%d%*c") 输入超长数字:
scanf 内部会分配较大的缓冲区,大致触发:
配合被修改过的 Top Chunk size,可以让旧 Top Chunk 进入 Unsorted Bin。
之后通过 small chunk 溢出覆盖并 show:
5.heap 泄露
glibc 2.35 的 tcache fd 使用 safe-linking:
如果泄露 tcache 链表末尾 chunk 的 fd,由于真实 fd 为 0,所以泄露值就是:
因此:
对应利用:
6.smallbin-to-tcache
目标是构造一个 fake smallbin 链,让 glibc 在从 smallbin 取 chunk 时,把链上的其它 chunk 自动填充进 tcache。
先构造可被合并的 fake chunk:
布置哨兵块,避免 malloc/free 检查崩溃:
把 fake chunk size 改成 smallbin 大小:
再次用 scanf 超长输入触发 unsorted bin 遍历,使 fake chunk 进入 smallbin:
然后伪造 smallbin bk 链:
触发 smallbin-to-tcache:
此时可以进行 tcache poisoning,获得一次写 libc 地址的机会。
7.House of Apple2
由于 Full RELRO,不能改 GOT。这里选择劫持:
构造 fake _IO_FILE_plus,让程序 exit 时触发:
关键字段:
写入 fake FILE:
继续补齐 wide_data 和 vtable:
最后劫持 _IO_list_all:
退出触发:
8.完整 exploit
保存为:
运行:
完整代码:
9.结果
执行:
[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!