使用 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 應用程式的安全性。
  • 此外,確保只有授權使用者才能訪問敏感資料。

更新於: 2024 年 11 月 5 日

30 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告