注入的方法

sqli-labs的1,2,3,4课都可以使用以下四种来进行注入数据:

  • Union select
  • Error based
  • Blind based
  • Time blind based

对应的可以使用sqlmap.py --technique 上面首字母大写来指定相应的注入类型。

Less-5

第五课首先排除union注入,因为页面无法显示数据,最后我还是看了网页源代码才注入的。

我发现sqlmap在每次注入的时候都会先尝试确定当前变量是被那种包含,然后在payload里面闭合,这样可以确保整个语句的完整性。 要么确定当前语句完全闭合,要么注释掉后面的语句,确保闭合。

Less-7

报错和union查询都出不了数据,只能进行盲注。bool blind和time blind。前面闭合可以使用'或者')

Less-8

根据页面返回,只能盲注。那么先判断变量是被什么包含的。当输入'的时候页面会改变,在后面加上-- -页面又正常,暂且判断变量是被单引号包含的。然后再这样id=1' and 1=1 -- -1,页面正常,当and后面为1=0的时候页面不正常,所以这里可以变成布尔盲注或者时间盲注。关键点在分析变量是被神码包含。

Less-9

不小心看到了源代码,只能使用时间盲注,这种不管输入什么页面都是这样,可以尝试时间盲注id=1' and if(mid(version(),1,1)=5,sleep(4),0) -- - 。使用sqlmap.py测试结果可以发现可以使用布尔盲注和时间盲注,看了源代码才发现的确可以使用布尔盲注,但是凭肉眼看不到页面的变化。

那么这里是不是就告诉我们,有时候看到的不一定正确还是要采用统计的方法来比较页面的异同。

这里有个Paper,是使用哪一种算法来检测布尔盲注,sqlmap采用了在去除动态内容之后计算比率的方法,回头需要看下这里的实现方法。

Less-10

在经过less-9被坑了下之后有点慌。到现在基本的测试规则就是先测试被哪种符号闭合,一半来说是这么几个',",'),"),之后加上测试语句1=1,1=0。看当前页面是否有变化,如果都没有那么就测试时间盲注。

Less-10存在时间盲注,使用"闭合,在使用sqlmap之后还存在布尔盲注,果然和less-9一样坑。

Less-11

网页提示报错注入,在用户名和密码那里可以使用burp截获Post数据。变量是被单引号包含,可以使用union,error,time-based这三种注入。其中time-based的时候有以下个问题:

 mysql> select 1=0 and if(mid(version(),1,1)=5,sleep(5),0);
+---------------------------------------------+
| 1=0 and if(mid(version(),1,1)=5,sleep(5),0) |
+---------------------------------------------+
|                                           0 |
+---------------------------------------------+
1 row in set (0.00 sec)

mysql> select 1=0 and (select*from(select sleep(5))x);
+-----------------------------------------+
| 1=0 and (select*from(select sleep(5))x) |
+-----------------------------------------+
|                                       0 |
+-----------------------------------------+
1 row in set (5.00 sec)

mysql> select mid(version(),1,1);
+--------------------+
| mid(version(),1,1) |
+--------------------+
| 5                  |
+--------------------+
1 row in set (0.00 sec)

当前面条件为假的时候,如果直接使用and if(mid(version(),1,1)=5,sleep(5),0)是不会睡5s。当and替换为xor或者sleep(5)替换为benchmark(1000000,sha1(1))就会发生时间延迟,再或者使用sqlmap的payload:AND (SELECT * FROM (SELECT(SLEEP([SLEEPTIME]-(IF([INFERENCE],0,[SLEEPTIME])))))[RANDSTR])

Less-12

先判断变量闭合,不管采用' -- -," -- -,') -- -,") -- -,页面都是正常的,后面再加上报错的语句,")的时候会爆出数据,所以变量是被")包含的。另外可以使用union,error,time-based这三种。

Less-13

同上,使用')包含

Less-14

同上,使用"包含

Less-15

只测试了passwd,存在时间盲注,单引号闭合。

Less-16

同上,使用")包含

⬆︎TOP