Web安全漏洞:SQL注入

常見的Web安全漏洞:SQL注入、XSS跨站腳本攻擊、文件上傳漏洞、URL跳轉漏洞,今天分享下SQL注入。

SQL注入可能造成:網頁和數據被改,核心數據被竊,數據庫所在的服務器被攻擊

1.SQL注入的產生條件

3.SQL注入類型

3.數據類型

4.防禦SQL注入

1.SQL注入的產生條件

SQL注入的產生條件:有參數傳遞、參數值代入數據庫查詢並且執行,後臺在編寫程序時沒有對輸入的數據進行過濾。

比如:用戶在查詢課程的輸入框提交的參數是mysql,此時,

瀏覽器提交的URL爲:

192.168.5.249:8080/index.php?coursename=mysql
服務器後臺執行的SQL語句爲:

SELECT * FROM course WHERE coursename=mysql

這樣正常的輸入是沒任何影響到,但是如果進行SQL注入,輸入mysql; DROP table,這種情況下,服務器後臺則執行的SQL語句爲:

SELECT * FROM course WHERE coursename=mysql; DROP table

在執行查詢課程的過程後,將course表給刪除,從而導致了SQL注入

2.SQL注入類型

基於布爾的盲注、基於時間的盲注、基於報錯的注入、聯合查詢注入、堆查詢注入、其他
在這裏插入圖片描述

2.1基於布爾的盲注

不返回數據庫數據,結果爲FALSE、TRUE

2.2基於時間的盲注

利用sleep()或者benchmark()等函數讓MySQL執行時間增長

比如:if(表達式,true,false) ——》 if( length(datebase()>1, sleep(5), 1) )

2.3基於報錯的注入

多單引號、EXTRACTVALUE()、FLOOR()、UPDATEXML()、GEOMETRYCOLLECTION()、MULTIPOINT()、POLYGON()、MULTIPOLYGON()、LINESTRING()、MULTILINESTRING()、EXP(),比如:

  • 多單引號

比如用戶在查詢課程的輸入框提交的參數是1’:

SELECT * FROM course WHERE courseid==1’

如果返回不正常,則說明courseid參數存在注入漏洞

  • EXTRACTVALUE()

對XML文檔進行查詢的函數,其語法是extractvalue(目標XML文檔, XML路徑),concat()拼接

正常情況下:

SELECT coursename FROM course
WHERE id=1 AND ( extractvalue( ‘anything’,concat(‘/’,(SELECT database() ) ) ) )

異常情況下:

SELECT coursename FROM course
WHERE id=1 AND ( extractvalue( ‘anything’,concat(‘~’,(SELECT database() ) ) ) )
  • UPDATEXML()

UPDATEXML()類似於EXTRACTVALUE()函數,是更新XML文檔的函數,其語法是updatexml(目標XML文檔,XML路徑,更新的內容)

正常情況下:

SELECT coursename FROM course
WHERE id=1 AND (updatexml(‘anything’,’/xx/xx’,’anything’))

異常情況下:

SELECT coursename FROM course
WHERE id=1 AND (updatexml(‘anything’,concat(‘~’,(select database())),’anything’))

2.4聯合查詢注入

UNION注入,比如:id=-1 UNION SELECT 1,2,3

2.5堆查詢注入

分號隔開、%23—#

2.6其他

其他注入,比如:寬字節注入、二次注入、BASE64注入、COOKIE注入

  • 寬字節注入

數據庫編碼爲GBK,繞過單引號被轉義

  • 二次注入

向數據庫插入查詢語句,不被執行;數據庫調用時報錯,返回錯誤信息

3.數據類型

數字型(輸入的參數爲整型)、字符型(輸入的參數爲字符串),數字型不需要單引號來閉合,而字符串一般需要通過單引號來閉合。

4.防禦

可通過使用預編譯語句、過濾危險字符等方式進行防禦SQL注入

4.1使用預編譯語句

  • 構造SQL語句時使用參數化形式

參數化處理SQL是將參數進行字符串化處理,把參數中的單引號、井號等都做轉義化處理,從而在執行SQL語句時不會被當作SQL中的定界符或指定符來執行

  • 不使用拼接方式

不使用拼接concat()

4.2過濾危險字符

過濾一些查詢關鍵字或者不常規的符號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章