1.打开靶机,找到对应文件下载,转载到虚拟机中。打开终端,输出checksec level0,检查文件类型。发现是64位的ELF文件,NX保护措施被打开。
2.用ida64编译文件,得到主函数的汇编代码,按F5键转为C语言代码。
3.点击vulnerable_function,出现下图,可以看到其距离rbp80h(十六进制)个字节,双击buf,找到r所对应的字节数,是8(十六进制),也就是read函数本身覆盖的大小。
4.点击Esc,返回main函数,按shift F12,调到函数的字符串窗口,找到/bin/sh,双击得到其所在的子函数调用,是在callsystem中,在左侧列表中双击callsystem。
5.得到如下界面,复制括号中下方地址400596,将其转接到原先返回的return地址。
6.编写攻击脚本。
from pwn import*:导入pwn库;
r=remote:连接远程端口,输入靶机上的端口信息;
payload:构建攻击载荷,用垃圾数据(b:字符数据,‘a’表示字符a)覆盖read函数大小0x80及其本身的0x8个字节大小,再加上p64下的callsystem地址,以达到控制目的。
io.sendline(payload):发送所求数据并回车;
io.interactive():交互数据并获得io控制权。
7.打开终端,输入python3 XXX(编写脚本的文件名).py,运行得到控制权,输入ls,再输入cat flag,得到flag。