前言
实验主机: Windows xp sp3
工具: Immunity Debugger
Hex Workshop v5.1
漏洞程序: Kolibri v2.0 HTTP Server 版本: 2.0
之前看过一些关于EggHunters技术的文章,但是一直也未进行实践,趁着正好有时间,在网上找到了相关的漏洞软件,准备学习一番。
漏洞分析:寻找溢出点
EggHunters技术是Staged ShellCode技术的一种,寻蛋指令的目的是为了搜索整个内存空间(栈/堆/...)找到我们真正的shellcode并执行它,如果可用的溢出缓冲区放不下整个shellcode代码,就可以用Egg Hunting技术
前置条件:
必须能够跳转,并且执行一些shellcode(寻蛋指令),
最终执行的ShellCode必须在内存的某个位置(堆,栈)
最终执行的ShellCode的前面必须存在唯一标识,寻蛋指令就是逐字节进行查找唯一标识
打开虚拟机,因为软件为绿色软件直接运行即可无需安装
开启服务以后,我们先写一个简单的python测试脚本,看我们下载的程序是否存在远程溢出漏洞
当我们用本机运行测试脚本给Kolibri 2.0 HTTP Server发送包含1000个’A’的http头,Kolibri 2.0直接退出了程序,说明我们的测试起到了效果,然后我们再使用ImmDebug以调试的方式打开Kolibri 2.0.
使用mona插件生成600个测试字符:!mona pattern_create 600,ImmDebug会在调试器根目录下生成一个以pattern命名的.txt文件,此文件中就保存的则是我们的600个测试字符.
我们把测试脚本中的1000个”A”,替换成我们的测试字符:
替换完以后,再次开启Kolibri2.0程序,在本机运行测试脚本.
可以看到我们的调试器弹出了一个窗口,提示不知道怎么继续,因为地址0x32724131不能读,我们把32724131放到mona插件中搜索一下,是否存在于我们的测试字符中.
mona插件搜索到了,这个段字符的偏移为515,我们验证一下我们找到的覆盖EIP的位置,把第516~519个字节改为ABBA,然后再次测试
确实为ABBA的Ascii码.说明我们已经控制了程序的EIP, 此程序有多种利用方法,这里我们使用EggHunters技术
构建缓冲区:
因为一般使用EggHunters技术是因为缓冲区空间有限不能存放我们所有的ShellCode,所以先存放一小段寻蛋指令在溢出缓冲区中,通过这段小指令去寻找我们的大本营(主ShellCode),然后执行主ShellCode.因为空间有限所有我们只能把寻蛋指令放置在溢出缓冲区.现在我们来构建溢出缓冲区的结构:
我们需要一个jmp esp指令的地址与向后跳转的指令还有寻蛋指令
Jmp esp地址可以使用mona插件查找jmp esp指令:!mona jmp -r esp,可以找到一大堆可以使用的地址,我们在其中选取一条;
0x7d5a30d7 : jmp esp | {PAGE_EXECUTE_READ} [SHELL32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v6.00.2900.5512 (C:\WINDOWS\system32\SHELL32.dll)
JmpEgg指令可以使用”\xEB\xC4” //短跳转指令EB,长度-60(0xc4)因为短跳转的范围是-128~127,所以最高正数为7F,大于7F就为负跳转,C4为负跳转;
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!