二进制漏洞——堆溢出复现(DWORD SHOOT)
二进制漏洞——堆溢出学习(DWORD SHOOT)基础概念
空闲双向链表(空表)
空闲堆块的块首中包含一对重要的指针,这对指针将空闲堆块组成双向链表。空表总共128条,按堆块大小区分。这里需要注意空表第一项(零号空表)是将所有大于等于1024字节 的堆块链接起来。
快速单向链表(快表)
快速单向链表也是128条,组织结构与空表类似,是Windows用来加速堆块分配而采用的分配方式,这类单向链表其中的空闲块块首会被设置为占用态,不会发生堆块合并。且每条单向链表最多4个节点。
使用堆
堆块分配
堆块分配大致分为三类:快表分配、普通空表分配、零号空表分配。
堆块释放
将堆块状态改为空闲、链入相应的堆表。所有释放块都链入堆表的末尾,分配的时候也是先从末尾拿。
堆块合并
经过反复的申请与释放操作,产生了很多内存碎片,为了更有效的利用内存,堆管理系统进行堆块合并操作。当发现两块空闲堆块彼此相邻时,就会进行堆块合并操作。包括将两个块从空表中卸下、合并堆块、调整合并后块首信息、重新装入空表。
DWORD SHOOT概念下图是正常情况下将堆块从空表中卸载的流程
假设 ...
CVE-2017-7269复现分析
CVE-2017-7296复现分析Microsoft Internet Information Services 缓冲区错误漏洞
CNNVD编号:CNNVD-201703-1074
危害等级: 超危
CVE编号: CVE-2017-7269
漏洞类型: 缓冲区错误
发布时间: 2017-03-27
威胁类型: 远程
更新时间: 2019-07-08
厂 商: microsoft
漏洞简介
Internet Information Services(IIS)是一套运行于Microsoft Windows中的互联网基本服务。
Microsoft Windows Server 2003 R2中的IIS 6.0版本中的WebDAV服务的ScStoragePathFromUrl函数存在缓冲区溢出漏洞(堆溢出和栈溢出都包括)。远程攻击者可通过发送特制的PROPFIND请求利用该漏洞执行任意代码。
WEB分布式创作和版本控制WebDAV是超文本传输协议HTTP的扩展,可促进用户之间在编辑和管理存储在万维网服务器上的文档和文件之间的协作。
ROPFIND用于从WEB资源检索以XML存 ...
简易加密壳
简易加密壳代码已开源:https://github.com/yeanhoo/encryptPacker
加壳器实现
将需要加壳程序映射到内存
加载壳Dll
读取壳代码函数节区内偏移
保存需要加壳程序必须信息
加密需要加壳程序节区
复制壳节区
将程序必须信息写入到PE头空闲处
设置新OEP指向壳代码开始函数
保存到文件
壳代码实现
混淆代码
检测虚拟机
检测调试器
获取API
解密节区
修复IAT、重定位、TLS等信息
HOOK IAT
跳转到原始OEP
壳代码VS配置:配置属性->高级->字符集->使用多字节字符集
C/C++->语言->符合模式->否
C/C++->代码生成->安全检查->禁用安全检查(/GS-)
C/C++->代码生成->运行库->多线程(/MT)
C/C++->优化->优化->已禁用
链接器->清单文件->生成清单->否
链接器->调试->生成调试信息->否
链接器->高级->无入口点->是
OD脱加密壳通用模板
12 ...
使用ZLIB库压缩与解压缩
使用ZLIB库压缩与解压缩背景
ZLIB是一套免费、通用、无损的数据压缩库,可以在任何硬件及操作系统上使用,而且ZLIB数据格 式可以跨平台移植。ZLIB提供了一套in-memory压缩和解压函数,并能检测解压出来的数据的完整性,ZLIB也支持读写gzip(.gz)格式的文件.
步骤
ZLIB官网下载ZLIB库的源码
打开\contrib\vstudio\vc[对应的编译环境版本,选择最接近自己环境的即可]\zlibvc.sln项目
编译zlibstat静态库、生成zlibstat.lib
新建项目,复制ZLIB官网下回来的zlib.h、zconf.h和编译好的zlibstat.lib到项目目录
编译环境配置
Debug编译模式下的编译设置首先,打开项目工程的属性页,展开“C/C++”,单击“预处理器”,在“预处理器定义”中添加ZLIB_WINAPI,否则,代码不能 编译通过。接着,单击“代码生成”,在“运行库”中设置为“/MTd”选项,表示在Debug模式下的多线程静态编译。最后,展开“链接器”,单击“命令行”,在“其他选项(D)”编辑框中添加链接命 令“/F ...
驱动操作磁盘文件
驱动操作磁盘文件1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#include<ntddk.h>VOID UnLoadDriver(PDRIVER_OBJECT pDriverObject);NTSTATUS DriverDefaultHandle(PDEVICE_OBJECT pDevObj,PIRP pIrp);BOOLEAN MyQueryFileAndFileFolder(UNICODE_STRING ustrPath);NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath){ DbgPrint("Driver Start"); for (int i = 0; i< IRP_MJ_MAXIMUM_FUNCTION;i++) { DriverObject->MajorFunct ...
IDA+DynameRIO+lighthouse
IDA+DynameRIO+lighthouse简介IDA使用lighthouse插件可将DynameRIO生成的程序代码执行记录导入IDA并高亮显示。
工具点击下载DynameRIO
点击下载lighthouse
用法按照GitHub提示安装lighthouse插件
使用命令记录程序执行记录
1drrun –t drcov --test.exe
将log文件导入IDA
file–>Load file–>Code coverage file
ms17-017提权漏洞
ms17-017提权漏洞Microsoft Windows Transaction Manager 权限许可和访问控制漏洞
CNNVD编号:CNNVD-201703-757
危害等级: 中危
CVE编号: CVE-2017-0101
漏洞类型: 缓冲区溢出
发布时间: 2017-03-20
威胁类型: 远程
更新时间: 2017-03-20
厂 商: microsoft
受影响实体
Microsoft Windows_10
Microsoft Windows_10:1511
Microsoft Windows_10:1607
Microsoft Windows_7:SP1
Microsoft Windows_8.1
Microsoft Windows_Rt_8.1
Microsoft Windows_server_2008:SP2
Microsoft Windows_server_2008:R2
Microsoft Windows_server_2012:R2
Microsoft Windows_vista:SP2
详细分析
模块对比实验环境为win7 3 ...
windows7+VS2010+WDK7.6
windows7+VS2010+WDK7.6环境配置下载安装WDK7.6.1
VS2010配置如下:
配置属性–>常规–>目标文件扩展名 = .sys
配置属性–>常规–>清除时要删除的扩展名 =;* .sys
配置属性–>VC++ 目录->可执行文件目录 = C:\WinDDK\7600.16385.1\bin\x86;$(ExecutablePath)
配置属性–>VC++ 目录->包含目录 = C:\WinDDK\7600.16385.1\inc\crt;C:\WinDDK\7600.16385.1\inc\ddk;C:\WinDDK\7600.16385.1\inc\api;$(IncludePath)
配置属性–>VC++ 目录->库目录 = C:\WinDDK\7600.16385.1\lib\win7\i386;$(LibraryPath)
配置属性–>C/C++->常规->警告等级 = LEVEL4(/W4)
配置属性–>C/C++->预处理器->预处理器定义 = WIN3 ...
桌面截屏
桌面截屏 对用户计算机进行截屏,获取截屏数据,能够让病毒木马的控制者直接观看到用户计算机的画面,直 观地了解到目前计算机的操作和状态,便于监控用户计算机的屏幕。如果截屏频率足够快,甚至可以连成 一段视频。在用户层上,通常通过GDI(Graphics Device Interface)方式实现屏幕画面抓取。GDI图形库提供了一 系列绘图接口函数,这极大地简化了绘图操作。GDI虽然是常用的绘图方式,但是压缩算法太差,压缩大 图失真严重,并且只支持BMP图片类型。
代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586#include<windows.h>#include<atlimage.h>BOOL ScreenCapture();BOOL PaintMouse(HDC hdc);B ...
HASH计算 & AES算法调用
HASH计算 & AES算法调用HASH就是把任意长度的输入通过HASH算法变换成固定长度的输出,该输出就是HASH值。HASH值的空间通常远小于输入值的空间,不同的输入可能会得到相同的输出,所以不可能利用HASH值来确定唯 一的输入值。基于这种特性,HASH值常用来执行数据完整性校验。
获取CSP的密钥容器句柄
创建HASH对象、指定算法
计算HASH
从HASH对象查询HASH信息
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 ...