第七届浙江省大学生网络与信息安全竞赛 决赛 - printFFF
what about "*" print?
文件属性
| 属性 | 值 |
|---|---|
| Arch | amd64 |
| RELRO | Partial |
| Canary | on |
| NX | on |
| PIE | off |
| strip | yes |
解题思路
程序一开始向rwx的bss上读入一段shellcode,只有21字节。
然后输入2个值和写指针类型。设置第一个值为0x5000,第二个值为0x404040(exit@GOT),
在设置第三个值为2,这样最后printf运行结果是将0x5000作为宽度打印字符,
然后认为0x404040为short *,将0x5000写入进去。
1 | printf("%*6$c%7$n", ?, ?, ?, ?, ?, 2, 0x5000, 0x404040) |
退出时由于exit@GOT处写了0x405000,即shellcode的起始地址,
就会运行到shellcode。经检查,rdx是0,可以省去xor edx, edx,使得shellcode短于21字节,
拿到shell。
EXPLOIT
1 | from pwn import * |

- 标题: 第七届浙江省大学生网络与信息安全竞赛 决赛 - printFFF
- 作者: RocketDev
- 创建于 : 2025-02-20 22:51:00
- 更新于 : 2026-03-27 15:59:00
- 链接: https://rocketma.dev/2025/02/20/printFFF/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论