栈溢出攻击之Ret2dl

最近几次比赛碰到好几个利用ret2dl进行攻击的题目,这里总结一下具体思路

识别是否使用ret2dl

有些栈溢出的题目,明显可以看到使用了gets、memcpy之类的导致栈溢出的函数

但是题目中没有puts, printf, write等用来输出数据的函数

无法泄露我们常规栈溢出攻击中所需要的一些地址(libc, 栈基址)

这时候使用ret2dl是一种有效的方法

例题

先通过32位的一个栈溢出来理解原理, 然后完成一个64位程序的攻击, 然后还有两个例题加深一波理解

文件下载:baby_pwn

我们用010 Editor打开题目文件,然后在Templates里运行一下ELF模板, 按alt+F4打开Template窗口

可以看到一个标准的ELF文件由以下部分组成

  • ELF头部
  • 程序头表
  • 节区头部表
  • 符号表
  • 静态符号表

Reference