isctf2023 - abstract shellcode
确实挺抽象
文件分析
NX off, PIE on, Canary on, RELRO full
ghidra分析为64位程序
解题思路
开始时读入一个ye/no,就可以开始输入shellcode了,一开始以为有16字节的限制,
还把字符范围限制在了'O'~'_'
之间,但是实际动调时发现还有1个任意字符的机会
要想执行system,这么一些字节肯定不够,那么可以参照newstarctf里的shellcode_revenge,
先执行read,再执行,那么这最后的一个字节可以做什么呢,发现'\xc3'
可以实现跳转,
这时候才意识过来,之前给的两个字符,是用来放syscall('\x0f\x05'
)的,
那么只要构造一个read系统调用,再读入execve的shellcode并执行就可以拿到shell
下文有shellcode的详细解释
read的第三个参数count
有最大值SSIZE_MAX(0x7ffff000 on Linux)
,
超过这个值是依赖于实现的,当我随便找了一个超大数字时,我用的Arch Linux可以成功read,
Ubuntu就不行,害得我一开始连远端就寄,还得开虚拟机试试(毕竟是内核存在差别)
EXPLOIT
1 | from pwn import * |
以下是对第二条payload的解释
1 | push rax ; P |
参考
Done.
- 标题: isctf2023 - abstract shellcode
- 作者: RocketDev
- 创建于 : 2023-12-02 20:00:00
- 更新于 : 2024-08-26 17:18:00
- 链接: https://rocketmadev.github.io/2023/12/02/abstract_shellcode/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论