前言

ignore…

1. ROP 返回导向编程

使用 rop 方法进行利用, 关键在于不发生代码注入, 直接绕过了 NX(DEP). 根据利用 ret 的特性(pop 栈中元素作为返回地址), 利用类似包含 ret 的一段段 gadgets 构造完整恶意的函数调用.

rop 有四个关键点.

0. 控制栈(stack)数据

这个是利用前提.

1. 泄露关键函数地址

泄露函数地址的方法:

  • 根据已知函数的 .got 表地址, 以及 libc 文件计算两个符号间的偏移.
  • 根据 DynELF 进行文件解析, 大致就是解析 ELF 结构, 原理可以参考 so 注入过程如何查找 __libc_dlopen_mode 方法.

2. 构造ROP利用链

3. 触发ROP链