好久没有发帖子啦!最近一直很忙!但是还是抽空学习啦下! 前段时间匆匆忙忙的把0day2上的堆溢出实验做啦! 可能当时太浮躁啦,很多细节没注意!结果:实验结果很不满意!所以就有啦这一篇!! 上一篇是发布在cnblogs.com的.后来管理提醒我,我们不讨论这种技术!旧书重温:0day2[7]堆溢出实验(很失败的一篇) 所以来 F4ck 发布吧! 0day2第五篇 堆溢出利用! 这章节,我细读啦不下3遍! 但是还是感觉有些生疏,所以要想把这个实验做好!一定要把此章节搞明白! 文章开始 0x01. 0…
源于0day安全一书 1.堆的分配原理 申请堆空间   HANDLE address =  HeapCreate(0,0x1000,0x10000) address就是堆的地址 在address+0x178 偏移处,是空表(用于管理堆的申请释放,里面都是空闲的堆) 空表的结构(书上的): 解释一下:free是一个指针数组(数组里面全是指针,可以理解为 Node * 类型的指针,其实就是前后堆的地址) 指针类型是自定义的数据结构  ,大概像这样: stuct Node { Node * flink…
2014.06.15 22:14 简介: 堆是一种非常实用的数据结构,其中以二叉堆最为常用.二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序.我们关心的通常只有堆顶的元素,而整个堆则被封装起来,保存在一个数组中. 图示: 下图是一个最大堆: 实现: 优先队列是STL中最常用的工具之一,许多算法的优化都要利用堆,使用的工具就是优先队列.STL中的优先队列通过仿函数来定义比较算法,此处我偷懒用了“<”运算符.关于使用仿函数的好处,我之后如果有时间深入学习S…
三.网络服务渗透攻击 3.1 内存攻防技术      3.1.1 缓冲区溢出漏洞机理              缓冲区溢出是程序由于缺乏对缓冲区的边界条件检查而引起的一种异常行为.              一般根据缓冲区溢出的内存位置不同,将缓冲区溢出分为栈溢出和堆溢出.      3.1.2 栈溢出利用原理             栈溢出发生在向栈中写数据时,当数据长度超过栈分配的空间时,就会造成溢出.             ①覆盖函数返回地址利用方式                程序一…
最近认真学习了下linux下堆的管理及堆溢出利用,做下笔记:作者作为初学者,如果有什么写的不对的地方而您又碰巧看到,欢迎指正. 本文用到的例子下载链接https://github.com/ctfs/write-ups-2014/tree/master/hitcon-ctf-2014/stkof 首先总结一下linux下堆的分配管理.堆的基本结构见上一篇文章,这里不再赘述. 一个更详细总结的传送门 glibc内存管理ptmalloc源码分析 1.堆区是在进程加载时的一片区域,mmap方式分配的堆结…
本文主要是linux下堆的数据结构及堆调试.堆溢出利用的一些基础知识 首先,linux下堆的数据结构如下 /* This struct declaration is misleading (but accurate and necessary). It declares a "view" into memory allowing access to necessary fields at known offsets from a given base. See explanation…
堆溢出与堆的内存布局有关,要搞明白堆溢出,首先要清楚的是malloc()分配的堆内存布局是什么样子,free()操作后又变成什么样子. 解决第一个问题:通过malloc()分配的堆内存,如何布局? 上图就是malloc()分配两块内存的情形. 其中mem指针指向的是malloc()返回的地址,pre_size与size都是4字节数据,size存放当前chunk(内存块,本文均不翻译)大小,pre_size存放上一个chunk大小. 因为malloc实现分配的内存空间是8字节对齐的,所以size的…
原文链接:https://xz.aliyun.com/t/4009 1.0 DWORD SHOOT是什么捏? DWORD SHOOT指能够向内存任意位置写入任意数据,1个WORD=4个bytes,即可以通过执行程序将4bytes的数据写入4bytes地址中,从而实现某种恶意操作.是不是还不清晰咩?emmm,通过下面这个完整的堆溢出利用例子进行理解,这个例子通过修改PEB中的同步函数指针指向达到利用的目的.PC:win2000工具:vc6.0,ollydbg 1.1 PEB的线程同步函数与DWOR…
<0day安全>学习笔记,主要讨论WIndows2000~WIndowsSP1平台的堆管理策略. 0X01 堆与栈的区别 栈空间是在程序设计时已经规定好怎么使用,使用多少内存空间.典型的栈变量包括函数内部的普通变量.数组等.栈变量在使用的时候不需要额外的申请操作,系统栈会根据函数中的变量声明自动在函数栈中给其预留空间.栈空间由系统维护,它的分配和回收都由系统来完成,最终达到栈平衡.所有这些对程序员都是透明的. 堆具备以下特性: 1.堆是程序运行时动态分配的内存.所谓动态是指所需内存的大小在程序…
相关文章我拍成了照片,放在了我的QQ空间不是做广告(一张一张的传太麻烦了)http://user.qzone.qq.com/252738331/photo/V10U5YUk2v0ol6/    密码9EY3TI 这个相册的图片是0day2中的第五章 有关堆溢出的利用文章 一直想把这节尽快做完实验,由于工作和生活琐事耽误了.这个实验是p171的狙击PEB中的RtlEnterCritical-Section()函数指针.(这个实验我没做成功!就是没有msg下,但是还是有经验收获的) 首先获取PEB中…