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://rocketmadev.github.io/2024/10/21/vmCode/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论