使用ptrace绕过了限制,记录一下
ChildShell
赛后问了下上交的大佬,大佬和我说了下可以用ptrace来逃出去
个人觉得是因为父进程没有被chroot,被chroot的只有子进程:
1 | v9 = _libc_fork(); |
所有我们可以在子进程里用ptrace把父进程的代码改了,然后orw读取flag
思路为:
- 用
getppid来获取下父进程pid ptrace(PTRACE_ATTACH, ppid, NULL, NULL)来attach到父进程上- 用
ptrace(PTRACE_POKETEXT, ppid, addr, data)来改写父进程的代码段 - 在调用
exit让父进程从wait返回
exp为:
1 | from pwn import * |