聲明
本文僅是滲透測試技術研究,適用人群為:滲透測試人員,IT運維人員,以及Web開發人員,幫助我們在發現登錄等容易發生SQL注入漏洞。嚴禁用于非法用途,否則產生的一切后果由所觀看文章的人自行承擔,IT者說不承擔任何責任。
個人能力有限 如有錯誤 ,歡迎指出
引言
SQL注入攻擊是最古老,最流行,最危險的Web應用程序漏洞之一。黑客或者惡意攻擊者,一旦注入成功可以使用萬能密碼繞過登錄驗證;獲取管理員賬號密碼;列目錄,讀文件,寫入文件;讀、寫、刪除注冊表;遠程執行命令。
什么是SQL注入
SQL注入就是利用現有應用程序的特性,攻擊者在Web表單、URL等可輸入數據的地方,插入惡意SQL語句一并和原有的SQL語句被數據庫一起執行。SQL命令就是前端應用程序和后端數據庫之間的接口。簡單來說,就是攻擊者在一些正常輸入數據的位置,插入特殊SQL語句,但這條語句被數據庫正確的執行,從而造成安全事故。
SQL注入原理
上圖展示用戶訪問網站的數據流程。
具體如下:
- 用戶通過瀏覽器想訪問http://www.xxx.com/article.php?id=11,其中id為11的一篇文章,瀏覽器向Web服務器發送請求。
- Web服務器根據id=11,動態構造SQL語句:SELECT * FROM article where id =11,向數據庫發送請求。
- 數據庫在article表中查詢出id=11的所有數據,并將所有查詢的記錄返回給Web服務器。Web服務器將返回的請求進行處理,并生成html文件,返回給瀏覽器。
- 瀏覽器將返回的HTML代碼展示給用戶。
對照訪問網站數據流程,SQL注入過程是
①修改參數值等數據請求給Web服務器;
②Web服務器未經審查和過濾,將修改的數據注入到SQL語句中,SQL語句原來的功能被修改;
③數據庫將一些危險敏感的信息,返回給服務器;
④攻擊者獲取到重要信息。
一般的SQL注入分類
按Sql注入的輸入參數,分為數字型和字符串型;按數據庫返回結果分為顯錯注入和盲注。當然也有專家將SQL注入分為:post注入,get注入,cookie注入,盲注,延時注入,搜索注入,base64注入,基本上都可以歸入以上兩種類型。
總結
SQL注入雖然危害極大,但還是可控可防的。從以下幾點可以避免SQL注入攻擊
- 在設計應用程序時,完全使用參數化查詢來設計數據訪問功能。
- 在組合SQL字符串時,先針對所傳入的參數加入其他字符(將單引號字符前加上轉義字符)。
- 如果使用PHP開發網頁程序的話,需加入轉義字符之功能(自動將所有的網頁傳入參數,將單引號字符前加上轉義字符)。
- 使用php開發,可寫入html特殊函數,可正確阻擋XSS攻擊。
- 其他,使用其他更安全的方式連接SQL數據庫。例如已修正過SQL注入問題的數據庫連接組件,例如ASP.NET的SqlDataSource對象或是 LINQ to SQL。
- 使用SQL防注入系統。
- 增強WAF的防御力