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

准备一台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这个模块:
进入目录去查看一下这个模块的源代码,找到target,如图:
 
 
能看出用了p/p/r的溢出方式,以及不同版本需要不同的返回地址变量Ret。
 
进入metasploit,选择好渗透模块和攻击载荷,配置好参数:
 
 
 
 
 
 
 
 
配置好后,执行exploit命令,发现没有返回shell:
 
 
多以执行后依然没有返回,于是就怀疑系统版本的问题。
首先怀疑是返回地址出现的差错,于是去靶机用OllyDbg加载了ORACLE.EXE进程,从渗透模块的源代码可以知道,Ret为0x011b0528,对应的是p/p/r,
在靶机上定位到该位置,如图:
 
没有错啊,,
 
没有思路了,,还是回去翻了翻书,根据书上的思路来吧。。
 
回去看了看模块源代码,找到了这几行,有了线索:
数据包用了AUTH_SESSKEY作为名称标识,这就意味着ORACLE程序中肯定用到了这个标识,回到OllyDBG,查看所有的文本字符串,如图:
 
在文本框中搜索 AUTH_SESSKEY,找到了三个,如图:
分别跟进去看了看,发现都调用了同一个函数,这里就截一个图:
跟踪这个函数,来到了这里:
 
在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的随机字节,找到模块中构造溢出字符串的源代码:
 
修改为
 
 
 
为了覆盖必须加长字符串,所有+0x10。这样做就加大了栈中payload和跳转指令偏移量,所以也要修改jmp指令跳转的距离,由于jmp后移0x10,前面字符串增加0x10最终增加+0x20,这里说的略简单,不懂的读者可以去百度一下SEH跳转内存攻击原理,就不在详细说了,过于繁琐,而且我也不是很懂。
 
重新启动ORACLE服务,在BT5上重新测试,用rexploit命令,结果:
 
成功。
原文地址:https://www.cnblogs.com/student-programmer/p/6729174.html