五种延时函数
sleep()、benchmark(t,exp)、笛卡尔积、GET_LOCK ()、RLIKE正则

SLEEP()

最常见的时间延时函数
比如
![5HTWV[RZ%}]WYF)RMFNQ_L.png

BENCHMARK()

重复执行某表达式
benchmark(t,exp),重复执行 t 次 exp表达式,由于处理时间很长,所以会产生延时
比如
UI6RJ5Q]7J%9MK4Q1IEVGDL.png

笛卡尔积

在MySQL中,连接表之间是一个很耗时的操作
比如,AxB = A和B中的每个元素的组合所组成的集合,也就是连接表
比如

  1. mysql> SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C;
  2. +------------+
  3. | count(*) |
  4. +------------+
  5. | 2651020120 |
  6. +------------+
  7. 1 row in set (1 min 51.05 sec)

GET_LOCK() 加锁

延时可控
get_lock(key,timeout) 需要连接两个绘画
release_lock(key) 锁是否释放,释放了则返回1
is_free_lock(key) 返回当前连接ID,表示名称为’XXX’的锁正在被使用
一种新型SQL时间盲注攻击探索

RLIKE REGEXP正则匹配

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

mysql> select rpad('a',4999999,'a') RLIKE concat(repeat('(a.*)+',30),'b');
+-------------------------------------------------------------+
| rpad('a',4999999,'a') RLIKE concat(repeat('(a.*)+',30),'b') |
+-------------------------------------------------------------+
|                                                           0 |
+-------------------------------------------------------------+
1 row in set (5.27 sec)

READ(str,len,pad,str)
用字符串 padstr 对 str 进行右边填补至它达到 len 个字符长度,然后返回 str。如果 str的长度长于 len,则它会被截取到len个字符
![]3(DXS9Q(Y0O(N4{DHHO~F.png
repeat(str,times)
复制字符串times次

等同于sleep(5)

 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'

参考连接
https://www.cnblogs.com/forforever/p/13019703.html
https://www.cdxy.me/?p=789