初学Web安全之sql注入(二)——报错注入

知识补充:

前一篇提到了如何判断字符型与数字型以及字符型的闭合,不过在做sqli-labs靶场时,出现了id=(‘1’),甚至还有id=((‘1’))这样双括号包裹的,在这里笔者也是没想到,不过正常来说,开发人员是不会使用这种的,所以前篇提到的单引号双引号判断法,还是有用的。
其实页面有回显,判断出数字型以及字符型还有闭合,还是相对简单的,下面拿靶场举列

初学Web安全之sql注入(二)——报错注入_第1张图片

上图,我们将报错信息拿出来分析一下:

''1'' LIMIT 0,1' 

将最外面的包裹引号去掉:

'1'' LIMIT 0,

不难看出,我们输入的是1’,而报错信息是’1’ ',这是因为我们多打了一个单引号而导致原来的单引号失效,所以会有报错,这里可以判断是字符型,并且是单引号闭合

再来看另外一个:

输入单引号:

初学Web安全之sql注入(二)——报错注入_第2张图片

输入双引号:

初学Web安全之sql注入(二)——报错注入_第3张图片

按照我们之前的判断法,这里就可以判断出是数字型了,在看下报错信息:

'' LIMIT 0,1'
'" LIMIT 0,1'

还是把最外面的包裹引号去掉:

' LIMIT 0,1
" LIMIT 0,1

从这里可以看出,不管输入单引号还是双引号,都会导致语法错误而报错,所以判断出是数字型。

这里在和上面第一张图的报错对比:

''1'' LIMIT 0,1' ——字符型
'' LIMIT 0,1'    ——数字型

不难发现,如果是字符型,会有你输入的值加上单双引号,而如果是数字型,不会有输入的数值,只有单双引号

而利用回显报错方法,我们可以判断是sqli-labs第三关和第四关的闭合,如第三关:

初学Web安全之sql注入(二)——报错注入_第4张图片

''1'') LIMIT 0,1'  ——— 拿掉包裹 ———  '1'') LIMIT 0,1

可以判断出,id=(‘1’),所以闭合的时候,需要在加一个)

第四关:

初学Web安全之sql注入(二)——报错注入_第5张图片

同样的:

'"1"") LIMIT 0,1' ———— "1"") LIMIT 0,1

可以判断出,id=(“1”),闭合为")

在后面的关卡中,还有双括号包裹的,所以在判断时需要注意,不过还是要强调一句,实战中基本不会遇见单括号和双括号的。


报错注入

如果页面没有回显,但是有提示报错,那么就无法使用联合查询,这时候可以尝试使用报错注入

报错注入有很多种方法,最常见的就是使用floor(),rand()和group by组合产生报错,这种办法可以自行百度,下面我使用的是另外的方法。

之前提到过,mysql数据库现在基本都是5以后的版本了,所以我们的方法得以使用:

extratvalue(arg1,arg2)函数
arg1 string格式
arg2 Xpath格式

updatexml(arg1,arg2,arg3)函数
arg1为xml文档对象的名称
arg2为xpath格式的字符串
arg3为string格式,替换查找到的符合条件的数据

报错注入,简单来说就是利用了函数的格式不正确,从而产生报错信息,就拿updatexml来说,只要xpath格式的字符串不正确,那么就会报错,需要注意的是,这两个函数报错显示最大限制是32位,如果没办法显示完全,可以利用substr函数来截取,这里拿第五关来演示一下:

先输入id=1查看,发现没有回显信息:

初学Web安全之sql注入(二)——报错注入_第6张图片

单引号报错,判断有注入点,观察报错信息,判断是单引号闭合:

初学Web安全之sql注入(二)——报错注入_第7张图片

利用updatexml函数报错注入,发现有信息,但是并不完整:

初学Web安全之sql注入(二)——报错注入_第8张图片
这时候我们再利用concat尝试一下,爆出完整的版本信息了:

初学Web安全之sql注入(二)——报错注入_第9张图片

那么为什么要有concat连接才能爆出完整信息呢,那是因为xpath格式不正确,他会把校验失败的数据爆出来,这其实是方便开发人员调试的,所以想要爆出完整的信息,我们利用concat函数再加入非xpath格式,如0x7e,让它校验失败即可

明白了这些,下面就好办了,这里演示下爆出全部数据库名的操作,因为最大限制是32位,所以这里我没有用group_concat,而是使用了limit一个一个查看,当然也可以使用substr截取:

初学Web安全之sql注入(二)——报错注入_第10张图片

接下来的操作就和之前联合查询差不多,这里就不多说,直接用图片演示:

初学Web安全之sql注入(二)——报错注入_第11张图片

初学Web安全之sql注入(二)——报错注入_第12张图片
分别爆出用户名和密码,这里也是不完整的,只显示了32位:

初学Web安全之sql注入(二)——报错注入_第13张图片
初学Web安全之sql注入(二)——报错注入_第14张图片
以上就是报错注入的方法和内容,也是相对简单的一种方法。

你可能感兴趣的:(SQL注入)