isctf2023 - touch file 2
文件分析
NX on, PIE on, Canary off, RELRO full
ghidra分析为64位程序
glibc: 2.31
解题思路
程序模拟了命令行的执行,是一道简单堆题,主要利用点在cp命令上, 浅拷贝的模式使得uaf、double free十分容易
这道题中分配单元固定,为0x80,分配的chunk大小为0x91,首先分配7个耗尽tcache,
然后分配一个在unsorted bin中,cp+rm+cat读取main_arena,推出libcBase;
再进行tcache dup,把__free_hook
写上system,最后给一个chunk上写上/bin/sh,
free它就能拿到shell
tips
- strncpy函数会将size中未输入的部分全部填0,并且复制时是'\0'截断的!这点要注意
- 这题附件给了ld,给了libc,但是libstdc++之类的其他依赖都没给,这时候借助docker, 下载一个ubuntu容器可以快速解决问题(主要是本地的libcstdc++依赖高版本libc)
- 手动释放一个chunk到unsorted bin中需要满足对应的后一个chunk处(&chunk + size) 的P位设为1
- 当getline得到一个超长输入时,会分配一个chunk,用完后释放,可以考虑写入大量垃圾字符,
来触发
malloc_consolidate
(不是用在这题)
EXPLOIT
1 | # 类型注释包含新版本特性,如无法运行,建议把类型注释删掉 |
Done.
- 标题: isctf2023 - touch file 2
- 作者: RocketDev
- 创建于 : 2023-12-05 12:00:00
- 更新于 : 2024-07-30 10:28:00
- 链接: https://rocketmadev.github.io/2023/12/05/touch_file2/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论