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

Oracle 客戶端 API 層攔截技術原理與實戰:截獲數據庫連接密碼

     編輯:Oracle 資料庫基礎

安全架構分層視角

典型 C/S 系統數據流:


客戶端應用 → (1) → Oracle 客戶端庫 → (2) → TCP/IP → 網絡 → TCP/IP → Oracle Server
  • (2) 網絡層:Oracle 專有加密(不可逆),抓包無法還原密碼。
  • (1) API 層:應用以**明文**調用 OCI/ODBC/BDE 傳遞 user/pass,**此處可攔截**。

攻擊面分析

  • 應用內置固定連接賬號(非最終用戶登錄賬號),啟動時解密並明文傳給客戶端庫。
  • 目標:攔截 API 層明文密碼,獲取應用內置連接憑證。

核心技術鏈

  1. 定位加密入口:逆向跟蹤發現 OraCore8.dll 導出函數 lncupw 負責密碼加密。
    簽名:lncupw(OUT buf, 0x1E, IN pass, pass_len, IN user, user_len, NULL, 1)
  2. DLL 註入/補丁:修改 OraCore8.dll 導出表,將 lncupw 入口指向自定義 Hook 代碼段。
  3. Hook 邏輯:
    - 從堆棧取出 user/pass 指針與長度。
    - 複製明文至本地緩衝區。
    - 彈窗/寫日志顯示憑證。
    - JMP 跳回原始 lncupw 繼續正常加密流程。

關鍵實現細節(摘要)

  • PE 結構修改:掃描節表 → 追加可執行/可寫節 → 寫入 Shellcode → 修正 JMP 偏移 → 更新導出表 RVA。
  • Shellcode 自舉:運行時定位 Kernel32.dll → 解析導出表獲取 LoadLibrary/GetProcAddress → 動態解析 User32.MessageBoxA、wsprintfA 等 API。
  • 堆棧取參:ESP+13*4 = user_ptr, ESP+14*4 = user_len, ESP+11*4 = pass_ptr, ESP+12*4 = pass_len(經 PUSHAD 保護現場)。
  • SEH 保護:安裝結構化異常處理器,防止解析失敗導致進程崩潰。

防禦與緩解

  1. 應用層加密:連接字符串在內存中加密存儲,調用 API 前瞬間解密,縮小明文窗口。
  2. 外部認證:使用 OS 認證(OPS$)、Kerberos、SSL 憑證、Oracle Wallet,消除明文密碼傳遞。
  3. 完整性校驗:啟動時驗證 OraCore8.dll 數字簽名/哈希,檢測補丁篡改。
  4. 最小權限原則:應用連接賃戶僅授予必要對象權限,密碼洩露後影響可控。
  5. 審計監控:啟用統一審計記錄所有 CREATE SESSION,異常 IP/時間/程序名告警。

法律與道德聲明

本文旨在揭示客戶端 API 層明文傳遞的固有風險,**嚴禁用於非授權滲透測試或惡意竊取憑證**。實際生產環境請採用上述防禦措施構建纵深防御體系。

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