xpath

xpath

XPath是XML语言中的一种路径,可以用来确定XML文档中部分内容位置的语言

XPath注入原理

  • 也与SQL注入类似,是网站对未经处理的用户输入 进行查询时产生的,用户可提交恶意代码,获取完整的XML文档

  • XPath有很多节点,包括元素节点,属性节点和文本节点

语法

查询

查询loginID为abc的所有user数据,当用户提交正确的loginID和passwd时 能返回结果

image-20240713200632481

若是在loginID字段中输入 'or 1=1且在passwd中输入 'or 1=1就能进行绕过,获取数据

注入绕过

参考XPATH注入学习

连用两个or 进行绕过

image-20240713200529340

']|//|//['

SQL有 'or '1'='1XPATH有 ']|//*|//*['

万能密码

x' or 1=1 or ''='

xpath语句中没有注释

盲注

  • 用于不清楚XML文档构架,没回显情况下
  • 判断根节点下的节点数
  • 判断根节点下节点长度&名称
  • .....
  • 重复猜解完所有节点,获取最后的值

从根节点开始判断:

image-20240713200700758

判断根节点下的节点长度为8:

image-20240713200712094

猜解根节点下的节点名称:

image-20240713200729787

猜解出该节点名称为accounts

image-20240713200827217

猜解accounts下的节点名称:

image-20240713200845097

accounts下子节点名称为user

image-20240713200925977

第一个user节点的子节点长度为8:

image-20240713200952133

读取user节点的下子节点

image-20240713201004868

最终所有子节点值验证如下:

image-20240713201018142

继续猜解:

image-20240713201030557

均为 false,不再有子节点,则可以尝试读取这些节点的值

第一个user下的username值长度为6:

image-20240713201047047

读取第一个user下usernaem的值

image-20240713201058955

可依次读取所有的子节点的值,第二user节点的子节点值读取方式:

image-20240713201116617

重复上边步骤即可

节点类型

七种结点类型:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)

  • element (元素)
  • attribute (属性)
  • text (文本)
  • namespace (命名空间)
  • processing-instruction (处理指令)
  • comment (注释)
  • root (根节点)

表达式

表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性或 @*:匹配任何属性节点
* 匹配任何元素节点

通配符

通配符 描述
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点

XPath库

xpath解析库解析数据原理:

  1. 根据网页DOM树定位节点标签
  2. 获取节点标签的正文文本或属性值

image-20240713202431047

image-20240713202934763

语法

image-20240713202545814

posted @ 2024-07-13 20:12  Yolololololo  阅读(15)  评论(0编辑  收藏  举报