作者記錄一次針對某電影網站的 SQL 注入滲透測試過程(網址、帳密已脫敏),展示從漏洞發現、環境偵察、猜解表/欄位、鎖定目標、計算長度、逐字元破解帳密的完整手工注入流程。
關閉 IE 友好錯誤提示,測試帶參數頁面 movie.asp?ID=1000,加單引號觸發錯誤,確認 Access 資料庫、注入點為 ArticleID。
構造 ID=(SELECT COUNT(1) FROM user) 觀察回應:正確表名會返回資料/提示 EOF/報錯;錯誤表名提示「找不到表」。常用表名字典:user, users, member, members, userlist, admin, manager...。成功猜中 users。
將 COUNT(1) 改為 COUNT(id),無「找不到欄位」錯誤即代表欄位存在。確認欄位:ID(數值)、UserID、PassWord、money(積分)。
用子查詢篩選 money > 25500 僅返回一筆記錄,避免猜解多用戶干擾。
利用 LEN(UserID) + 1000 對應電影 ID,配合站內搜尋功能反查 ID 對應片名,推算長度:UserID=6、PassWord=8。
構造 ASC(MID(UserID,1,1)) + 1000 取得首字元 ASCII,配合搜尋反查對應字元。依序獲得:
104,117,97,106,105,101 → huajie49,57,55,56,48,55,55,50 → 19780712 (生日密碼)耗時約 45 分鐘 (猜表 30 分鐘、破解 15 分鐘) 取得管理員權限,隨後下載電影資源。
警示:本文僅記錄滲透測試技術過程,所有目標已授權或為作者自有環境。未經授權對他人系統進行 SQL 注入屬違法行為,嚴禁模仿。開發者應採用參數化查詢、最小權限、錯誤訊息隱藏等措施防範注入。