zoukankan      html  css  js  c++  java
  • Heap Spray:堆与栈的协同攻击

    1:应用场景
    在针对浏览器的攻击中,常常会结合使用堆和栈协同利用漏洞。
    (1)当浏览器或其使用的ActiveX 控件中存在溢出漏洞时,攻击者就可以生成一个特殊的HTML
    文件来触发这个漏洞。
    (2)不管是堆溢出还是栈溢出,漏洞触发后最终能够获得EIP。
    (3)有时我们可能很难在浏览器中复杂的内存环境下布置完整的shellcode。
    (4)页面中的JavaScript 可以申请堆内存,因此,把shellcode 通过JavaScript 布置在堆中
    成为可能。
     
    2:原理
     
    在使用Heap Spray 的时候,一般会将EIP 指向堆区的0x0C0C0C0C 位置,然后用JavaScript
    申请大量堆内存,并用包含着0x90 和shellcode(1M内存的尾部) 的“内存片(1M)”覆盖这些内存。
    通常,JavaScript 会从内存低址向高址分配内存,因此申请的内存超过200MB(200MB=200
    ×1024×1024 = 0x0C800000 > 0x0C0C0C0C)后,0x0C0C0C0C 将被含有shellcode 的内存片覆
    盖。只要内存片中的0x90 能够命中0x0C0C0C0C 的位置,shellcode 就能最终得到执行。
     
     
    1M内存片
     
    3:解释
    1:为什么用0x0c0c0c0c而不是更小的位置?
    因为堆的增长方向是想高地址,所以,越高的地址在申请之前被程序占用的可能性小。
     
    2:为什么是200M?
    200MB=200×1024×1024 = 0x0C800000 > 0x0C0C0C0C
     
    4:MSF中的相关js代码
    var nop=unescape("%u9090%u9090");
    while (nop.length<= 0x100000/2)
    {
    nop+=nop;
    }//生成一个1MB 大小充满0x90 的数据块
    nop = nop.substring(0, 0x100000/2 - 32/2 - 4/2 - shellcode.length - 2/2 );
    var slide = new Arrary();
    for (var i=0; i<200; i++)
    {
    slide[i] = nop + shellcode
    }
  • 相关阅读:
    【Jenkins】坑
    【Windows】修改hosts
    【Linux】防火墙操作-centos7
    【Linux】学习-centos 7
    【Jenkins】介绍、安装
    【Jenkins】有关网站
    【Jenkins】中文汉化
    【Jenkins】修改Jenkins插件为国内源
    python笔记之孤单的元组
    python笔记之水仙花数
  • 原文地址:https://www.cnblogs.com/banchen/p/7844845.html
Copyright © 2011-2022 走看看