对于sqli-labs第十八关,我们都知道需要通过抓包 发送到repeater然后改变user-agent参数值一系列操作 但是我们再进行到注入类型判断的时候 有没有注意到我们输入的大部分的东西都无法从其对应的报错信息中获取到sql语句中的该位置的结构
我从源代码发现这一关与以前关卡的不同之处 以前我们判断注入点的语句都属于select语句
而这一关的sql语句属于insert语句
源代码如下所示
虽然大部分的诸如'、"、')……等一系列的字符都均无法得知此处再sql语句中的结构 但是我还是发现了一个字符是可以的值结构的 那就是'xxx'
我们可以到sqlyog去尝试一下
输入如下
select id from users where id=''1'';
报错了 报错信息如下所示
他说外围的第一个单引号错了
我这边说一下 为什么 因为内为的单引号组已经起到了闭合字符串的作用 而外围字符串就不起作用了 从而导致了语法错误
然后我们在尝试一下里面为空的情况
输入如下
select id from users where id='''';
回显如下
这个就能够被成功执行
所以我们再利用这个点来构造构造
构造如下
select id from users where id='' and 1=1 and ''
这个也被成功执行
所以我们通过改变1=1处的值来进行报错注入也是可以实现的
试试看咯
输入如下
select id from users where id='' and extractvalue(1,concat(0x7e,(database()),0x7e)) and '';
回显如下
所以我们可以利用这种构造去解决这类型的题目