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

Oracle Web 環境 SQL 注入攻擊技術解析:系統表利用、PL/SQL 注入分類、Cursor 繞過、匿名區塊高危場景

     編輯:Oracle 資料庫基礎

Oracle 豐富的系統表、PL/SQL 特性與 Web 應用框架差異,形成獨特的 SQL 注入攻擊面。本文系統解析**系統表情報收集、注入點分類 (DML vs PL/SQL vs 匿名區塊)、Cursor/DBMS_SQL 繞過限制、PHP 轉義繞過**、以及防禦建議,供安全測試與程式碼審計參考。

情報收集:系統表是金鑰

Oracle 幾乎所有中繼資料存於系統表/視圖:

  • SYS.V_$OPTION:資料庫選項 (Java、Partitioning、OLAP 等)
  • ALL_TABLES / ALL_TAB_COLUMNS:可存取表與欄位結構
  • USER_OBJECTS、DBA_USERS、V$VERSION:物件、用戶、版本

攻擊者先查系統表掌握結構,再精準提取業務資料。

注入點分類與利用難度

注入點類型特性多語句支援DDL 執行典型利用手法
DML (SELECT/INSERT/UPDATE/DELETE)最常見,單語句否否UNION 查詢、盲注、Error-based
PL/SQL 存儲過程/函數參數動態 SQL 組裝 (EXECUTE IMMEDIATE)否 (單塊)需建立自訂函數/過程注入建立函數 → 執行 DDL
Cursor / DBMS_SQL動態游標 API是 (多 OPEN/PARSE/EXECUTE)是繞過單語句限制,直接跑 DDL
匿名 PL/SQL 區塊 (BEGIN ... END)極少見,但最危險**是****直接可跑**幾乎無限制,等同本地登入

關鍵繞過技術

1. Cursor 注入 (DBMS_SQL)

-- 攻擊者輸入
' ; 
DECLARE c NUMBER; 
BEGIN 
  c := DBMS_SQL.OPEN_CURSOR; 
  DBMS_SQL.PARSE(c, 'GRANT DBA TO PUBLIC', DBMS_SQL.NATIVE); 
  DBMS_SQL.EXECUTE(c); 
END; --

利用 DBMS_SQL 套件在單一注入點執行多條 DDL,提權極快。

2. 匿名區塊注入 (最高權限)

-- 若輸入直接置於 BEGIN ... END 之間
BEGIN
  -- 原始邏輯
  SELECT * FROM users WHERE id = '1';  -- 攻擊者控制 '1'
  -- 注入 payload
  EXECUTE IMMEDIATE 'CREATE USER hacker IDENTIFIED BY pwd';
  GRANT DBA TO hacker;
END;

可直接執行任意 PL/SQL,**繞過所有單語句、權限檢查**,極難防禦。

Web 框架差異影響

框架參數過濾類型檢查注入易發點
ASP / 早期 PHP幾乎無弱型別所有參數
.NET / JSP部分內建**強型別** (數字參數自動拒絕字串)**字串參數** 為主
PHP (magic_quotes_gpc=On)' → \'弱型別單引號被破壞

PHP + Oracle 轉義陷阱

  • PHP magic_quotes 將 ' 轉為 \'。
  • Oracle **不認識 \'**,單引號轉義是 '' (兩個單引號)。
  • 攻擊者輸入 ' 經 PHP 變 \' 送入 Oracle,**語法錯誤而非注入成功**;但攻擊者可改用 CHR(39)、|| 連接、HEXTORAW 等無單引號 payload。

防禦檢查清單

  1. 參數化查詢 / 綁定變數:PreparedStatement、EXECUTE IMMEDIATE ... USING、**絕不拼接字串**。
  2. 最小權限原則:Web 連線帳號**僅授予必要表的 SELECT/INSERT/UPDATE/DELETE**,**無 CREATE PROCEDURE、GRANT、DBA 權限**。
  3. 禁用危險套件:REVOKE EXECUTE ON DBMS_SQL FROM PUBLIC、UTL_FILE、DBMS_JOB 等。
  4. 錯誤訊息不回顯:生產環境捕獲例外回傳通用錯誤,避免洩露表結構、PL/SQL 堆疊。
  5. WAF / 審計:部署資料庫防火牆 (Oracle Database Firewall) 或啟用 Fine-Grained Auditing (FGA)。
  6. 程式碼審計:掃描 EXECUTE IMMEDIATE、DBMS_SQL、動態 PL/SQL 組裝點。

理解 Oracle 注入的**系統表情報鏈、PL/SQL 多語句繞過、框架轉義差異**,才能在程式碼審計與滲透測試中精準定位高危洞洞,並實施有效防禦。

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