利用复杂的堆溢出的时候,ltrace 是最好的工具,碰到比较复杂的堆溢出的时候,则必须经历几个重要的步骤
(1) 使其标准化。这是指如果进程生成并调用execve,那么就简单地连接到这个进程;如果本地攻击,将使用execve() 启动这个进程,重要的是了解堆怎样被初始化的
(2) 为攻击设置堆。这是指正确的大小和顺序,通过许多无意义的连接调用malloc 函数,从而为顺利攻击设置相应的堆。
(3) 溢出一个或多个块。使进程通过调用一个malloc函数改写一个或者多个字。接着使这个程序执行你改写的某个函数指针
认识到不同的堆溢出有不同的利用方法是比较重要的,因为对于堆溢出攻击者来说,每个攻击都有唯一对应的环境,取决于程序的运行状态
在触发之错误前,你的所作所为对是否可以成功攻击目标程序以及攻击代码的稳定性都会有直接的影响
改写什么:
1)改写函数指针
2)改写可写段里的一段代码
3)如果可以写两个字, 那么先写一段代码,然后写一个函数指针使其纸箱这段代码,另外,可以改写逻辑变量的方法改变程序流程