首页
社区
课程
招聘
[原创][Black Hat 2023] Pwn House of minho 解题报告
发表于: 1天前 854

[原创][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期)!

收藏
免费 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回