4.bWAPP XML&XPath Injection
2023-1-27 16:50:0 Author: xz.aliyun.com(查看原文) 阅读量:11 收藏

前言

XML注入

XXE -"xml external entity injection", 即 "xml外部实体注入漏洞"。

概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"

也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

XPath注入

是指利用XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入攻击是针对Web服务应用新的攻击方法,它允许攻击者在事先不知道XPath查询相关知识的情况下,通过XPath查询得到一个XML文档的完整内容。Xpath注入攻击本质上和SQL注入攻击是类似的,都是输入一些恶意的查询等代码字符串,从而对网站进行攻击。

基础

XML教程

XPath教程

0x01、XML/XPath Injection (Login Form)

注入单引号, 发现报出了xmli的解析错误:s

可知是利用了xml/xpath解析的用户登录信息。

原理

XPath注入的原理其实和sql注入很像, XPath注入攻击主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作,但是,注入的对象不是数据库users表了,而是一个存储数据的XML文件。攻击者可以获取 XML 数据的组织结构,或者访问在正常情况下不允许访问的数据,如果 XML 数据被用于用户认证,那么攻击者就可以提升它的权限。因为xpath不存在访问控制,所以我们不会遇到许多在SQL注入中经常遇到的访问限制。XML 中没有访问控制或者用户认证,如果用户有权限使用 XPath 查询,并且之间没有防御系统或者查询语句没有被防御系统过滤,那么用户就能够访问整个 XML 文档。 注入出现的位置也就是cookie,headers,request parameters/input等。

Low

以这关的登录验证模块为例,说明 XPath注入攻击的实现原理。

在Web 应用程序的登录验证程序中,一般有用户名(username)和密码(password) 两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。若验证数据存放在XML文件中,其原理是通过查找XML文件中的用户名 (username)和密码(password)的结果来进行授权访问,

  • 白盒测试

查看源码得知是通过读取heroes.xml文件的内容, 并且通过xpath寻找用户的账户和密码来验证登录:

继续查看heroes.xml文件内容, 是一个xml文件, 里面包含了用户名和登录密码等信息:

根据xpath语句:

/heroes/hero[login='$login' and password='$password']

在没有对login和password参数作任何防护的情况下, 可以构造xpath语句进行注入

这里注入点选择login参数, 将$login前面的单引号闭合, 加入永真条件1=1, 构造一个万能登录的payload:

hack' or 1=1 or ''='

结果为

Medium&High

这两个级别中, 都对xpath语法进行了严格的过滤, 安全:

0x02、XML/XPath Injection (Search)

这关通过简单的类别搜索来查找电影名称

如下就是查找科幻类的电影:

Low

  • 黑盒测试

通过url更改参数注入单引号, 从得到报错信息得知: 服务端是用了xml的解析

  • 白盒测试

查看源码, 看到的确是读取了一个包含电影信息的xml文件, 然后再利用xpath提取信息:

继续查看heroes.xml文件内容, 是一个xml文件, 里面包含了用户名和登录密码等信息:

关键xpath语句如下:

//hero[contains(genre, '$genre')]/movie

大概表示所有属性值genre为$genre的hero标签下的movie元素值

这里的genre参数是可控的, 攻击者可以构造恶意xpath语句来获取整个xml文档的信息:

比如, 通过闭合$genre前面的单引号, 然后在后面选取hero的password元素值; 最后用一个 | 运算符将movie闭合好:

horror')]/password | hack[contains(a,'

注入后的xpath语句为:

//hero[contains(genre, 'horror')]/password | hack[contains(a,'')]/movie

结果为

Medium&High

同样对xpath语法进行了严格的过滤, 安全:

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。


文章来源: https://xz.aliyun.com/t/12071
如有侵权请联系:admin#unsafe.sh