使用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 * |