updatexml(XML_document_string, XPath_string, new_value)函数包含了三个参数。
第一个参数XML_document_string是用于包含 XML 数据的字符串,即把XML数据的字符串写到这里。
第二个参数XPath_string是用于指定 XML 文档中要修改的部分的 XPath 表达式,即在这个位置写XPath 表达式。
第三个参数new_value是用于替换 XPath 表达式选定部分的新值,即在这个位置写替换第二个参数里的部分东西。
本章分享的布尔注入是用的靶场的第三关来演示
靶场下载链接:GitHub - workcha/sqli-labs-master: sql注入必练习题目
报错注入适用于网页会显示sql语句报错的情况下使用。
第一步:检查网页有没有漏洞,之前在union注入章节已经说了怎么检查网页有没有漏洞,这里就不重复说了。
第二步:查看网页会不会显示sql语法的错误,如下图就显示了sql语法的错误。
第三步:使用 and (updatexml(1,concat(0x7e,(select database()),0x7e),1))%23 来查看当前数据库的名称。
如上图所示,在sql语法报错里显示了security这个当前数据库名称,而为什么会显示security这个当前数据库名称是因为利用了updatexml函数的特性,在updatexml函数中的第二个参数位置,写了错误的 XPath 表达式,导致报错,并输出报错的内容 ~security~ 而 ~security~ 这个是通过concat(0x7e,(select database()),0x7e)这个sql语句执行后得来的,其中0x7e是十六进制,对应的字符就是 ~ 这个。
此时,如果我们要查MySQL里的数据库,就只需要把 select database() 改为 select schema_name from information_schema.SCHEMATA limit 0,1 即可查询MySQL里面的第一个数据库的名称。
同样,如果我们要查MySQL里的表,就把 select database() 改为 select table_name from information_schema.tables limit 0,1 即可查询MySQL里面的第一个表的名称。
以上就是updatexml报错注入的使用方法。
注:此updatexml报错注入仅供学习参考。