XML外部实体(XXE)注入-寻找隐藏攻击面

admin 2023年2月18日01:13:19评论80 views字数 1966阅读6分33秒阅读模式

在本节中,将解释如何寻找不大明显的XXE漏洞的攻击面,有些可能并非在XML请求中。

 


XInclude攻击

一些应用程序接收客户端提交的数据,在服务器端将其嵌入到XML文档中,然后解析该文档。

当客户端提交的数据被放入后端SOAP请求中时,就会出现这种情况的一个示例,该请求随后由后端SOAP服务器处理。

在这种情况下,因为无法控制整个XML文档,我们无法通过定义或修改DOCTYPE元素来进行经典的XXE攻击。

但是,也许可以改用XIncludeXIncludeXML规范的一部分,它允许从子文档构建XML文档。我们可以在XML文档中任何数据值中防止XInclude攻击,因此可以在仅控制放置在服务器端XML文档中单个数据项的情况下执行攻击。

要执行XInclude攻击,需要引用XInclude命名空间并提供希望包含的文件路径,例如:

XML外部实体(XXE)注入-寻找隐藏攻击面

 

场景试验-利用XInclude检索文件:

https://portswigger.net/web-security/xxe/lab-xinclude-attack

场景说明:

这个试验场景具有“检查库存”功能,这个功能将用户的输入嵌入到随后在服务器端解析的XML文档中。因为无法控制整个XML文档,所以无法定义DTD来发起经典的XXE攻击。

试验目的:

要完成这个试验,需要注入XInclude语句来检索/etc/passwd文件的内容。

攻击过程:

打开商品后查询下库存,将这个请求发送给Repeater,可以看到这里没有在请求中直接提交XML格式文档了

XML外部实体(XXE)注入-寻找隐藏攻击面

 

"productId"后面的参数设置为如下语句:

<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>

XML外部实体(XXE)注入-寻找隐藏攻击面

 

发送请求后,可以得到泄露文件的响应,完成试验

XML外部实体(XXE)注入-寻找隐藏攻击面

 

 


通过文件上传进行XXE攻击

一些应用程序允许用户上传文件,然后在服务器端进行处理。一些常见的文件格式使用XML或包含XML子组件。

基于XML格式的示例有DOCX等办公文档格式和SVG等图像格式。

例如,应用程序可能允许用户上传图像,并在上传后在服务器上处理或验证这些图像。即使应用程序希望接收对象是PNGJPEG这样格式的,但正在使用的图像处理库也可能支持SVG图像。由于SVG格式使用XML,攻击者可以提交恶意SVG图像,从而达到XXE漏洞的隐藏攻击面。

 

场景试验-利用图像文件上传进行XXE攻击:

https://portswigger.net/web-security/xxe/lab-xxe-via-file-upload

场景说明:

这个试验场景允许用户将头像附加到评论中,并使用Apache Batik库来处理头像图像文件。

试验目的:

要完成这个试验,需要上传一张照片,显示处理后的/etc/hostname文件的内容,然后将主机名进行提交。

攻击过程:

先在本地创建一个SVG类型的文件,文件中直接放入下列代码即可:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">    <image xlink:href="expect://ls" width="200" height="200"></image></svg>

 

在微博提交评论的地方,有个上传头像的地方,把这个图像文件上传上去并提交评论,如果被阻拦说格式不对的话,检查下后缀是否修改成.svg

XML外部实体(XXE)注入-寻找隐藏攻击面

 

随后刷新下评论,可以看到头像这里有个图片,点击放大图片,就可以看到hostname了,将这个字符串提交即可完成试验

XML外部实体(XXE)注入-寻找隐藏攻击面

 

XML外部实体(XXE)注入-寻找隐藏攻击面

 

XML外部实体(XXE)注入-寻找隐藏攻击面

 


通过修改内容的类型进行XXE攻击

大多数POST请求使用由HTML表单生成的默认内容类型,例如application/x-www-form-urlencoded

一些网站希望接收这种格式的请求,但会容忍其他内容类型,包括XML

例如,如果一个正常的请求包含下面内容:

XML外部实体(XXE)注入-寻找隐藏攻击面

然后我们可以提交以下请求,结果相同:

XML外部实体(XXE)注入-寻找隐藏攻击面

如果应用程序接受消息正文中包含XML请求,并将正文内容解析为XML,那么我们只需将请求重新修改XML格式,就可以达到隐藏的XXE攻击面。


XML外部实体(XXE)注入-寻找隐藏攻击面


服务器端请求伪造(SSRF)-概念梳理

文件上传漏洞-概念梳理

访问控制和权限提升漏洞-概念梳理

信息泄露漏洞-概念梳理

业务逻辑漏洞-概念梳理

命令注入攻击(上)
目录遍历攻击(上)

身份验证漏洞-概念梳理

SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理


原文始发于微信公众号(H君网安白话):XML外部实体(XXE)注入-寻找隐藏攻击面

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月18日01:13:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XML外部实体(XXE)注入-寻找隐藏攻击面http://cn-sec.com/archives/1273931.html

发表评论

匿名网友 填写信息