《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库

参考书籍:《metasploit渗透测试魔鬼训练营》
准备一台BT5作为入侵机,一台win2003作为靶机,靶机上存在着Oracle数据库(版本为10.2.0.1.0)TNS服务的漏洞,该漏洞的编号为CVE-2009-1979。
BT5:
ip 10.10.10.128
win2003:
ip 10.10.10.130

下面开始演练:
在网上找到了关于这一漏洞的一些介绍,metasploit里有利用这个漏洞的模块,首先search这个模块:
《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第1张图片
进入目录去查看一下这个模块的源代码,找到target,如图:

《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第2张图片

能看出用了p/p/r的溢出方式,以及不同版本需要不同的返回地址变量Ret。

进入metasploit,选择好渗透模块和攻击载荷,配置好参数:
《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第3张图片


《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第4张图片




《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第5张图片

《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第6张图片

配置好后,执行exploit命令,发现没有返回shell:

《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第7张图片

多以执行后依然没有返回,于是就怀疑系统版本的问题。
首先怀疑是返回地址出现的差错,于是去靶机用OllyDbg加载了ORACLE.EXE进程,从渗透模块的源代码可以知道,Ret为0x011b0528,对应的是p/p/r,
在靶机上定位到该位置,如图:


没有错啊,,

没有思路了,,还是回去翻了翻书,根据书上的思路来吧。。

回去看了看模块源代码,找到了这几行,有了线索:
《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第8张图片
数据包用了AUTH_SESSKEY作为名称标识,这就意味着ORACLE程序中肯定用到了这个标识,回到OllyDBG,查看所有的文本字符串,如图:

《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第9张图片
在文本框中搜索 AUTH_SESSKEY,找到了三个,如图:
《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第10张图片
分别跟进去看了看,发现都调用了同一个函数,这里就截一个图:

跟踪这个函数,来到了这里:

《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第11张图片
在60FD99AC下个断点,然后F9让程序跑起来,然后再次用BT5的exploit命令攻击。程序断在断点处。
然后用Ctrl+F9到返回处01010EBD,如图:


接着又调用了CALL_02610928函数,看了书才知道这是_intel_fast_memcpy函数,F7跟进,可以再栈中看到调用的参数,
Address        Value            Comments
0673D040    |0673DA96    目的地址
0673D044    |04AB99A4     源地址
0673D048    |000001A7     复制长度

接下来看一下SEH:
Address        Value            Comments
0673DC40    |0673DE64    Pointer to next SEH record
0673DC44    |0261348C    SEH handler

计算一下,向目的地址0673DA96复制长度0X1A7字节的数据,最终覆盖到0X0673DC3D 没有覆盖到SEH起始地址0X0673DC40 。
真相大白了,原来是复制的字符串不构长!
在内存部分中找到源地址04AB99A4处的字符串,然后查找开始时找到的返回地址Ret0x011B0528,地址为0x04AB9B42。
计算一下偏移量:
返回地址和源地址之间:0x04AB9B42-0x04AB99A4=0x19E
目的地址到SEH Handler之间:0x0673DC44-0x0673DA96=0x1AE
故,需要增加0x10的随机字节,找到模块中构造溢出字符串的源代码:

《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第12张图片
修改为


《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第13张图片

为了覆盖必须加长字符串,所有+0x10。这样做就加大了栈中payload和跳转指令偏移量,所以也要修改jmp指令跳转的距离,由于jmp后移0x10,前面字符串增加0x10最终增加+0x20,这里说的略简单,不懂的读者可以去百度一下SEH跳转内存攻击原理,就不在详细说了,过于繁琐,而且我也不是很懂。

重新启动ORACLE服务,在BT5上重新测试,用rexploit命令,结果:

《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例Oracle数据库_第14张图片
成功。


演练心得:
这次演练主要是根据书上的步骤来的,如果没有书的教程,自己根本就做不来,特别是程序跟踪调试,完全就是一步步跟着做,换个演练案例估计就跪了。。。所以以后得加强这方面的学习和实践,还有关于利用SEH异常溢出漏洞的原理还是不太懂,计算偏移量时有点混乱。。毛病多多啊。。。
这两天好好把这些梳理梳理,会转载一些关于讲解溢出漏洞的文章(自己写不出来啊。。),还有关于程序调试的。

你可能感兴趣的:(metasploit)