XPath注入学习
这篇记录是看完先知社区:XPATH注入学习写的,所以可能很多内容是重复的。写这篇记录仅仅为了让自己更好的掌握XPath注入。
0x01 XPath入门
在学习XPath注入之前,先了解一下什么是XPath
学习入口:W3school学习XPath
按照我个人的理解,XPath就是用于查询xml节点的查询语句,类似于T-SQL。
0x02 XPath注入原理
XPath注入原理类似于SQL注入,当程序没有对用户输入的数据进行过滤就拼接到XPath查询语句中时,就可能产生XPath注入。但是与SQL注入不同的时,XPath没有用户权限这一说法,所以XPath注入容易导致所有XML数据泄露。
0x03 实例
实例1
// 1.php
$xml = simplexml_load_file('test.xml');
$query = "user/username[@name='" . $_GET['name'] . "']";
$result = $xml->xpath($query);
foreach($result as $k => $v){
echo $k . ' => ' . $v . '
';
}
?>
user1_value
user2_value
user3_value
user4_value
user5_value
user6_value
user7_value
flag{57e7f266bb0dc62f2cb0f25976c14e93}
正常XPath功能
当我们访问地址http://ctf.cn/1.php?name=user1时,查询语句是:user/username[@name='user1']。所以会查询user下的username节点,且username节点name属性的值为user1的节点内容。返回结果如下:
判断注入点
当我们在参数值中输入单引号'时,页面出现XPath查询报错,说明可能存在XPath注入。
此时的XPath语句:user/username[@name='user1'']