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注入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM