天天看点

经典的没有libc类型题目

首先利用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链