SQL注入攻擊原理以及基本方法
一、SQL注入的概述
定義:SQL注入即是指web應用程式對使用者輸入資料的合法性沒有判斷,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的SQL語句,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。
為了更直觀的讓大家瞭解到sql注入的原理,貼上一張sql注入攻擊示意圖
●SQL注入威脅表現形式可以體現為以下幾點:
●繞過認證,獲得非法許可權
●猜解後臺資料庫全部的資訊
●注入可以藉助資料庫的儲存過程進行提權等操作
●SQL注入攻擊的典型手段
●判斷應用程式是否存在注入漏洞
●收集資訊、並判斷資料庫型別
●根據注入引數型別,重構SQL語句的原貌
●猜解表名、欄位名
●獲取賬戶資訊、攻擊web或為下一步攻擊做準備
二、SQL注入的簡單例子
1.SQL注入漏洞的幾種判斷方法
①http://www.heetian.com/showtail.asp?id=40'
②http://www.heetian.com/showtail.asp?id=40 and 1=1
③http://www.heetian.com/showtail.asp?id=40 and 1=2
如果執行①後,頁面上提示報錯或者提示資料庫錯誤的話,說明是存在注入漏洞的。
如果執行②後,頁面正常顯示,而執行③後,頁面報錯,那麼說明這個頁面是存在注入漏洞的。
2.收集資訊、判斷資料庫型別
從其返回的資訊中可以判斷下資料庫的型別,更多可能可以知道部分資料庫中的欄位以及其他有用資訊,為下一步攻擊提供鋪墊。
3.根據注入引數型別,重構SQL語句的原貌
①ID=40 這類注入的引數是數字型,那麼SQL語句的原貌大致是:Select*from 表名 where 欄位=40
②name=電影 這類注入的引數是字元型,SQL語句原貌大致是:Select*from 表名 where 欄位=‘電影’
③搜尋時沒有過濾引數的,如keyword=關鍵字,SQL語句原貌大致是:Select*from 表名 where 欄位 like ‘%關鍵字%’
4.猜解表名、欄位名(直接將SQL語句新增到URL後)
①and exists(select*from 表名)
如果頁面沒有任何變化,說明附加條件成立,那麼就是說明猜解的表名正確,反之,就是不存在這個表,接下來就繼續猜解,知道正確
②and exists(select 欄位 from 表名)
方法原理同上
③猜解欄位內容(利用以上猜解出的表名和欄位名 方法較古老且麻煩)
●猜解欄位內容的長度
(select top 1 len(欄位名)from 表名)>0 直至猜解到>n不成立的時候,得出欄位的長度為:n+1。
●得到長度後,猜解具體的內容
(select top 1 asc(mid(username,1,1))from 表名)>0直到>m不成立時,就可以猜解出ASCII碼值了。
注:本人新學習SQL注入,有不對之處望指出並修改,謝謝!!!