SQL注入基礎知識及繞過方式
介紹
SQL注入即是指web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。(來自百度百科)
分類
按照提交方式分類
GET型注入、POST型注入、cookie注入、http頭注入
按照注入型別分類
數字型注入、字元型注入、搜尋型注入
按照執行效果分類
布林盲注、時間盲注、報錯注入、聯合查詢注入、堆疊注入、寬位元組注入、base64注入
SQL注入常用函式
database():資料庫名
desc():結構
@@datadir:路徑
table():表名
columns():列名
limit():返回結果中的前幾條資料或者中間的資料
group_concat():分組拼接函式
rand():返回0~1的隨機數
floor():向下取整
substr():擷取字串
ascii():返回字串的ascii碼
尋找SQL注入
SQL注入可以出現在任何從系統或使用者接收資料輸入的前端應用程式中,這些應用程式之後被用於訪問資料庫伺服器。
如果對一個網站進行SQL注入攻擊,首先就需要找到存在SQL注入漏洞的地方,也就是尋找所謂的注入點。可能的SQL注入點一般存在於登陸頁面、查詢頁面或新增頁面等使用者可以查詢或修改資料的地方,簡單來說,頁面與資料庫互動的地方可能會存在SQL注入。
最常用的尋找SQL注入點的方法,是在網站中尋找如下形式的頁面連結
http://www.123.com/xxx.php?id=xx
其中‘xx’可能是數字,也可能是字串,分別被稱為整數型資料或者字元型資料
SQL注入流程
1、判斷是否存在注入、注入型別
2、猜解欄位數
3、確定顯示位
4、獲取庫名
5、獲取庫中的表名
6、獲取表中的欄位名
7、下載資料
SQL注入繞過方式
1、繞過空格
尋找可以代替空格執行的特殊字元,比如:+,%20,/**/,%a0等
2、十六進位制繞過
查詢條件為使用者名稱等於admin的資訊,admin需要使用引號引起來,如果過濾到引號,where語句就會執行失敗。
可以將amdin替換成十六進位制來執行
3、大小寫/複寫
複寫就是寫兩個,過濾掉一個後,確保還會留下來一個可以使用。
4、內聯註釋
把一些特有的僅在MYSQL上的語句放在/*!...*/
中,這樣這些語句如果在其它資料庫中是不會被執行,但在MYSQL中會執行。
5、過濾or and xor not 繞過
and = &&
or = ||
xor = | # 異或
not = !
6、過濾等號
%like% 萬用字元
<> 等價於 !=
在前面在加一個!表示等於
未完待續~~~
SQL注入防禦方式
預編譯防止SQL注入(引數化查詢)
也就是SQL引擎會預先進行語法分析,產生語法樹,生成執行計劃,也就是說,後面你輸入的引數,無論你輸入的是什麼,都不會影響該sql語句的 語法結構了,因為語法分析已經完成了,而語法分析主要是分析sql命令,比如 select ,from ,where ,and, or ,order by 等等。所以即使你後面輸入了這些sql命令,也不會被當成sql命令來執行了,因為這些sql命令的執行, 必須先的通過語法分析,生成執行計劃,既然語法分析已經完成,已經預編譯過了,那麼後面輸入的引數,是絕對不可能作為sql命令來執行的,只會被當做字串字面值引數。所以sql語句預編譯可以防禦sql注入。