gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章MySQL时间盲注的五种延时方法实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

mysql时间盲注五种延时方法 (pwnhub 非预期解) 。

延时注入函数 。

五种:sleep(),benchmark(t,exp),笛卡尔积,get_lock() rlike正则 。

sleep() 。

?
1
2
sleep(x)
select sleep(5);

benchmark() 重复执行某表达式 。

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

笛卡尔积 。

?
1
2
3
4
5
6
笛卡尔积(因为连接表是一个很耗时的操作)
      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 。

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

session2 。

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

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

session1 。

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

session2 。

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

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

rlike regexp正则匹配 。

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

?
1
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个字符.

?
1
mysql> select rpad( 'hi' ,5, '?' ); -> 'hi???'

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

⭐️寻找新的延迟函数 。

?
1
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 时间盲注 内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://www.cnblogs.com/forforever/p/13019703.html 。

最后此篇关于MySQL时间盲注的五种延时方法实现的文章就讲到这里了,如果你想了解更多关于MySQL时间盲注的五种延时方法实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com