上海磐石行动 2025 初赛 - user

文件属性
属性 | 值 |
---|---|
Arch | amd64 |
RELRO | Full |
Canary | on |
NX | on |
PIE | on |
strip | no |
libc | 2.31-0ubuntu9.18 |
解题思路
看到delete
和edit
对输入的索引检查不严格,允许我们输入负数以向前访问。
由于RELRO只读,因此我们有效的数据只有stdin, stdout, stderr
和__dso_handle
。
使用edit
,我们能够写*stdout
的前0x40字节,通过修改_flag
和_IO_write_base
,
就可以让puts
先将base-ptr范围之间的内容输出出来,借此泄露libc。
网上一般说修改_flag
为0xfbad1800
,但是这样的话就不是无缓冲了,会影响脚本后续判断,
因此根据原flag,我们可以设置为0xfbad1887
,这样既能利用成功,又能保持原有的输出特性。
不难注意到__dso_handle
上放着__dso_handle
自己,因此我们edit它时,
等于原地修改那一片的内存。由于是libc2.31,可以直接写入一个__free_hook
的地址,
再edit它并写入system
,就利用完毕了。最后分配一个堆块写入/bin/sh
后,
释放一下就能拿shell。
EXPLOIT
1 | from pwn import * |
- 标题: 上海磐石行动 2025 初赛 - user
- 作者: RocketDev
- 创建于 : 2025-08-09 15:29:00
- 更新于 : 2025-08-09 15:29:00
- 链接: https://rocketma.dev/2025/08/09/user/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论