sqli-labs Basic Challenges Less 15-16

Less 15  POST - Blind- Boolian/time Based - Single quotes

根据题目判断这一关是基于布尔或者时间的单引号字符型盲注,并且参数提交方式是post。

先分别用测试账号和正确账号登录观察页面响应

这是用测试账号登录的响应

sqli-labs Basic Challenges Less 15-16_第1张图片

这是用正确账号登录的响应

sqli-labs Basic Challenges Less 15-16_第2张图片

可以看到登陆成功与否变化的只有底部的图片,并没有什么显示位。

先判断sql查询语句的结构,添加单引号测试

sqli-labs Basic Challenges Less 15-16_第3张图片

看到仅仅是显示登录失败并没有报错信息,猜测可能参数是被双引号包裹的,接着再添加双引号测试

sqli-labs Basic Challenges Less 15-16_第4张图片

但是发现依然只是返回登录失败,也没有报错信息。这里可能是服务器端处理了报错信息,所以只能依靠登录成功或者失败两种状态来盲注了。

首先注释掉后面的语句看是否能够成功登陆,先对单引号尝试

sqli-labs Basic Challenges Less 15-16_第5张图片

可以看到页面响应登录成功了,说明参数就是被单引号包裹的。

那么既然已经知道查询语句的结构了,接下来就是靠盲注来获取数据了。这里有基于布尔和时间两种,我们一一进行尝试。

1、基于布尔的盲注

在刚才的测试中我们已经知道登录之后只会有登录成功和失败两种状态,所以这里用基于布尔的盲注方法。

先确定当前用户名的长度

sqli-labs Basic Challenges Less 15-16_第6张图片

sqli-labs Basic Challenges Less 15-16_第7张图片

通过对比我们可以确定当前用户名的长度就是14,那么接下来就是手工测试用户名的具体内容了

sqli-labs Basic Challenges Less 15-16_第8张图片

可以看到当前用户名的前四个字符就是root。接下来就是一一确定数据库名、表名、字段名以及列出字段内容了。

这里省略中间的内容,直接测试字段的内容

sqli-labs Basic Challenges Less 15-16_第9张图片

这里可以看到users表中第一行的用户名的前四个字符就是Dumb了。在基于布尔的盲注中ascii()函数和substr()函数通常是结合使用的。

2、基于时间的盲注

上述过程是用的基于布尔的盲注,接下来看看基于时间的盲注吧。

sqli-labs Basic Challenges Less 15-16_第10张图片

根据页面响应的时间来看这里sleep()函数是成功带入数据库执行了的。所以这里可以用基于时间的盲注方法。

这里用时间盲注的方法确定一下当前用户名的前四个字符是否是root。

sqli-labs Basic Challenges Less 15-16_第11张图片

从请求的内容与响应时间来看,这里的sleep()函数成功执行了,说明if()函数的第一个条件成立。也就是说当前用户名前四个字符就是root。那么之后对其他数据的判断也是基于if()函数和sleep()函数的结合使用,具体就不再演示了。

 

Less 16  POST - Blind- Boolian/Time Based - Double quotes

从题目来看,这一关跟上一关的不同之处就在于参数是被双引号包裹的,至于注入方法上是没有区别的。

这里先确认一下参数是否是被双引号包裹的

sqli-labs Basic Challenges Less 15-16_第12张图片

这里返回登录失败了,说明直接添加双引号不起作用啊。再添加一个)试试看。

sqli-labs Basic Challenges Less 15-16_第13张图片

可以看到成功登陆了,说明题目给的信息不够准确,参数确实是被双引号包裹着的,但是外部还被()所包裹。

这里确认了查询语句的结构,接下来的注入过程就跟上面的盲注过程是一样的,此处就不再赘述了。

你可能感兴趣的:(我的安全之路)