freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

渗透测试 | 一文学习Xpath注入
Yf3_te 2024-09-11 01:14:42 78305

前置知识

Xpath简介

Xpath(XML Path language),即为XML路径语言,使用在XML文档中查找信息的语言。XPath 基于 XML 的树状结构(如下),有不同类型的节点,包括元素节点,属性节点和文本节点,Xpath提供在数据结构树中找寻节点的能力,可用来在 XML 文档中对元素和属性进行遍历,通过路径表达式选择和操作XML文档节点。

2114266969.gif

简而言之,XPath语言就是XML中用于定位查询的语言。

重温XML语言

只是做个简单基础回顾,细节处可能诠释得不太好。关于xml语言,其中包含一个重要的概念:节点。可以说xml文档是由各种节点组成,常见节点包括:元素节点、属性节点、文本节点、注释节点、、子孙节点

以下述得xml文档为例

<?xml version="1.0" encoding="ISO-8859-1"?>  //XML 声明

<bookstore>     
<book>          
  <title lang="en">Harry Potter</title>  
  <author>JK.Rowling</author>      
  <year>2005</year><!-- Text Node --> 
  <price>29.99</price>
</book>
</bookstore>

根元素节点:<bookstore>
	<bookstore>的子元素节点:<book>
		<book>的子元素节点:<title>、<author>、<year>、<price>
<bookstore>的子孙节点:<book>、<title>、<author>、<year>、<price>
属性节点:lang="en"
文本节点:JK.Rowling、2005、29.99
注释节点:<!-- Text Node --> 

XPath基础语法

1、节点选取

下述表格的小括号中的,就是根据上述xml文档举的例子

表达式&示例描述&示例结果
nodename(bookstore)选取此节点的所有子节点。(<book>)
/从根节点选取子节点。
/xxx/xxx(/bookstore/book)从指定的绝对路径节点选取子节点(<title>、<author>……)
//(//book)从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。
.选取当前节点。
..(//book/..)选取当前节点的父节点。(bookstore的子孙节点)
@(//@lang)选取属性节点。(lang="en")
text()(//year/test())选取文本节点。(2005)

2、谓语

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]//title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

3、选取未知节点

通配符描述
(/bookstore/)匹配任何元素节点。(bookstore的所有子元素)
@(//@)匹配任何属性节点。(选取所有属性节点)
node()(//node())匹配任何类型的节点。(选取所有类型节点)

4、轴

轴可定义相对于当前节点的节点集,常用使用的形式: 轴::node() 。由于形式几乎一致,就只举下述表格中一个例子即可。

轴名称结果
ancestor(//book/ancestor::node())选取当前节点的所有先辈(父、祖父等)。(bookstore)
ancestor-or-self选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute选取当前节点的所有属性。
child选取当前节点的所有子元素。
descendant选取当前节点的所有后代元素(子、孙等)。
……..…….

5、运算符

运算符同sql注入的差不多,加减等于就不用怎么看了,主要是学习运算符如何拼接语句,让我们能看懂并且会写一些payload

| |(//book|//bookstore) | 计算两个节点的并集子节点(返回book和bookstore的所有子节点) | | --- | --- | | or(' or '1'='1) | 或者(可以使得最终判定结果为ture) |

等等等知识点,只列举一些基础的,能让我们知道怎么写和看懂payload即可。

Xpath注入

描述

XPath注入攻击,是指利用XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入攻击是针对Web服务应用新的攻击方法,它允许攻击者在事先不知道XPath查询相关知 识的情况下,通过XPath查询得到一个XML文档的完整内容或相关XML型数据库(Oracle XML DB、Microsoft SQL Server(XML 数据存储))的内容。

简而言之,Xpath注入攻击本质上和SQL注入攻击是类似的,都是输入一些恶意的查询等代码字符串,从而对网站进行攻击。

注入原理&展示示例

XPath注入攻击主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作,但是,注入的对象不是数据库users表了,而是一个存储数据的XML文件。攻击者可以获取 XML 数据的组织结构,或者访问在正常情况下不允许访问的数据,如果 XML 数据被用于用户认证,那么攻击者就可以提升他的权限。因为

可试读前30%内容
¥ 19.9 全文查看
9.9元开通FVIP会员
畅读付费文章
最低0.3元/天
# web安全 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 Yf3_te 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Yf3_te LV.2
这家伙太懒了,还未填写个人描述!
  • 2 文章数
  • 1 关注者
浅识springblade框架漏洞
2024-10-23
文章目录