学习栈溢出第一例,CVE-2010-2883

可读可写可执行内存

由于开启了DEP,因此在win下想要得到一段可读可写可执行的内存需要特殊的方法

在本例中,payload使用ROP的方法先后调用了如下几个函数:

  • CreateFileA - 文件名用了内存中本就存在的一串字符串
  • CreateFileMapping - 创建文件映射对象的句柄
  • MapViewOfFile - 将文件映射到内存,该函数可指定这段内存的访问方式,在这里我们可以设置为可读可写可执行。
  • memcpy - 将js创建的堆中的shellcode复制到我们新建的可读可写可执行的内存

调试符号

在线下载调试符号需要翻墙

利用了js的堆喷以及堆风水

http://www.phreedom.org/research/heap-feng-shui/heap-feng-shui.html

思考

为嘛要用js呢,其实第一点就是该程序支持js,第二点其实就是js代码是我们可控的,可以非常直接地完成堆喷的操作