sqli-labs Basic Challenges Less 13-14

Less 13  POST - Double Injection - Single quotes- String - with twist

从题目来看,这一关是变型的单引号字符型双查询注入,而且参数传递方式是post。

这里分别用四种报错方法一一注入尝试。首先填写用户名和密码看看页面的显示效果

这是随便用一个用户名和密码测试登录的显示

sqli-labs Basic Challenges Less 13-14_第1张图片

这是用正确的用户名和密码登录显示的页面

sqli-labs Basic Challenges Less 13-14_第2张图片

从页面响应的对比来看,都是没有什么显示位的,只不过是画面效果不一样而已。这样的话前面根据显示位来注入显示数据的方法肯定是行不通了,那就只剩下用报错注入或者盲注来达到效果了。这一关只考虑报错注入。

在注入之前先判断出查询语句的结构

在uname参数后面添加单引号测试

sqli-labs Basic Challenges Less 13-14_第3张图片

返回错误是Dumb') LIMIT 0,1

说明多了一个单引号而且参数还有()包裹,再继续用Dumb') #测试

sqli-labs Basic Challenges Less 13-14_第4张图片

这里响应页面中的图片是flag.jpg,这是登录成功才返回的图片。说明sql查询语句已经闭合成功了。接下来就是报错注入了。

1、floor()函数和rand()函数

先查询当前的用户名

sqli-labs Basic Challenges Less 13-14_第5张图片

再查询当前数据库

sqli-labs Basic Challenges Less 13-14_第6张图片

省略中间的步骤,最后列出用户名和密码数据

sqli-labs Basic Challenges Less 13-14_第7张图片

2、extractvalue()函数

先获取当前数据库用户名

sqli-labs Basic Challenges Less 13-14_第8张图片

再获取当前数据库名

sqli-labs Basic Challenges Less 13-14_第9张图片

直接列出用户名和密码数据

sqli-labs Basic Challenges Less 13-14_第10张图片

3、updatexml()函数

首先获取当前数据库用户名

sqli-labs Basic Challenges Less 13-14_第11张图片

然后获取当前数据库名

sqli-labs Basic Challenges Less 13-14_第12张图片

直接列出用户名和密码数据

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

4、exp()函数

首先获取当前数据库用户名

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

然后获取当前数据库名

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

直接列出用户名和密码数据

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

 

Less 14  POST - Double Injection - Single quotes- String - with twist

从题目来看,这一关同上一关似乎是一样的。

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

sqli-labs Basic Challenges Less 13-14_第17张图片

发现没有登录成功,也没有任何报错。猜测参数使用双引号包裹的,添加双引号测试

sqli-labs Basic Challenges Less 13-14_第18张图片

根据页面报错信息来看,就是多了一个双引号。所以可以判断sql查询语句中参数就是用双引号包裹的,这一点跟上一关不太一样。闭合语句再次测试观察响应

sqli-labs Basic Challenges Less 13-14_第19张图片

可以看到成功登陆了,说明语句闭合有效。接下来的注入流程就跟上面是一样的了。

当然这里不仅仅可以用报错注入,基于时间的盲注以及其他类型的注入也是可以进行尝试的,比如:

sqli-labs Basic Challenges Less 13-14_第20张图片

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