ASP/ASP.NET 早期網站常將 Access 資料庫 (.mdb) 放在 Web 目錄下,為防直接下載,管理員嘗試改副檔名 (.asp、.asa)、加 # 號、設定密碼。但攻擊手法層出不窮,本文揭示繞過這些防禦的實戰技術,以利防守方加強防護。
.asp、.asa 預設交給 ASP 引擎解析,**不會直接當作靜態檔下載**。https://site.com/data/db.asp 瀏覽器顯示原始碼/錯誤,迅雷直接下載完整二進位檔。# 號防禦#db.mdb 瀏覽器會忽略 # 後內容而無法下載。# → %23。瀏覽器/下載工具請求 %23db.mdb,伺服器解碼後仍為 #db.mdb,**照樣下載**。空格 → %20、@ → %40 等特殊字元均可編碼繞過。AccessKey、Advanced Access Repair 幾秒到幾分鐘即可暴力破解密碼。典型 conn.asp 寫法:
db = "data/rds_dbd32rfd213fg.mdb"
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
攻擊手法:
https://site.com/conn.asp → 若 IIS 配置錯誤未對 .asp 映射處理器,直接顯示原始碼 → 洩露路徑。%5c (反斜線 URL 編碼) 繞過路徑解析**:https://site.com/%5cconn.asp 或 https://site.com/..%5cconn.asp → 可能導致原始碼洩露或目錄遍歷。| 錯誤做法 | 正確做法 |
|---|---|
| 資料庫放在 Web 目錄下 | 資料庫放在 Web 根目錄之外 (如 D:\db\),Data Source 用絕對路徑 |
| 依賴副檔名、#號、Access密碼 | IIS 設定 .mdb、.asp 禁止下載/執行;改用 SQL Server / MySQL 等獨立資料庫服務 |
| 連線字串寫在 .asp 檔 | 連線字串放在 web.config 加密區段、環境變數、Key Vault |
| 未限制錯誤訊息輸出 | customErrors mode="RemoteOnly"、關閉詳細錯誤頁面 |