使用 rop
方法进行利用, 关键在于不发生代码注入, 直接绕过了 NX(DEP)
. 根据利用 ret
的特性(pop
栈中元素作为返回地址), 利用类似包含 ret
的一段段 gadgets
构造完整恶意的函数调用.
rop
有四个关键点.
这个是利用前提.
泄露函数地址的方法:
- 根据已知函数的
.got
表地址, 以及libc
文件计算两个符号间的偏移. - 根据
DynELF
进行文件解析, 大致就是解析ELF
结构, 原理可以参考so
注入过程如何查找__libc_dlopen_mode
方法.