我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL时间盲注的五种延时方法实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL时间盲注的五种延时方法实现

MySQL时间盲注五种延时方法 (PWNHUB 非预期解)

延时注入函数

五种:sleep(),benchmark(t,exp),笛卡尔积,GET_LOCK() RLIKE正则

sleep()


sleep(x)
select sleep(5);

benchmark() 重复执行某表达式


 benchmark(t,exp)
     select benchmark(count,expr),是重复执行count次expr表达式,使得处理时间很长,来产生延迟,
     比如select benchmark(1000000,encode("hello","good"));
     select benchmark( 5000000, md5( 'test' ));​

笛卡尔积


笛卡尔积(因为连接表是一个很耗时的操作)
     AxB=A和B中每个元素的组合所组成的集合,就是连接表
     SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C;
     select * from table_name A, table_name B
     select * from table_name A, table_name B,table_name C
     select count(*) from table_name A, table_name B,table_name C  表可以是同一张表

GET_LOCK() 加锁

GET_LOCK(key,timeout) 需要两个连接会话
RELEASE_LOCK(key) 锁是否释放,释放了返回1
IS_FREE_LOCK(key) 返回当前连接ID,表示名称为'xxxx'的锁正在被使用。
key 锁的名字,timeout加锁等待时间,时间内未加锁成功则事件回滚。get_lock 加锁成功返回1,
这个锁是应用程序级别的,在不同的mysql会话之间使用,是名字锁,不是锁具体某个表名或字段,具体是锁什么完全交给应用程序。它是一种独占锁,意味着哪个会话持有这个锁,其他会话尝试拿这个锁的时候都会失败。
session A select get_lock('test',1);
session B select get_lock('test',5);
可以指定表也可以不指定
直到关闭连接会话结束,锁才会释放,但不像redis那样加了锁只要不主动释放就一直有。
但是当会话1 get_lock 后,未释放。会话2 不get_lock 同一个key,或者就不get_lock,依然可以对数据进行任何操作,所以加锁只是说人为的主观的想要让某些操作同时只有一个连接能进行操作,别的连接不调用get_lock加同一个锁,那它不会受到任何影响,想干什么干什么。

session1

session2

get_lock:但是当会话1 get_lock 后,未释放。会话2 不get_lock 同一个key,或者就不get_lock,依然可以对数据进行任何操作,所以加锁只是说人为的主观的想要让某些操作同时只有一个连接能进行操作,别的连接不调用get_lock加同一个锁,那它不会受到任何影响,想干什么干什么。

session1

session2

优缺点分析 (1)这种方式对于更新所有列比较有效,但是得把查询的语句也放在锁内执行; (2)这种方式当客户端无故断线了会自动释放锁,比较好,不像redis锁那样,如果加完锁断了,那么锁一直在; (3)这种方式是针对锁内的所有操作加锁,并不针对特定表或特定行,所以使用了同一个Key的锁但不同的操作都会共用一把锁,会导致效率低下; (4)如果查询语句放在锁之前,则数据可能是旧的,更新之后会把查询之后更新之前别的客户端更新的数据覆盖掉;

RLIKE REGEXP正则匹配

通过rpadrepeat构造长字符串,加以计算量大的pattern,通过repeat的参数可以控制延时长短。 


select rpad('a',4999999,'a') RLIKE concat(repeat('(a.*)+',30),'b');

正则语法:
. : 匹配任意单个字符
* : 匹配0个或多个前一个得到的字符
[] : 匹配任意一个[]内的字符,[ab]*可匹配空串、a、b、或者由任意个a和b组成的字符串。
^ : 匹配开头,如^s匹配以s或者S开头的字符串。
$ : 匹配结尾,如s$匹配以s结尾的字符串。
{n} : 匹配前一个字符反复n次。

RPAD(str,len,padstr)

用字符串 padstr对 str进行右边填补直至它的长度达到 len个字符长度,然后返回 str。如果 str的长度长于 len',那么它将被截除到 len个字符。


mysql> SELECT RPAD('hi',5,'?'); -> 'hi???'

repeat(str,times) 复制字符串times次

⭐️寻找新的延迟函数


 concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a')) RLIKE '(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+b'

以上代码等同于 sleep(5)

到此这篇关于MySQL时间盲注的五种延时方法实现的文章就介绍到这了,更多相关MySQL 时间盲注 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL时间盲注的五种延时方法实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android实现定时器的五种方法实例详解

一、Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用。 跟handler自身实现的定时器相比,Timer可以做一些复杂的处理,例如,需
2022-06-06

C++ 计算时间差的五种方法小结

本文主要介绍了C++ 计算时间差的五种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-17

bat延时执行命令的另一种实现方法

这篇文章主要介绍“bat延时执行命令的另一种实现方法”,在日常操作中,相信很多人在bat延时执行命令的另一种实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”bat延时执行命令的另一种实现方法”的疑惑有所
2023-06-09

unity实现物体延时出现的方法

小编给大家分享一下unity实现物体延时出现的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!新建一个cube和plane,隐藏cube,脚本挂在plane上。
2023-06-14

javascript实现时间戳转时间的方法

本篇内容介绍了“javascript实现时间戳转时间的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!javascript实现时间戳转时间
2023-06-14

tkinter动态显示时间的两种实现方法

这篇文章主要介绍了tkinter动态显示时间的两种实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

java实现mysql自动更新创建时间与更新时间的两种方式

Java实现MySQL自动更新创建时间与更新时间的两种方式:第一种方式:使用注解(@CreationTimestamp和@UpdateTimestamp)使用JPA框架,在实体类字段上添加注解。JPA框架自动更新创建时间和更新时间。第二种方式:使用JDBC在插入或更新语句中手动设置字段。数据库触发器或默认值自动更新时间。比较:依赖:第一种依赖JPA,第二种依赖JDBC。方便性:第一种更方便。性能:第二种稍快。触发器:第一种不需要,第二种需要(如果使用触发器)。兼容性:第一种仅适用于JPA,第二种更广泛兼容
java实现mysql自动更新创建时间与更新时间的两种方式
2024-04-02

mysql自动填充时间的两种实现方式小结

目录mysql自动填充时间的两种方式方法一:android数据库级别方式二:代码级别mysql自动填充时间的两种方式mysql建表的时候有两个列,一个是createtime、另一个是updatetimejavascript当插入一条数据
2022-11-30

Android时分秒计时器的两种实现方法

可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器。这个东西其实实现起来非常简单。只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲述一下了。
2022-06-06

python实现定时器的5种方法

本文主要介绍了python实现定时器的5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-06

Windows Bat实现延时功能的几种常见方式小结

本文总结了WindowsBat实现延时功能的5种常见方法:使用ping命令(使用-n选项)使用timeout命令(内置,最准确)使用sleep命令(需第三方工具)使用for循环(创建空循环)使用WScript.ShellSleep方法(精准,但不内置)选择方法需考虑准确性、可用性、易用性和灵活性。ping和timeout最准确,timeout最常用,sleep最易用,for循环最灵活。注意:ping受网络影响,for循环需谨慎使用。
Windows Bat实现延时功能的几种常见方式小结
2024-04-02

编程热搜

目录