zoukankan      html  css  js  c++  java
  • XXE注入攻击与防御

    0x00 前言

    XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进⾏行处理时引发的安全问题.
    在XML1.0标准⾥里,XML文档结构⾥里定义了实体(entity)这个概念.实体可以通过预定义在文档中调用,实体的标识符可访问本地或远程内容.如果在这个过程中引入了”污染”源,在对XML文档处理后则可能导致信息泄漏等安全问题.

    0x01 威胁
    XXE漏洞目前还未受到广泛关注,Wooyun上几个XXE引起的安全问题:

    • pull-in任意文件遍历/下载
    • 从开源中国的某XXE漏洞到主站shell
    • 百度某功能XML实体注入
    • 百度某功能XML实体注入(二)

    借助XXE,攻击者可以实现任意文件读取,DOS拒绝服务攻击以及代理扫描内网等.
    对于不同XML解析器,对外部实体有不同处理规则,在PHP中默认处理的函数为: xml_parse和simplexml_load xml_parse的实现方式为expat库,默认情况不会解析外部实体,而simplexml_load默认情况下会解析外部实体,造成安全威胁.除 PHP外,在Java,Python等处理xml的组件及函数中都可能存在此问题

    0x02 语法
    要写Payload,首先要对XML实体语法有一定了解
    XML中entity的定义语法为:

    如果要引用一个外部资源,可以借助各种协议 几个例子:

    故构造几种简单的Payload模型如下:

    亦可读取网站内容

    如果包含文件失败,可能是由于读取php等文件时文件本身包含的<等字符.可以使用Base64编码绕过,如:

    0x03 攻击
    借助XXE,有几种可用且公开的攻击方式:

    拒绝服务
    POC

    POC中中先定义了lol实体,值为”lol”的字符串,后在下面又定义了lol2实体,lol2实体引用10个lol实体,lol3又引用了10 个lol2实体的值,依此类推,到了最后在lolz元素中引用的lol9中,就会存在上亿个”lol”字符串此时解析数据时未做特别处理,即可能造成拒绝 服务攻击。
    此外还有一种可能造成拒绝服务的Payload,借助读取/dev/random实现.
    内网信息
    借助各种协议如http,XXE可以协助扫描内网,可能可以访问到内网开放WEB服务的Server,并获取其他信息

    1

    文件读取

    最常规也是最有效的利用思路

    附上两张截图,实现文件读取的过程

    2

    3

    0x04 防御
    1.检查所使用的底层xml解析库,默认禁止外部实体的解析
    2.使用第三方应用代码及时升级补丁
    3.同时增强对系统的监控,防止此问题被人利用
    对于PHP,由于simplexml_load_string函数的XML解析问题出在libxml库上,所以加载实体前可以调用这样一个函数

    0x05 参考
    https://www.owasp.org/index.php/Testing_for_XML_Injection_(OWASP-DV-008)
    http://websec.io/2012/08/27/Preventing-XEE-in-PHP.html
    http://cn2.php.net/libxml_disable_entity_loader
    http://projects.webappsec.org/w/page/13247004/XML%20Injection
    http://drops.wooyun.org/papers/1911

  • 相关阅读:
    Python 学习日记 第七天
    Python 学习日记 第六天
    Python 学习日记 第五天
    Python 学习日记 第四天
    Redis 中的数据类型及基本操作
    Asp.net mvc 中View 的呈现(二)
    Asp.net mvc 中View的呈现(一)
    Asp.net mvc 中Action 方法的执行(三)
    Asp.net mvc 中Action 方法的执行(二)
    Asp.net mvc 中Action 方法的执行(一)
  • 原文地址:https://www.cnblogs.com/milantgh/p/4251782.html
Copyright © 2011-2022 走看看