首先打开£乂061文件,然后用町沾80附加它,如图1.?丨沾8&_八11&01^叩_10_£1061所示: 图 1 • ff i nDBG_At t ach i ng_t o_Exce1 在 CreateFile 函数上设置断点,如图 2. WinDBG_Breakpoint_Create^i 1 e 所示: eax=7ffdd000 ebx=00000001 ecx= eip=7c81a3el esp=009bffcc ebp=009bfff4 iopl=0 csBOOlb ss 0023 ds=0023 ess0023 fs-0038 gs*0000 *** ERROR SyMboi iile could not be £ound. Defaulted to export syMbols £or C:、 ntdll!DbgBreakPoint 7c81a3el cc int 3 0:003> bp kernel32!CreeteFileU *** ERROR Sy»bol file could not be found. Defaulted to export synbols for C:s 0:003> g 着开始跟踪进程,以生成追踪文件,如图3.?11^曲一1^^6一¥01所示 再用十六进制编辑器(笔者是使用1^32)打开文件,然后在程序内存中搜索输入的字符串, 并在编辑器中找到它,以判断文件是在何处加载它的,如图5. Finding_User_ Input_in_Memory 所示: 这个也可以使用windbg的搜索功能中定位用户输入的字符串, 在gui中打数据追踪文件,然后添加污点范围, 接下来你就可以针对感兴趣的指令以及根据指定的内存范围进行污点分析了。先在任意指令上右击后弹出如图10. 70乙0^^1&1的」^所示的菜单: | ■ Visual Data Tracer H0®l Ffle: Aha^sis Help 3d931757 E.d pop ebpO ,* 3d93175d Ga2c push 2ChD 3d93175f G81018933d push offset Wl NIN E T! 0 rdinal351 +0x1810 (3d931810J 3d9317G4 e8Qbffffff call WININETfOrdinal351+Ox1 G74 (3d931G74J 3dS31674 68f0689d3d push offset Wl NIN E T! I nteinetConliimZoreCros?in9A+Qxbcf2 (3d3d68fOp 3d931679 G4lf3500000000 ■ push dword pti fs: [0] Is: 0038:00000000=03ealfadl 3d931 G80 8b442410 mov eaK,dwoid ptr [esp+10h] ss:0023:03eafl24=0000002dl 3d931 G84 89Gc24-10 mov dvuoid ptr [esp+10h],ebp ss:0023:03eaff24=0000002cfl 3d931G88 8dGc24T0 le^ ebpJesp+10hf 3d931 G8c 2be0 $ub esp.ead 3d331 B8e 53 pu$h ebd 3d93168f5G push esh 3d931G90 57 push edt 3d931 G91 a12c139e3d mov ea^.dmid ptr 叫丨 NIN E T! I ntemetConfiimZoreCrossirgA+OxI G72e (3d9e132c]] ds: 0023:3d9e132c=59b4c5e ■ 3d931 B9G 3145fc no\ dword pti [ebp-4].eax ss: 0023:03eaft20=3d9318100 3d931699 33c5 xoi eax,ebpO 3d331 S3b 50 pu$h ead 3d931 S9c S9e5e8 mov dword pti [ebp-18h].esp ss: 0023:03ealf0o=ftVLDAP32! O rdinal325 (7GIGOOOO)Jl 3d931G9fff75f8 push dvuoidplr[ebp-G] ss: 0023:03eaff1 c=3d9317G9l '3d931 Sa2 8b45fc mov eax.duvoid ptr [ebp-4] ss: 0023:03eaff20=G427ddf4D 3.d931 Ba5 c745fcfeftfBf mov dword pti [ebp-4],0FFFFFFFEh ss: 0023:03eaf(20=G427ddf4l MBaSOB9BBiSBBBa ^Hi***E5HB5EE^9n**BB*535T "' 3d9316af8d45l0 lea eax,[ebp 3d931Gb2G4a300000000 mov * 3d931Gb8c3 3d9317G9 8b4d0c 3d9317Gc33d2 3d93176e42 inc edrfl 3d9317Gf 8955e4 mov dwoid plr [ebp-1 Ch],edx ss:0023:03ealf08=7GfG11 e7D 3d931772 33IG xor esi,esd .3d931774 8975fc mov dwwd ptr [ebp-4].esi ss: 0023:03eaff20=fftfBfe0 3d93l 777 830d882e3e3d mov dword pti fVI NIN E T! I nternetConfirmZoneCiossingA+0x1828a [3d3e2e88)],ew ds: 0023:3d9e2e88=fKftffB 3d9317e3 c745fc03000000 mov dwoid pti [ebp-4],olfset <Unloaded uie.dll>+0x2 [OOQ00003) ss:0023:Q3ealf20=OOOOOOOCB 3d9317ca 117510 push dword pti [ebp+10h] ss0023:03ealf34=OOOOOOOCB 3d9317cd 51 push eciJI 3d9317ce H7508 push . dword pli [ebp+8] ss: 0023:03eaff2c=W NIN E T! Oidinal351 (3d930000)^l 3d9317d1 e8fcfeffff call WININET!Ordinal351+Ox1 Gd2 (3d931Bd2J 3d93iGd2 8bff mov edi,edl 3d9316d4 55 pu$h ebpD 3d9315d5 8bec mov ebp,e$pO 然后选择“check taint of”选项后,最后它就会给出指定程序操作数的所有污染信息,解决方案与对比 微软发布了!61口10^油16【5】插件以及源码,此举起了很大的主导作用,为研究者和 软件厂商建立起了桥梁,因为至少现在一些厂家可以对报告的漏洞利用等级进行分类了。虽 然这一工具在定义利用等级上有一些不足,但它提供了很好的扩展性支持,并在此领域开了 个很好的头。这一工具的另一个优秀功能就是它能识别出独一无二的漏洞,用于消除重复的 问题。下面举个例子: _declspec(naked) int main() { _asm { mov eax, 0x41414141 call eax 上例问题会被工具归类为EXPLOITABLE,因为它总是认为攻击者能够控制所有的输入操作, 如图 14. 8&即61口10^^&1^6[口所示: 本文提供的解决方1 下面的方法来与 !exploitable XJ 參分类单一问题(针对不同的代码路径,机器和多种不同的测试环境); 參快速区分处理的次序问题(由于崩溃可出现上千次,因此分析能力是十分有限的); 參分组进行崩溃分析。 笔者所提供的工具: |