SQL注入之报错注入和布尔盲注简记


报错注入

即利用系统输出的报错信息来进行注入

floor报错注入

floor报错注入应该是报错注入中最为复杂的一种了

其中的基础为下面这句话

需要注意的时候floor后面的x为一个别名,所以group by后面跟的也是floor函数,这是报错的根源

加入我们的需要执行的代码后,语句会变成上面这样

报错信息中就会出现我们database()执行后的内容

但是直接将上面的语句拼接到and后面进行联合查询并不可行,因为and后面的语句要求输出一个布尔值,因此我们需要嵌套一个查询

这样也就形成了floor报错注入的通用payload:

其中payload为你要插入的SQL语句

要注意的是该语句将输出字符长度限制为64个字符,且输出的内容去掉1才是真实值

updatexml报错注入

updatexml是一个用于更新xml文件的函数

UPDATEXML (XML_document, XPath_string, new_value); 


第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 

第三个参数:new_value,String格式,替换查找到的符合条件的数据 

因此我们需要在第二个参数中插入不属于Xpath格式的内容,即可引发报错

具体payload如下:

插入~的原因是~不属于Xpath格式,因此必定会引发报错

最长输出32位字符,超过可以进行截取

即利用substr函数,payload变为:

extractValue报错注入

原理通上,同样只能输出32位字符

payload如下:

布尔盲注

布尔盲注主要存在于页面中无输出,但是在SQL语句执行成功或者报错时存在不同表现的情况

布尔输出盲注

即页面执行失败无输出,执行成功有输出的情况

这种时候的通用payload:

即截取输出结果的其中一位取ascii码,如果该字符的ascii码为115,则在大于符号后面为115时页面无输出,114时页面有输出,也就确定了该字符的值,按照次序依次确定即可

当然布尔注入非常耗时,一般利用SQLMAP等自动化工具实现

布尔时间盲注

如果页面中执行成功和失败都输出同样的内容,那么可以考虑测试时间盲注

所谓时间盲注,也就是在查询语句中附加sleep语句,如果执行成功,则结果会延时返回,否则会即时返回,达到区别的效果

这时候我们可以利用SQL语句中的if语句

上面语句的意思是,如果ASCII码大于110,则不延时,否则延时5秒返回结果,即可实现注入


一如既往 万事胜意