0%

栈溢出ret2libc

当程序关闭了DEP且没有明显可利用的函数后,该想到动态链接了

预备知识:动态链接、got&plt等
这里以jarvisoj [XMAN]level3 和jarvisoj [XMAN]level3 x64为例

2019.3.4 平台不久前更新了动态链接库,/bin/sh字符串的虚地址发生了改变

题目给了一个elf文件level3,一个动态链接库libc-2.19.so,且level3中无getshell函数,意图很明显了:即通过泄露libc中函数地址来完成getshell的过程。

攻击过程分析:
1.程序存在明显的栈溢出
2.libc中提供了攻击所需的两个要素:system函数和/bin/sh字符串
3.源elf文件中调用了write函数
4.第一次溢出来泄露write函数的真实地址
5.write_addr-write_offset_in_libc=system_addr-system_offset_in_libc=bin_addr-bin_offset_in_libc
6.获取了system和/bin/sh字符串后,第二次溢出完成getshell的过程

尽管有ASLR,但两次溢出是在一次加载中完成的,并不会受到任何影响,或许这就是ROP的魅力吧,即程序在你的控制下永远不会结束,因为EIP始终被你握在手里。

[XMAN]level3 x64 也是类似,但64位传参方式不同