Less 13 POST - Double Injection - Single quotes- String - with twist
从题目来看,这一关是变型的单引号字符型双查询注入,而且参数传递方式是post。
这里分别用四种报错方法一一注入尝试。首先填写用户名和密码看看页面的显示效果
这是随便用一个用户名和密码测试登录的显示

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

从页面响应的对比来看,都是没有什么显示位的,只不过是画面效果不一样而已。这样的话前面根据显示位来注入显示数据的方法肯定是行不通了,那就只剩下用报错注入或者盲注来达到效果了。这一关只考虑报错注入。
在注入之前先判断出查询语句的结构
在uname参数后面添加单引号测试

返回错误是Dumb') LIMIT 0,1
说明多了一个单引号而且参数还有()包裹,再继续用Dumb') #测试

这里响应页面中的图片是flag.jpg,这是登录成功才返回的图片。说明sql查询语句已经闭合成功了。接下来就是报错注入了。
1、floor()函数和rand()函数
先查询当前的用户名

再查询当前数据库

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

2、extractvalue()函数
先获取当前数据库用户名

再获取当前数据库名

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

3、updatexml()函数
首先获取当前数据库用户名

然后获取当前数据库名

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

4、exp()函数
首先获取当前数据库用户名

然后获取当前数据库名

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

Less 14 POST - Double Injection - Single quotes- String - with twist
从题目来看,这一关同上一关似乎是一样的。
先判断sql语句的结构,添加单引号测试

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

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

可以看到成功登陆了,说明语句闭合有效。接下来的注入流程就跟上面是一样的了。
当然这里不仅仅可以用报错注入,基于时间的盲注以及其他类型的注入也是可以进行尝试的,比如:

本文深入解析SQL注入技术,尤其关注单引号字符型双查询注入的四种报错方法:floor/rand函数、extractvalue函数、updatexml函数及exp函数。通过实例演示如何利用这些方法在不同的SQL语句结构中获取用户名、密码及数据库信息。

1691

被折叠的 条评论
为什么被折叠?



