sqli-labs Basic Challenges Less 13-14
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查询语句中参数就是用双引号包裹的,这一点跟上一关不太一样。闭合语句再次测试观察响应
可以看到成功登陆了,说明语句闭合有效。接下来的注入流程就跟上面是一样的了。
当然这里不仅仅可以用报错注入,基于时间的盲注以及其他类型的注入也是可以进行尝试的,比如: