萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> 資料庫綜合

MySQL 防下載繞過技術:# 號偽裝失效與 URL 編碼 %23 實戰解析

以為加個 # 號就能防下載?IE URL 編碼 %23 秒破偽裝副檔名

管理員常在資料庫檔名加 `#` (如 `#data.mdb`),以為 IE 會忽略 `#` 後內容而無法下載。實則 **URL 編碼 `%23` 即可繞過**,此技術同樣適用於繞過各類基於副檔名/特殊字元的下載攔截。

攻擊原理:URL 編碼繞過瀏覽器解析

原始請求瀏覽器行為繞過請求Server 端解析
GET /#data.mdb視為錨點,不發送請求GET /%23data.mdb解碼為 `#data.mdb`,正常返回檔案

核心原因:`#` 在 URL 中為片段識別符,瀏覽器**不發送**給 Server。但 `%23` 是 `#` 的 URL 編碼,**會發送給 Server**,Server 端解碼後還原為 `#data.mdb` 並正常處理。

實戰測試驗證

# 假設網站根目錄有 #data.mdb
# 直接瀏覽器輸入 https://site/#data.mdb → 不會下載 (瀏覽器截留)
# 瀏覽器輸入 https://site/%23data.mdb → 正常下載 #data.mdb

# 進階:雙重編碼繞過 WAF
%2523data.mdb  -- %25 = %,解碼後變 %23data.mdb,再解碼為 #data.mdb

擴展:其他常見偽裝手法同樣失效

偽裝手法繞過編碼原理
副檔名修改 data.asp → data.jpg直接請求真實名 data.aspServer 端按實際檔名查找
加入 . 結尾 data.mdb.data.mdb%2e 或 data.mdb.Windows 檔案系統忽略結尾點
加入 $ data.mdb$data.mdb%24NTFS 替代資料流特殊字元
隱藏屬性 + 系統屬性無效,下載不受屬性影響HTTP 協議不檢查檔案屬性

根本防禦:不要將資料庫檔案放在 Web 目錄

# ❌ 錯誤架構
/var/www/html/
  ├─ index.php
  ├─ data/
  │   └─ database.mdb  <-- 可直接 HTTP 存取

# ✅ 正確架構
/var/www/html/           <-- Web Root (DocumentRoot)
  └─ index.php
/var/lib/mysql/          <-- 資料庫目錄 (非 Web 可存取)
  └─ database.mdb        <-- 或使用 SQL Server/MySQL Server 引擎

若必須放在可存取路徑 (共享主機限制) 的補救措施

  1. .htaccess / web.config 禁止直接存取:
    # Apache .htaccess
    
        Order allow,deny
        Deny from all
    
    
    # IIS web.config
    
      
        
          
          
        
      
    
  2. 隨機化檔名 + 目錄權限:`chmod 700 data/` + `chown www-data:www-data data/`
  3. 應用層讀取並輸出**:PHP `readfile()` 輸出,而非直接 URL 存取

總結

`#` 號防下載 = **虛假安全感**。`%23` URL 編碼瞬間繞過。
🔐 **唯一有效防禦**:資料庫檔案**完全移出 Web DocumentRoot**,使用真正的資料庫服務引擎。
🛡 **纏深度防禦**:Web 伺服器層封鎖敏感副檔名、目錄權限最小化、應用層代理讀取。

copyright © 萬盛學電腦網 all rights reserved