堆块分配时的任意地址写入攻击原理 堆管理系统的三类操作:分配.释放.合并,归根到底都是对堆块链表的修改.如果能伪造链表结点的指针,那么在链表装卸的过程中就有可能获得读写内存的机会.堆溢出利用的精髓就是用精心构造的数据去溢出下一个堆块的块首,改写块首中的前向指针 Flink 和后向指针 Blink,然后在分配.释放.合并操作发生时获得一次读写内存的机会. 这种利用内存读写机会在任意位置写入任意数据的做法在原书中称为“DWORD SHOT”,在其它文献中叫做“Arbitrary DWORD Rese…
微软在堆中也增加了一些安全校验操作,使得原本是不容易的堆溢出变得困难重重: * PEB Random:在 Windows XP SP2 之后,微软不再使用固定的 PEB 基址 0x7FFDF000,而是使用具有一定随机性的基址,从而影响了 DWORD SHOOT 对 PEB 中函数的攻击. * Safe Unlink:微软改写了操作双向链表的代码,在卸载 free list 中的堆块时更加小心.SP2 在进行删除操作时,提前验证堆块的完整性,以防止 DWORD SHOOT: int safe_r…
Windows 堆溢出 MS 没有完全公开 Windows 的堆管理细节,目前对 Windows 堆的了解主要基于技术狂热者.黑客.安全专家.逆向工程师等的个人研究成果. 目前 Windows NT4/2000 SP4 上的堆管理策略基本(与攻击相关的数据结构和算法)研究清楚. 堆溢出的重要研究者: Halvar Flake:2002 年 Blach Hat 上首次挑战 Windows 的堆溢出,揭秘了堆中一些重要的 Data Structure 和算法.演讲“Third Generation…
看到第五章了. 标题中 Dll Tramplining(跳板)名字是从如下地址找到的,写的很好: http://en.wikipedia.org/wiki/Buffer_overflow#The_jump_to_address_stored_in_a_register_technique Shellcode 原来,shellcode 这个词来源于一篇论文: 年 Aleph One 发表跨时代的<Smathing The Stack For Fun And Profit>,文中描述讲到利用基于栈…
本节接前方,对 exploitme.sys 进行利用. exploitme.sys 存在任意地址写任意内容的内核漏洞,现在采用执行 Ring0 Shellcode 的方式进行利用. 获取 HalDispatchTable 表地址 x HalDispatchTable 是由内核模块导出的,要得到 HalDispatchTable 在内核中的准确地址,先要得到内核模块的基址,再加上 HalDispatchTable 与内核模块的偏移: NTSATUS NtSataus = STATUS_UNSUCC…
第 22 章,内核漏洞利用技术 首先编写具有漏洞的驱动 exploitme.sys,再展开内核漏洞利用思路和方法: /******************************************************************** created: 2010/12/06 filename: exploitme.c author: shineast purpose: Exploit me driver demo *******************************…
学习的一下高版本的libc的利用方式. 项目地址:https://github.com/StarCross-Tech/heap_exploit_2.31 tcache_dup 源代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<inttypes.h> 4 int main(int argc,char **argv) 5 { 6 //this is tcache 7 /* 8 *typedef struct t…
在进行PE文件格式病毒分析的时候,经常要使用到PE文件格式的解析,尤其是对LoadPE形式的病毒的分析,经常要查看PE文件格式的偏移,特地从博客<PE文件格式的偏移参考>中转载收录一份,之前在网上也看到比较不错的有关PE文件偏移的博客,但忘了收录.在进行PE文件格式的病毒分析时,还会经常参考这篇博客<PE文件格式学习笔记>,博主关于PE文件格式的学习笔记写的不错,其他的参考书籍<加密与解密(第3版)>.<黑客免杀攻防>,顺便提一句<黑客免杀攻防>…
Off by One 根据 Halvar Flake 在“Third Generation Exploitation”中的描述,漏洞利用技术依攻击难度从小到大分为三类: . 基础的栈溢出利用,可以利用返回地址轻松劫持进程,植入 shellcode,如对 strcpy.strcat 等函数的攻击. . 高级栈溢出利用.栈中有限制因素,溢出数据只能淹没部分 EBP,但无法淹没返回地址,不能获得 EIP 控制权.经典例子是对 strnpy 函数误用时产生的 off by one 漏洞. . 堆溢出.格…
修改邻接变量的方法对代码环境限制比较多,更通用.更强大的方法是修改 EBP.返回地址等状态值. 为了方便调试,修改之前的代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> #define PASSWORD "1234567" int verify_password(char *password) { int authenticated=0x03050709; ]; // add…