
1. 什么是 SQL 注入SQL 注入是指攻擊者將惡意 SQL 代碼插入到輸入參數中應用程序未進行過濾便將其拼接到 SQL 查詢語句中導致數據庫執行了非預期的命令。一句話解釋就是你輸入的內容被直接當作代碼執行了2. 四種常見類型2.1 聯合查詢注入原理利用 UNION 關鍵字將攻擊者的查詢結果拼接到正常查詢結果后面在頁面上回顯。步驟1. 猜列數1 ORDER BY 1 --2. 找顯示位-1 UNION SELECT 1,2,3 --3. 查數據-1 UNION SELECT 1,database() --示例-1 UNION SELECT 1, table_name FROM information_schema.tables WHERE table_schemadvwa --適用條件頁面有顯示位能直接看到查詢結果。2.2 報錯注入原理利用 updatexml() 或 extractvalue() 函數故意構造非法 XPath 路徑觸發數據庫報錯在錯誤信息中帶出數據。示例1 AND updatexml(1, concat(~, database(), ~), 1) --適用條件頁面能顯示 SQL 報錯信息。2.3 布爾盲注原理頁面只有兩種狀態“存在”/“不存在”通過構造布爾條件逐位猜出數據。猜長度1 AND LENGTH(database())4 --以此類推。猜字符1 AND SUBSTRING(database(),1,1)d --以此類推。適用條件頁面無數據顯示但能區分“真/假”狀態。2.4 時間盲注原理通過 SLEEP() 函數制造時間差根據頁面響應時間判斷條件是否成立。示例1 AND IF(LENGTH(database())4, SLEEP(5), 0) --適用條件頁面沒有任何變化只能靠響應時間判斷。3. 防御 SQL 注入最有效的方法是參數化查詢預編譯語句。將 SQL 代碼與數據分離用戶輸入永遠不會被當作代碼執行。其他防御措施對輸入進行過濾與轉義最小權限原則關閉錯誤回顯隱藏數據庫報錯信息4. 總結SQL 注入的本質是用戶輸入被拼接到了 SQL 語句中。防御的核心是不信任用戶輸入使用參數化查詢是根本解決手段。**免責聲明**本文所有操作均在自建虛擬機環境中完成僅用于網絡安全學習與研究。嚴禁用于任何非法用途違者自行承擔后果。