sctf2024 - vmCode
文件属性
| 属性 | 值 |
|---|---|
| Arch | amd64 |
| RELRO | Partial |
| Canary | off |
| NX | on |
| PIE | on |
| strip | no |
seccomp rules
解题思路
要求输入一段字节码,随后程序运行这段字节码。根据main及其之后的汇编,可以看出RSI是PC,
RDI是SP,运行前会先从PC读取一字节,然后根据offset表取偏移量为*PC - 0x21跳转到相应的“函数”,
我根据此偏移量给跳转过去的“函数”命名为func0、func1... ...由此可以将原始的code反汇编为
1 | ; push "shellcode: ", push 0xb, push &"shellcode: " |
然后读入的字节码将被插入到exit之前。
MANUAL
反汇编所有函数,得到以下manual
1 | // Q for qword ptr, B for byte ptr |
据此我们就可以写出exp了
1 | ; fd = open("flag", 0, 0) |
这里的栈布局经过计算,刚好满足push的值不变,这样在读写的时候就不会发生错位, 导致flag不全。以上exp还通过保留上一个syscall的返回值作为下一个syscall的参数, 可以实现刚刚好输出flag长度的字符,避免了多余的'\0'
EXPLOIT
1 | from pwn import * |

- 标题: sctf2024 - vmCode
- 作者: RocketDev
- 创建于 : 2024-10-22 00:55:00
- 更新于 : 2024-10-22 00:55:00
- 链接: https://rocketma.dev/2024/10/21/vmCode/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论