SQL注入點判斷及繞過


是否存在SQL注入的簡單判斷

單引號判斷

$id參數左右有數字型(無)、單引號、雙引號、括號等方式組成閉合;

最為經典的單引號判斷法: 在參數后面加上單引號,比如:

  http://xxx/abc.php?id=1'

  如果頁面返回錯誤,則存在 Sql 注入。 原因是無論字符型還是整型都會因為單引號個數不匹配而報錯。

  通常 Sql 注入漏洞分為 2 種類型:

  數字型

  字符型

數字型判斷:

  當輸入的參 x 為整型時,通常 123.php 中 Sql 語句類型大致如下: select * from <表名> where id = x 這種類型可以使用經典的 and 1=1 和 and 1=2 來判斷:

  Url 地址中輸入 http://xxx/abc.php?id= x and 1=1 頁面依舊運行正常,繼續進行下一步。

  Url 地址中繼續輸入 http://xxx/abc.php?id= x and 1=2 頁面運行錯誤,則說明此 Sql 注入為數字型注入。

  原因如下: 當輸入 and 1=1時,后台執行 Sql 語句:

  select * from <表名> where id = x and 1=1

  沒有語法錯誤且邏輯判斷為正確,所以返回正常。

  當輸入 and 1=2時,后台執行 Sql 語句:

  select * from <表名> where id = x and 1=2

  沒有語法錯誤但是邏輯判斷為假,所以返回錯誤。 我們再使用假設法:如果這是字符型注入的話,我們輸入以上語句之后應該出現如下情況:

  select * from <表名> where id = 'x and 1=1' select * from <表名> where id = 'x and 1=2'

  查詢語句將 and 語句全部轉換為了字符串,並沒有進行 and 的邏輯判斷,所以不會出現以上結果,故假設是不成立的。

字符型判斷:

  當輸入的參 x 為字符型時,通常 123.php 中 SQL 語句類型大致如下: select * from <表名> where id = 'x' 這種類型我們同樣可以使用 and '1'='1  and '1'='2來判斷:

  Url 地址中輸入 http://xxx/abc.php?id= x' and '1'='1 頁面運行正常,繼續進行下一步。

  Url 地址中繼續輸入 http://xxx/abc.php?id= x' and '1'='2 頁面運行錯誤,則說明此 Sql 注入為字符型注入。同理

 

繞過技巧

編碼繞過

大小寫
url編碼
html編碼
十六進制編碼
unicode編碼

注釋

// -- -- + -- - # /**/ ;%00
內聯注釋用的更多,它有一個特性 /!**/ 只有MySQL能識別
e.g. index.php?id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3

只過濾了一次時

union => ununionion

相同功能替換

函數替換

substring / mid / sub
ascii / hex / bin
benchmark / sleep

變量替換

user() / @@user

符號和關鍵字

and / &
or / |

HTTP參數

HTTP參數污染

id=1&id=2&id=3 根據容器不同會有不同的結果

HTTP分割注入

緩沖區溢出

一些C語言的WAF處理的字符串長度有限,超出某個長度后的payload可能不會被處理

二次注入

二次注入有長度限制時,通過多句執行的方法改掉數據庫該字段的長度繞過

 


免責聲明!

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



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