注入技術包括使用應用程式的輸入字段注入SQL查詢或命令。
Web應用程式SQL注入
成功的SQL注入可以讀取,修改資料庫中的敏感數據,還可以從資料庫中刪除數據。它還使駭客能夠對數據庫執行管理操作,例如:關閉DBMS/刪除資料庫。
我們通過下麵一個簡單的圖表瞭解這個漏洞的威脅代理,攻擊向量,安全弱點,技術影響和業務影響。
- 威脅代理 - 匿名外部攻擊者以及擁有自己帳戶的用戶可能會嘗試從其他人那裏竊取帳戶。
- 攻擊者的方法 - 在身份驗證或會話管理功能中使用洩漏或漏洞。例如,公開的帳戶密碼,用於冒充用戶的會話ID。
- 安全弱點 - 開發人員經常構建自定義身份驗證和會話管理方案,但正確構建這些方案很難。
- 如何發現缺陷 - 找到這樣的缺陷有時會很困難,因為每個實現都是獨一無二的。
- 技術影響 - 可能會使某些甚至所有帳戶受到損害。一旦成功,攻擊者就可以做受害者可以做的任何事情。
- 業務影響 - 漏洞的公開曝光。受影響的數據或應用程式功能的業務價值。
示例
以下應用程式在構造,很易受攻擊的SQL調用時使用不受信任的數據 -
String query = "SELECT * FROM EMP WHERE EMPID = '" + request.getParameter("id") + "'";
動手實踐
第1步 - 導航到應用程式的SQL注入區域,如下所示。
第2步 - 使用SQL插入來繞過身份驗證。使用SQL注入作為老闆(‘Neville’)登錄,而不使用正確的密碼。確認可以查看Neville的配置檔並且所有功能都可用(包括搜索,創建和刪除)。
第3步 - 我們將注入一個SQL,以便能夠通過發送參數為'a'='a' or 1 = 1
來繞過密碼
第4步 - 提交登錄後,可以登錄Neville
帳號,他是Admin,如下所示。
防止SQL注入
有很多方法可以防止SQL注入。當開發人員編寫代碼時,他們應該確保它們相應地處理特殊字元。OWASP提供備忘單/預防技術,絕對是開發人員一個不錯的指南。
- 使用參數化查詢
- 轉義所有用戶提供的輸入
- 為最終用戶啟用資料庫的最低許可權