使用 SQL 注入繞過登入頁面身份驗證
SQL 注入是一種常見的安全漏洞。它發生在攻擊者透過注入惡意的 SQL 程式碼來操縱 Web 應用程式的資料庫查詢時。SQL 注入利用的最關鍵的區域之一是應用程式的登入頁面。當用戶輸入其憑據時,這些輸入通常用於構建資料庫查詢以驗證使用者的身份。
如果應用程式沒有正確地清理這些輸入,攻擊者可以透過注入修改預期查詢的 SQL 語句來繞過身份驗證,從而獲得未經授權的訪問許可權。
什麼是 SQL 注入?
SQL 注入是一種程式碼注入技術,它透過在輸入欄位中插入或“注入” SQL 查詢來利用應用程式軟體中的漏洞。
當用戶輸入未被正確清理時,攻擊者可以操縱資料庫執行的 SQL 查詢,從而可能獲得對資料的未經授權的訪問許可權。
登入頁面中 SQL 注入的機制
考慮一個簡單的登入表單,使用者在其中輸入其使用者名稱和密碼。後端可能會執行如下 SQL 查詢。
SELECT * FROM users WHERE username = 'username' AND password = 'password';
如果應用程式沒有正確地清理“$username”和“$password”輸入,攻擊者可以注入惡意的 SQL 程式碼來操縱查詢。
在執行 SQL 注入攻擊時,我們需要謹慎,並獲得網站所有者或導師的適當許可。在某些情況下,它可能導致資料丟失。
SQL 注入攻擊示例
對於此示例,我們使用了Portswigger Lab. 要執行SQL 注入,您需要安裝Burp-suite. 根據您的方便,您可以安裝社群版或專業版。
實驗連結: https://portswigger.net/web-security/sql-injection/lab-login-bypass
Burpsuite 連結: https://portswigger.net/burp/communitydownload
按照以下步驟操作 -
步驟 1:開啟包含登入頁面的網站。
步驟 2:在使用者名稱欄位中鍵入“administrator”,並在任何隨機密碼(例如“admin”)中鍵入。

步驟 3:開啟Burp suite並捕獲當前的登入請求。您應該在攔截器中看到200 OK。
步驟 4:在後臺,SQL 查詢將如下所示
步驟 5:這裡,“users”是表名,其中包含資料庫中的使用者名稱和密碼。
步驟 6:現在,如果您提交請求,您將在登入視窗中收到一個錯誤,提示“無效的使用者名稱或密碼”。
步驟 7:如果使用者名稱欄位包含單引號,則在執行查詢時將觸發錯誤。
步驟 8:應用程式在攔截器中生成500 內部伺服器錯誤,並在 HTTP 響應中生成無效的使用者名稱或密碼錯誤。
步驟 9:現在,實際的 SQL 負載如下所示“ administrator'-- ”。
步驟 10:-- 序列在 SQL 中用作註釋分隔符。當攻擊者將 -- 注入查詢時,它指示 SQL 資料庫忽略該行的其餘部分。這對於操縱預期的 SQL 查詢很有用。

步驟 11:登入成功後,使用者可以在我的帳戶儀表板中訪問其帳戶。
以下是這種操作的工作原理 -
- 條件 '1'='1' 始終評估為真。
- -- 將 SQL 語句的其餘部分註釋掉,從而有效地繞過密碼檢查。
- 這可能導致未經授權的訪問,因為查詢返回有效的使用者記錄。
登入頁面上的常見 SQL 注入技術
- 基於錯誤的攻擊
- 基於聯合的攻擊
- 基於時間的攻擊
防止登入頁面上的 SQL 注入
您可以透過以下步驟防止登入頁面上的 SQL 注入 -
- 引數化查詢:預處理語句確保使用者輸入被視為資料而不是可執行程式碼。
- 輸入驗證:始終驗證和清理使用者輸入。使用正則表示式僅允許預期的格式(例如,使用者名稱使用字母數字字元)。
- 利用 ORM 框架:使用物件關係對映 (ORM) 工具,例如 Entity Framework 或 Hibernate。這些工具自動安全地處理查詢生成。降低注入風險。
使用 Web 應用防火牆 (WAF)
WAF 可以幫助過濾和監視 HTTP 請求,以檢測和阻止 SQL 注入嘗試。
結論
總之,SQL 注入構成了重大風險,尤其是在登入功能中。透過利用此漏洞,攻擊者可以繞過身份驗證並訪問敏感資訊或系統。
- 為了防止 SQL 注入攻擊,開發人員應實施強大的輸入驗證,利用引數化查詢,並定期測試應用程式是否存在漏洞。
- 透過採取這些措施,可以顯著提高 Web 應用程式的安全性。
- 此外,確保只有授權使用者才能訪問敏感資料。