堆喷射

堆喷射主要用于绕过ASLR。下面演示堆喷射分析与效果。

1.代码

void heap_spray()
{
  char chunk[LEN] = { 0 };
  memset(chunk, 0x90, LEN - 10);
  strcat(chunk, "shellcode");
  for (int i = 0;i < 100;i++)
  {
    void *p = malloc(LEN);
    strcpy((char *)p, chunk);
    printf("spray %d\n", i);
  }
}

2.windbg分析

  • !heap -stat:堆统计信息

_HEAP 002a0000
  Segments 00000001
  Reserved bytes 00100000
  Committed bytes 0009c000
  VirtAllocBlocks 00000000
  VirtAlloc bytes 00000000
_HEAP 00020000...

  • !heap -stat -h 002a0000//查看segement 2a0000堆块大小统计情况

    group-by: TOTSIZE max-display: 20
    size #blocks total ( %) (percent of total busy bytes)
    1000 65 - 65000 (94.88)//大小为0x1000,共0x65个,占比94.88%,可见堆喷射效果较好
    20 6e - dc0 (0.81)
    c00 1 - c00 (0.70)
    bec 1 - bec (0.70...

  • !heap -flt s 1000:列出所有大小为0x1000的堆块

    _HEAP @ 2a0000
    HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
    002c9e50 0201 0000 [00] 002c9e58 01000 - (busy)
    002cae58 0201 0201 [00] 002cae60 01000 - (free)
    002cbe60 0201 0201 [00] 002cbe68 01000 - (busy)
    002cce68 0201 0201 [00] 002cce70 01000 - (busy)
    002cde70 0201 0201 [00] 002cde78 01000 - (busy)
    002cee78 0201 0201 [00] 002cee80 01000 - (busy)

  • 0:000> dc 0032df90+0x1000-10//验证到顺序分配,并且相临。同时包含0x8的堆头。一个堆块大小为0x1000+0x8.
    0032ef80 90909090 68739090 636c6c65 0065646f ......shellcode.
    0032ef90 1a394b70 88000000 90909090 90909090 pK9.............
    0032efa0 90909090 90909090 90909090 90909090 ................
  • !address:使用address查看内存属性

    BaseAddr EndAddr+1 RgnSize Type State Protect Usage
    -----------------------------------------------------------------------------------------------
    + 0 10000 10000 MEM_FREE PAGE_NOACCESS Free
    + 10000 20000 10000 MEM_MAPPED MEM_COMMIT PAGE_READWRITE Heap [ID: 1; Handle: 00010000; Type: Segment]
    + 20000 30000 10000 MEM_MAPPED MEM_COMMIT PAGE_READWRITE Heap

   Type:

MEM_IMAGE 映射的文件属于可执行映像一部分的内存。
MEM_MAPPED 映射的文件不属于可执行映像一部分的内存。这种内存包含哪些从页面文件映射的内存。
MEM_PRIVATE 私有的(即不和其他进程共享)并且未用来映射任何文件的内存。

  

 

   State

MEM_COMMIT 当前已提交给目标使用的所有内存。已经在物理内存或者页面文件中为这些内存分配了物理的存储空间。
MEM_RESERVE 所有为目标以后的使用保留的内存。这种内存还没有分配物理上的存储空间。
MEM_FREE 目标虚拟地址空间中所有可用内存。包括所有未提交并且未保留的内存。该Filter 值和RegionUsageFree一样。

   

Protect:

Filter value Memory regions displayed

PAGE_NOACCESS


Memory that cannot be accessed.


PAGE_READONLY


Memory that is readable, but not writable and not executable.


PAGE_READWRITE


Memory that is readable and writable, but not executable.


PAGE_WRITECOPY


Memory that has copy-on-write behavior.


PAGE_EXECUTE


Memory that is executable, but not readable and not writeable.


PAGE_EXECUTE_READ


Memory that is executable and readable, but not writable.


PAGE_EXECUTE_READWRITE


Memory that is executable, readable, and writable.


PAGE_EXECUTE_WRITECOPY


Memory that is executable and has copy-on-write behavior.


PAGE_GUARD


Memroy that acts as a guard page.


PAGE_NOCACHE


Memory that is not cached.


PAGE_WRITECOMBINE


Memory that has write-combine access enabled.

  • !address 0032df90

    Usage: Heap
    Base Address: 002a0000
    End Address: 0033c000
    Region Size: 0009c000 ( 624.000 kB)
    State: 00001000 MEM_COMMIT//已经在物理内存中分配
    Protect: 00000004 PAGE_READWRITE//可读写,但不可执行
    Type: 00020000 MEM_PRIVATE
    Allocation Base: 002a0000
    Allocation Protect: 00000004 PAGE_READWRITE

  • 修改寄存器命令 
    r @eax=1  //将eax置为1

    修改内存命令
    ed 80505648 00001234

时间: 2024-10-10 10:26:30

堆喷射的相关文章

xkungfoo 2015 参会笔记

有点像第二位演讲者玩命说的,"我给技术人员丢脸了",不同之处在于他演讲是去打广告的,而我挂着技术人员的称号,实际上却不太懂技术. 因此,往下看之前请慎重考虑是否要继续点鼠标或下拉条. 0x1 内容 跨进程域利用内核漏洞提升Android权限 打造移动金融核心程序安全流水线 关于Office Word程序的漏洞发掘 基于Binder调用攻击Android系统服务提权 社会工程学攻击的实例化 .... 0x2 跨进程利益内核漏洞提升Android权限 演讲者是申迪 @retme,之前曾搞过

ret2dir:Rethinking Kernel Isolation(翻译)

前一段时间在网上找ret2dir的资料,一直没找到比较系统的介绍,于是干脆把这篇经典的论文翻译了,当然,第一次翻译(而且还这么长),很多词汇不知道到底该怎么翻译,而且最近事情也比较多, 翻译得挺烂的,如有错误,请指正. 后续如果有机会也会分享一些关于ret2dir利用的一些理解,和使用技巧. 翻译 by JDchen2016年12月7日 摘要 Return-to-user(ret2usr)攻击将被破坏的内核指针重定向到用户空间.为了获得一个更严格的地址空间隔离以应对这种攻击,我们采取一些内核加固

Metasploit渗透测试魔鬼训练营

首本中文原创Metasploit渗透测试著作,国内信息安全领域布道者和资深Metasploit渗透测试专家领衔撰写,极具权威性.以实践为导向,既详细讲解了Metasploit渗透测试的技术.流程.方法和技巧,又深刻阐释了渗透测试平台背后蕴含的思想. 本书是Metasploit渗透测试领域难得的经典佳作,由国内信息安全领域的资深Metasploit渗透测试专家领衔撰写.内容系统.广泛.有深度,不仅详细讲解了Metasploit渗透测试的技术.流程.方法和技巧,而且深刻揭示了渗透测试平台背后蕴含的思

第三方插件渗透攻击之KingView

类别:堆溢出 描述:本次渗透利用了KingView6.5.3 SCADA中的ActiveX插件中存在漏洞的方法调用target.ValidateUser(arg1, arg2),通过缓冲区溢出覆盖了SEH,再利用堆喷射成功执行payload! 参考资料:<Metasploit魔鬼训练营>p261-p269 由于Metasploit没有相应的模块,所以可以参考exploit-db上的漏洞详情,自己编写代码: https://www.exploit-db.com/exploits/16936/ 咱

为什么要研究IE漏洞

目前就漏洞利用对抗这一层面来说,android.ios.基于Linux的移动平台是大家关注的热门方向,与这些热点比起来Windows上的一些"老家伙"诸如IE(包括Edge,以下皆是)可能就不怎么受到关注了,但是我个人作为一个二进制的入门小白还是觉得围绕着IE的攻防对抗有很多值得学习的东西.其实主要是因为自己想了一下,为啥Windows的这些洞前辈们都搞了这么多年了,还去费心思去研究它?这里列出了想到的几点: 1.IE一直处于攻防对抗的最前沿:IE系列一直是采用了微软最新最强的漏洞缓解

IE下Heap Spraying方法的部分总结

Before Heap Feng Shui in JavaScript 在CVE-2004-1050的exploit中,SkyLined使用了heap spraying的方法.这种技术使用JavaScript来创建大量字符串,其中字符串中包含NOP slide和Shellcode.之后JavaScript运行时会在堆中为每个字符串申请一块新的内存来存储这些字符串.堆中的内存分配通常在内存地址空间的起始处开始,并且线性增长.在为字符串分配了200MB的内存后,位于50MB和200MB之间的任何地址

《metasploit渗透测试魔鬼训练营》学习笔记第六章--客户端渗透

四.客户端攻击 客户端攻击与服务端攻击有个显著不同的标识,就是攻击者向用户主机发送的恶意数据不会直接导致用户系统中的服务进程溢出,而是需要结合一些社会工程学技巧,诱使客户端用户去访问这些恶意数据,间接发生攻击. 4.1客户端渗透攻击的安全防护机制 ①DEP DEP(数据执行保护)基本原理是操作系统通过设置内存页的属性,指明数据所在的内存页为不可执行. ②ASLR ASLR(地址空间布局随机化)是系统在运行程序时,不用固定的基地址加载进程及相关工作库文件. 包括:堆地址的随机化,栈基址的随机化,P

浅谈 编译器 &amp; 自然语言处理

============================================== copyright: KIRA-lzn ============================================== 转载请注明出处,这篇是我原创,翻版必究!!!!!!!!!!!!!!!!!!! ============================================== 如果觉得写个好,请留个言,点个赞. 自我介绍:本人13届 USTC 研一学生,菜鸟一枚,目前在int

科普 | 你必须了解的漏洞利用缓解及对抗技术

随着软件系统越来越复杂,软件漏洞变得无法避免.业界逐渐推出了让漏洞无法利用或利用难度提高的方法,简称漏洞缓解技术.我们简单介绍下Android和iOS中广泛使用的一些漏洞缓解及可能的绕过技术.当然这里也包含一些相关联的安全限制,而非真正意义的缓解技术. 缓解及绕过技术点 User Permission 每个app有自己uid,selinux_context,只有申请并且用户允许才有权限做它想做的事.要突破这些限制,可以考虑通过每个app合理的权限相互结合后产生的不合理性来入手.或者App之间交互