XML外部实体注入漏洞的示例分析

一、XML外部实体注入

XML 外部实体注入漏洞也就是我们常说的 XXE 漏洞。XML 作为一种使用较为广泛的数据传输格式,很多应用程序都包含有处理 xml 数据的代码,默认情况下,许多过时的或配置不当的 XML 处理器都会对外部实体进行引用。

如果攻击者可以上传 XML 文档或者在 XML 文档中添加恶意内容,通过易受攻击的代码、依赖项或集成,就能够攻击包含缺陷的XML处理器。XXE 漏洞的出现和开发语言无关,只要是应用程序中对 xml 数据做了解析,而这些数据又受用户控制,那么应用程序都可能受到 XXE 攻击。本篇文章以 java 程序为例给大家介绍 XXE 漏洞的成因及修复。XXE 漏洞详细请见 CWE-611: Improper Restriction of XML External Entity Reference (‘XXE’)(http://cwe.mitre.org/data/definitions/611.html)。

二、XML外部实体注入

XXE 漏洞可能会用于提取数据、执行远程服务器请求、扫描内部系统、执行拒绝服务攻击和其他攻击。业务影响主要取决于受影响的引用程序和数据保护需求。

2018年至今,CVE 中共有发布了 92 条漏洞信息与其相关。部分CVE如下:

CVE-2018-8027 Apache Camel 2.20.0 到 2.20.3 和2.21.0 Core 在 XSD 验证处理器中存在 XXE 漏洞。
CVE-2018-13439 微信支付 Java SDK 中的 WXPayUtil 类中存在XXE漏洞。
CVE-2018-1000548 在版本号小于 14.3 的 Umlet 中,在文件解析中存在XML外部实体注入漏洞,可能导致机密数据泄露、拒绝服务、服务器端请求伪造。此攻击可以通过特制的 UXF 文件进行攻击。
CVE-2018-1364 IBM Content Bavigator 2.0 和 3.0 版本中在处理XML数据时,易受XML外部实体(XXE)攻击。远程攻击者可以利用此漏洞暴露敏感信息或占用内存资源。

三、示例代码

3.1 缺陷代码

本节使用示例代码来源为某开源支付 Java SDK (https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1),源文件名:WXPayUtil.java,文件路径为:java-sdk-v3srcmainjavacomgithubwxpaysdk。

XML外部实体注入漏洞的示例分析

在上述代码可以看到在25行处数据通过 xmlToMap 形参传入,数据未做任何过滤,且 XML 处理器也未做安全设置就在32行处对数据做了解析,而实际场景中,参数 strXML 也是受攻击者控制的,这样攻击者可能通过构造恶意的 strXML 来进行 XXE 攻击。

使用360代码卫士对上述示例代码进行检测,可以在文件第32行检出“有风险的XML外部实体注入”缺陷。如图1所示:

XML外部实体注入漏洞的示例分析

图1 检测出有风险的XML外部实体注入

3.2 修复代码

XML外部实体注入漏洞的示例分析

XML外部实体注入漏洞的示例分析

在上述修复代码中的第28行使用的是一个xml工具类WXPayXmlUtil,用于生成一个安全的xml处理器。而 WXPayXmlUtil 类中最为关键的是第16行,通过 setFeature 让生成的 xml 处理器完全禁用 DTDS。通过图2可以看出,360代码卫士对修复后的代码并未检出缺陷。

XML外部实体注入漏洞的示例分析

图2 XXE漏洞修复示例

四、如何避免XXE漏洞

常见的避免方法:

1. 尽可能使用简单的数据格式(如:JSON),避免对敏感数据进行序列化;

2. 及时修复或更新应用程序或底层操作系统使用的所有XML处理器和库。同时,通过依赖项检测,将SOAP更新到1.2版本或更高版本;

3. 在应用程序的所有XML解析器中禁用XML外部实体和DTD进程,具体实现可以参考《OWASP Cheat Sheet ‘XXE Prevention’》(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet)

如下代码是java应用程序中使用DocumentBuilderFactory解析xml时防范XXE漏洞的示例:

XML外部实体注入漏洞的示例分析

4. 输入校验:在服务器端使用白名单进行输入验证和过滤,以防在XML文档、标题或节点中出现恶意数据。

5. 验证XML和XSL文件上传功能是否使用XSD验证或其他类似验证的方法来验证上传的XML文件

6. DAST工具需要额外的手动步骤来检查和利用XXE漏洞,而使用ASAT工具可以通过检测依赖项和安全配置来发现XXE漏洞。

感谢大家的阅读,以上就是“XML外部实体注入漏洞的示例分析”的全部内容了,学会的朋友赶紧操作起来吧。相信亿速云小编一定会给大家带来更优质的文章。谢谢大家对亿速云网站的支持!

文章标题:XML外部实体注入漏洞的示例分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/27156

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年9月20日 上午12:04
下一篇 2022年9月20日 上午12:05

相关推荐

  • 网络安全审计工具Nmap如何使用

    一.软件下载 https://nmap.org/download.html 二.扫描IP nmap 192.168.1.10 #扫描单IP nmap 192.168.1.10-100 #扫描IP段 nmap 192.168.1.10 192.168.1.11 #扫描单独的多IP nmap 192.1…

    2022年9月2日
    15200
  • java常见log日志如何使用

    前言 log日志可以debug错误或者在关键位置输出想要的结果 java日志使用一般有原生logger、log4j、Slf4j等 一般的日志级别都有如下(不同日志不一样的方法参数,注意甄别) 参数 描述 OFF、ON 不输出或者输出所有级别信息,通常使用在setLevel方法中 FATAL 致命错误…

    2022年9月18日
    31800
  • php如何将数据强转为字符串类型

    两种转换方法:1、在数据之前加上用括号括起来的目标类型“(string)”,语法“(string)指定数据”。2、使用强制类型转换函数strval()或settype(),语法“strval(指定数据)”或“settype(指定数据2,”string”)”。 本教程操作环境:…

    2022年9月26日
    43600
  • 电脑黑白打印机打印图片底色黑如何解决

    解决方法 方法一: 1、首先在“Photoshop”中打开想要打印的图片。 2、打开后,点击左上角“图像”,选择“自动色调” 3、软件会自动为你调整背景色,如果还是觉得黑,可以继续调节。 4、继续点击“图像”,打开“调整”下的“色阶”选项。 5、打开后,按住图示位置的滑块,向左滑动。(根据预览情况自…

    2022年9月24日
    52700
  • css如何实现右上角

    右上角 #triangle-topright { width: 0; height: 0; border-top: 100px solid red; border-left: 100px solid transparent;} 感谢你能够认真阅读完这篇文章,希望小编分享的“css如何实现右上角”这篇…

    2022年9月1日
    51400
  • linux能不能获取本地ip地址

    linux能获取本地ip地址。方法:1、利用“ifconfig -a”命令,该命令用于显示或者设置网络设备信息;2、利用“ip address”命令,语法为“ip address | grep eth0 | awk ‘{print$2}’”;3、利用“hostname -I”…

    2022年6月29日
    2.0K00
  • vlookup函数列序表v不出来如何解决

    解决方法 1、首先,匹配模式一般选择“精确匹配”,只有特殊情况才要用近似匹配。 2、如果你发现自己使用的近似匹配,例如函数最后为“true”或“1”就要更改。 3、其次,需要确保你的表格中没有空格。 4、我们可以使用替换功能,将所有空格全部替换成无。 5、最后,还要保证结果和查找数据的格式是一样的。…

    2022年9月22日
    26300
  • pr如何修改视频分辨率

    pr修改视频分辨率的方法: 1、首先进入pr,然后依次点击“新建项目”点击确定。 2、然后可以看到pr自带的多种选择可以自由选择分辨率。 3、还可以去通过设置,来自定义自己需要的剪辑尺寸。 4、可以根据需求来定义,哪怕是手机尺寸也可以。 5、设置好了可以点击“存储预设”来进行保存。 6、等到保存完成…

    2022年8月29日
    73400
  • 如何研究sqlmap使用的注入技术

    使用django搭建了一个注入靶机 def te(request): id = request.GET.get(“id”) db = pymysql.connect(“127.0.0.1”, “root”, “123456”, “t1”, charset=’utf8′) cursor = db.cu…

    2022年9月13日
    29500
  • ​CSS3中calc()如何使用

    CSS3 calc() 的使用 calc() 用法类似于函数,能够给元素设置动态的值: /* basic calc */.simpleBlock { width: calc(100% – 100px);}/* calc in calc */.complexBlock { width: calc(10…

    2022年9月1日
    10300
联系我们
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部