0x01 文件分析
64位程序,仅开启栈不可执行保护
0x02 运行
输入一个字符串
0x03 IDA
字符串可输入长度可造成栈溢出
0x04 思路
- 没有提供system函数和"/bin/sh"的地址
- 第一次栈溢出泄露
read
函数地址来得到libc
版本,从而获取system
函数和"/bin/sh"
的地址,并且返回主函数
这里有个难点就是参数需要放到对应的寄存器中
要泄露read
函数的真实地址,需要构造write(1, read_got, 8)
,即将rdi=1
,rsi=read_got
,rdx=8
ROPgadget --binary level3_x64 --only “pop|ret”
利用出栈指令
pop
给对应的寄存器赋值,但这里没有pop rdx
,通过查看反汇编可以发现构造栈溢出前rdx=0x200
,足够将read
函数的真实地址泄露出来
- 第二次栈溢出跳转执行
system("/bin/sh")