阅读:2198回复:0
堆溢出学习笔记
◆0 概述
本文从程序实例出发,展示了XP SP1下的堆溢出+代码执行,XP SP3下的堆溢出+内存任意写,主要面向{已经掌握缓冲区溢出原理,希望进一步了解堆溢出原理的初学者}、{就是想找个堆溢出例子跑一遍的安全爱好者}以及{跑不通各种堆溢出书籍示例代码、非得跑通代码才看的进去书的搜索者} 本笔记参考自:http://net-ninja.net/article/2011/Sep/03/heap-overflows-for-humans-102/ 代码有较多改动,终于跑通了,并且试着简单地利用了一下。 按照代码阅读者视角 整理了讲解思路。 笔记只供初学者参考,并非严肃探讨堆溢出细节问题,若有不当之处恳请各位指正。 ◆1 测试代码环境 虚拟机: VirtualBox 操作系统: Windows XP sp1 编译器: VC++ 6.0 调试工具: 看雪OllyICE 其中,Windows XP 只能是sp1,因为sp2之后需要绕过其溢出保护机制 会使文章更加复杂。 如果您想要寻找xp sp3 下的内存任意写实例,请跳转◆9。 ◆2 测试代码步骤 安装Windows XP sp1 注意,网上有很多sp2 不知什么目的写成是sp1,下面是真正的sp1 http://pan.baidu.com/share/link?shareid=371613660&uk=1865555701&fid=2361791550 下载VC++ 6.0 绿色版 http://pan.baidu.com/s/1kTLqYnd 解压后运行sin.bat 下载代码工程 http://pan.baidu.com/s/1kT5HRNp 或者拷贝文中代码 自己新建工程 #!cpp /* Overwriting a chunk on the lookaside example */ #include #include void print() { printf("nHellon"); } int main(int argc,char *argv[]) { char *a,*b,*c; long *hHeap; char buf[10]; printf("----------------------------n"); printf("Overwrite a chunk on the lookasiden"); printf("Heap demonstrationn"); printf("----------------------------n"); // create the heap hHeap = HeapCreate(◆0040000,0,0); printf("n(+) Creating a heap at: ◆0%xhn",hHeap); printf("(+) Allocating chunk An"); // allocate the first chunk of size N ( |
|