xpath
xpath
XPath是XML语言中的一种路径,可以用来确定XML文档中部分内容位置的语言
XPath注入原理
-
也与SQL注入类似,是网站对未经处理的用户输入 进行查询时产生的,用户可提交恶意代码,获取完整的XML文档
-
XPath有很多节点,包括元素节点,属性节点和文本节点
语法
查询
查询loginID为abc的所有user数据,当用户提交正确的loginID和passwd时 能返回结果
若是在loginID字段中输入 'or 1=1
且在passwd中输入 'or 1=1
就能进行绕过,获取数据
注入绕过
连用两个or 进行绕过
']|//|//['
SQL有 'or '1'='1
XPATH有 ']|//*|//*['
万能密码
x' or 1=1 or ''='
xpath语句中没有注释
盲注
- 用于不清楚XML文档构架,没回显情况下
- 判断根节点下的节点数
- 判断根节点下节点长度&名称
- .....
- 重复猜解完所有节点,获取最后的值
从根节点开始判断:
判断根节点下的节点长度为8:
猜解根节点下的节点名称:
猜解出该节点名称为accounts
猜解accounts下的节点名称:
accounts下子节点名称为user
第一个user节点的子节点长度为8:
读取user节点的下子节点
最终所有子节点值验证如下:
继续猜解:
均为 false,不再有子节点,则可以尝试读取这些节点的值
第一个user下的username值长度为6:
读取第一个user下usernaem的值
可依次读取所有的子节点的值,第二user节点的子节点值读取方式:
重复上边步骤即可
节点类型
七种结点类型:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)
- element (元素)
- attribute (属性)
- text (文本)
- namespace (命名空间)
- processing-instruction (处理指令)
- comment (注释)
- root (根节点)
表达式
表达式 | 描述 | |
---|---|---|
nodename | 选取此节点的所有子节点 | |
/ | 从根节点选取 | |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 | |
. | 选取当前节点 | |
.. | 选取当前节点的父节点 | |
@ | 选取属性或 @*:匹配任何属性节点 | |
* | 匹配任何元素节点 |
通配符
通配符 | 描述 |
---|---|
* | 匹配任何元素节点 |
@* | 匹配任何属性节点 |
node() | 匹配任何类型的节点 |
XPath库
xpath解析库解析数据原理:
- 根据网页DOM树定位节点标签
- 获取节点标签的正文文本或属性值