前言
sql注入无论是在CTF比赛还是s实战中都有着非同寻常的重要程度。在CTF比赛中难免会遇到一些有(keng)趣(die)的注入题,他们往往有着令人头疼的过滤规则,这时候就需要我们一步步绕过。 这种注入一般都属于盲注,然而在盲注过程中由于这些过滤规则不太好绕过,这时候就会无从下手。下面分享一下自己在做题中总结的几种比较通用的盲注手法和一些小tips,希望能在今后大家的比赛或者实战中带来一些实质性的帮助。
时间盲注
时间盲注最常用的函数一般就是sleep()函数了,但是,当sleep()函数被过滤之后,我们还有什么方法可以使用呢?
方法一:BENCHMARK
benchmark是mysql的一个内置函数,其作用是用来测试一些函数的执行速度。 benchmark()有两个参数,第一个参数是语句执行的次数,第二个参数是要执行的函数或表达式 举个栗子:
select benchmark(10000,md5('abc'));
mysql> select benchmark(10000,md5('abc'));
+-----------------------------+
| benchmark(10000,md5('abc')) |
+-----------------------------+
| 0 |
+-----------------------------+
1 row in set (0.00 sec)
mysql> select benchmark(1000000,md5('abc'));
+-------------------------------+
| benchmark(1000000,md5('abc')) |
+-------------------------------+
| 0 |
+-------------------------------+
1 row in set (0.22 sec)
mysql> select benchmark(10000000,md5('abc'));
+--------------------------------+
| benchmark(10000000,md5('abc')) |
+--------------------------------+
| 0 |
+--------------------------------+
1 row in set (2.16 sec)
可以看出,随着语句执行次数的增加,执行的时间也就增加,这样就达到了延迟的效果。
方法二:笛卡尔积(heavy query)
什么是笛卡尔积?