上海磐石行动 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 进行许可。
评论