0x00 什么是XPath

XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计。

目前有XPath1.0XPath2.0两个版本。

XPath1.0

Xpath1.0是1999年成为W3C标准,而XPath2.0标准的确立是在2007年。

XPath是一种表达式语言,它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等。

Xpath2.0

XPath2.0XPath1.0的超集。

它是对XPath1.0的扩展,它可以支持更加丰富的数据类型,并且XPath2.0保持了对XPath1.0的相对很好的向后兼容性,几乎所有的XPath2.0的返回结果都可以和XPath1.0保持一样。

XPath 1.0 和 XPath 2.0 之间的区别包括:

  • 基于序列而非节点集的新的数据模型
  • 绑定变量的能力,以前的变量绑定在宿主语言(XSLT)中
  • 完全支持 XML Schema 数据类型
  • 很多新功能,包括正则表达式、日期/时间和字符串操作
  • 注释,虽然不是一个重要的特性,但是在调试查询时很方便:测试时可以注释掉路径的一部分

具体案例如下,由于开发水平有限,用的也比较少,写起来实在蛋疼,这里就不多写了。

https://www.ibm.com/developerworks/cn/xml/x-wxxm35.html


0x01 Xpath表达式语法

XPath 使用路径表达式来选取XML文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

路径

位置路径可以是绝对的,也可以是相对的。

绝对路径起始于正斜杠( / ),而相对路径不会这样。

在两种情况中,位置路径均包括一个或多个,每个均被斜杠分割:

  • 一种是绝对路径
/step/step/...
  • 一种是相对路径
step/step/...

步(step)有以下几种

名称 定义
轴(axis) 定义所选节点与当前节点之间的树关系
节点测试(node-test) 识别某个轴内部的节点
谓语(predicate) 更深入地提炼所选的节点集

step的语法:

轴名称::节点测试[谓语]
常见轴的名称

轴可定义相对于当前节点的节点集。

轴名称 结果
ancestor 选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute 选取当前节点的所有属性。
child 选取当前节点的所有子元素。
descendant 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
namespace 选取当前节点的所有命名空间节点。
parent 选取当前节点的父节点。
preceding 选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling 选取当前节点之前的所有同级节点。
self 选取当前节点。
谓词(筛选表达式)

XPath谓词即筛选表达式,类似于SQLwhere子句。

运算符/特殊字符 说明
/ 此路径运算符出现在模式开头时,表示应从根节点选择。
// 从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。
. 当前上下文。
当前上下文节点父级。
* 通配符;选择所有元素节点与元素名无关。(不包括文本,注释,指令等节点,如果也要包含这些节点请用node()函数)
@ 属性名的前缀。
@* 选择所有属性,与名称无关。
: 命名空间分隔符;将命名空间前缀与元素名或属性名分隔。
( ) 括号运算符(优先级最高),强制运算优先级。
[ ] 应用筛选模式(即谓词,包括"过滤表达式"和"轴(向前/向后)")。
| 两个节点集合的联合
- 减法。
div 浮点除法。
and, or 逻辑运算。
mod 求余。
not() 逻辑非
= 等于
!= 不等于
< ,>,>=,<= 特殊比较运算符

0x02 XPath学习测试

XML 实例文档
<data><users><user><name id='1'>hacker</name><message>Hello hacker</message><password>cisco123</password></user><user><name id='2'>admin</name><message>Hello admin</message><password>s3cr3tP4ssw0rd</password></user></users>
</data>
PHP代码
//$x为上面的xml代码
<?php$xml=simplexml_load_string($x);$xpath = $_POST['name'];print $xpath."<hr>";$res = ($xml->xpath($xpath));print_r($res);}
?>
测试用例

选择文档根下面的所有元素节点,即根节点(XML文档只有一个根节点)

user下所有的节点

user下的第一个节点

user下的最后一个节点

users下的第一个节点递归下降查找所有的文本节点(无限深度)

第一个users节点下的所有子节点

user节点下name为admin的节点

user节点下name的属性名为id,且为1的节点

了解得差不多了,就不在继续了,暂时够用了。


0x03 XPath注入

案例1——web_for_pentester靶场

源码

$x = "<data><users><user><name>hacker</name><message>Hello hacker</message><password>pentesterlab</password></user><user><name>admin</name><message>Hello admin</message><password>s3cr3tP4ssw0rd</password></user></users></data>";$xml=simplexml_load_string($x);$xpath = "users/user/name[.='".$_GET['name']."']/parent::*/message";$res = ($xml->xpath($xpath));while(list( ,$node) = each($res)) {echo $node;}

万能密码走一波hacker' or 1='1,不过这里也没想明白为什么true就可以打印所有了。。。这个学起来真是麻烦,还没找到学习方法啊,好多不知道为啥的,心累。

当然还可以直接遍历所有的元素'] | ../..//* | //*%00,如果不能截断,那就用['闭合。

(这里也有点奇怪,我的php是5.5怎么还能用截断!!!???。。。神奇了)

案例2——XVWA


由于是post提交的,所以我这里用burpsuite来进行提交,方便编码。

这样能爆出所有的节点,编码以后是1']|..//*,然后后面截断%00多余的就可以了

盲注

这里找了一篇不错的文章,感觉用起来好困难,不想努力了,找了个偷懒的方法。

先放文章好了,XPath Hacking技术科普

我自己拿了个xcat的工具,用起来还可以,直接在python下安装就可以直接使用了。

直接跑出了所有的数据,然后我通过查看日志,把所有的payload都看了下,是使用的盲注,常用函数为

  • count()
  • lower-case()
  • boolean()
  • string-length()
  • substring-before()
  • comment()

总之还有很多,跑出上面的结果一共用了1364次请求,下面解释几个用的多的函数

  • Count(NODESET) – 返回节点集中子节点的数目

  • String-length(STRING)–返回指定字符串的长度,获得一个节点名的长度可以使用以下语法: string-length(/[1]/[1]/name())

  • Substring (STRING, START,LENGTH) – 这个功能用来枚举一个节点的文本值,我们可以使用substring匹配指定字符串与节点中的字符串,可以循环的通过实体字符表获取所有字符的值。

盲注技巧记录

XPath从当前节点可以导航到父节点或一个特定的子节点。

例如,使用子字符串技巧,提交如下 格式的密码,提取当前节点的父节点的名称:
' or substring(name(parent::*[position()=1]),1,1)='a

若有结果返回,则说明节点的第一个字母为’a’,则继续测试第二个字母:

确定address节点的名称后,攻击者就可以轮流攻击它的每个子节点,提取出它们的名称与值。(通过索引)
//address[postion()=3]/child:node()[position()=4]/text()


查找XPath漏洞

渗透步骤

好了,我认输了,这个暂时就这样了,以后有收获了再更新!

XPath注入漏洞学习相关推荐

  1. Web安全之SQL注入漏洞学习(一)

    Web程序三层架构 三层架构主要是指将业务应用规划为的表示层 UI.数据访问层 DAL 以及业务逻辑层 BLL,其分层的核心任务是"高内聚低耦合"的实现.在软件体系架构设计中,分层 ...

  2. Web安全之SQL注入漏洞学习(七)-堆叠注入

    堆叠注入简介 堆叠注入是指注入的多条SQL语句可以一起执行.MySQL命令行中, 每一条语句结尾加; 表示语句结束.这样是不是可以多句一起使用.这个叫做 stacked injection. 堆叠注入 ...

  3. XML相关的安全漏洞-XXE,XPATH小结(XXE注入、XPATH注入)

    0x00前言: 本文主要小结以下php下的xpath查询xml结构的漏洞利用和XXE漏洞利用 xml是可扩展标记语言,它被设计出来是为了存储传输数据的. 它的结构是树形结构,并且标签要成对出现比如下面 ...

  4. 基于pikachu漏洞平台的 --SQL注入攻击学习与总结

    SQL注入攻击 基础知识 常见注释符号 使用示例 pikachu 漏洞联系平台 -- SQL注入 SQL注入攻击流程 注入点类型 数字型注入(POST) 字符型注入(GET) 搜索型注入 XX型注入 ...

  5. %3c xml 和php冲突,[原创]WEB安全第五章 漏洞学习与利用11 xml实体注入

    WEB安全第五章 漏洞学习与利用11 xml实体注入 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数 ...

  6. WEB安全的总结学习与心得(十)——SQL注入漏洞

    WEB安全的总结学习与心得(十) 01 SQL注入漏洞之简介 02 SQL注入的过程 03 SQL注入的本质 04 SQL注入靶场 1.显错注入(Get注入) 显错注入小结 2.POST注入 POST ...

  7. 渗透测试学习 十一、 其他注入漏洞汇总

    大纲:提交方式注入 参数型注入 其他注入 提交方式注入 常见的提交方式: GET:大多数,正常的浏览,以URL的方式进行传参,不安全,明文传输,存在长度限制.xx.com/x.php?id=1 POS ...

  8. phpsso.php 注入漏洞,PHPCMS各种注入漏洞补丁

    1.宽字节注入漏洞 /phpcms/modules/pay/respond.php 位置约16行 原来代码$payment = $this->get_by_code($_GET['code']) ...

  9. Codeigniter 利用加密Key(密钥)的对象注入漏洞

    http://drops.wooyun.org/papers/1449 原文链接:http://www.mehmetince.net/codeigniter-object-injection-vuln ...

最新文章

  1. seaborn系列 (13) | 点图pointplot()
  2. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...
  3. mysql中的时间函数---运维常用
  4. 图解 Elasticsearch 原理
  5. c语言反编译_Gacrux:基于C语言的可自定义PE加载恶意软件
  6. C++中函数的重载和函数指针排序大全
  7. 8086和8088微处理器之间的区别
  8. PHP做好防盗链的基本思想 防盗链的设置方法
  9. Atitit 2016年attilax事业成就表
  10. 【毕业设计/Matlab系列】基于matlab的线性调频信号的仿真
  11. android设置闹钟日期,具有特定日期的Android闹钟设置
  12. 非同步DCDC的工作模式(CCM、DCM和BCM)
  13. Linux的LILO引导程序,LILO引导装载器详解
  14. python 微信分享链接_python如何爬取搜狗微信公众号文章永久链接的思路解析
  15. Data Base学习记录:ODL
  16. 神州数码基础知识配置总结
  17. SharePoint 内容编辑器部件介绍
  18. 站内搜寻引擎 php mysql_使用PHP+Sphinx建立高效的站内搜索引擎的方法
  19. 【方同学】是如何高效的使用IntelliJ IDEA
  20. 电脑把计算机用户删了怎么办,电脑密码忘了怎么办最简单的方法

热门文章

  1. Shopee的办公室(二)
  2. SPS读书笔记1——均值比较(T检验,方差检验,非参数检验汇总)
  3. <微机原理>[汇编语言]-[实验七]数码管动态显示实验
  4. 负数的二进制表示方法
  5. TensorFlow的MNIST手写数字分类问题
  6. 2022年全球及中国磁珠净化行业投资趋势与运营规模格局分析报告
  7. 关于iPad的100个问题
  8. 巴基斯坦签证办理攻略及流程 材料分析 巴基斯坦签证如何办理
  9. VSCode——修改VSCode背景图片
  10. Android开发板串口(SerialPort)通信