前言
ghctf2025遇到了一道xxe的题目,这里开始学习并总结一下xxe的知识点
一、什么是xxe?
xxe就是xml外部实体注入,是由于未对XML外部实体加以限制,导致攻击者将恶意代码注入到XML中,导致服务器加载恶意的外部实体引发文件读取,SSRF,命令执行等危害操作。
只说这些肯定看不懂,我们先解释一下xml是什么,xml的语法是怎样的,xml的DTD又是什么,内部文档和外部文档的区别有哪些。
xml简单介绍
xml是一种类似HTML的标记语言,被设计用于结构化传输和储存数据。
XML文档由元素构成,每个元素包括开始标签、结束标签和元素内容。
|
|
其中第一行的是xml版本声明,
文档类型定义(DTD)
DTD的作用是定义 XML 文档的合法构建模块。 可被成行地声明于 XML 文档中,也可作为一个外部引用。

每一个中都对应了一个标签,这就是内部实体,解释为**!ELEMENT to** (第四行)定义 to 元素为 “#PCDATA” 类型。
这就是内部文档声明

外部文档就是把上述的框架写在一个.dtd文件里面。而这,就是xxe漏洞的开始。
外部文件可以是网站中已有的文件,这就代表可以用这个方法恶意读取文件。
xxe漏洞注入流程
了解了基础知识,接下来就是xxe的流程
检测xxe漏洞是否存在
如果有源码的话,不妨丢给ai。
如果有注入点,可以尝提交
如果没有注入点,那就直接抓包把pyload放进包内(这里就是方法了,无注入点,无源码的情况还没遇到过)

构造pyload
有回显xxe
给两个示例
|
|
|
|
以第二个pyload为例首先是版本
|
|
然后定义根元素 creds
|
|
在根元素里定义xx变量,用于接受读取的文件内容
|
|
然后是xml部分,根元素一定要和定义的一样
|
|
根元素里写其他元素(元素名为ctfshow是题目要求),里面输入刚刚定义的变量xx
|
|
无回显xxe

和一种类似,看懂了第一种就看得懂第二种 值得一提的是,第二种需要你有自己的服务器,将回显内容输出到自己的服务器上
这里详细讲讲如何操作
例题ctfshow web374

无回显xxe,我们用腾讯云抢占式实例监听器+final shell ProbiusOfficial/TCL: TCL-TencentCloudListener 腾讯云抢占式实例监听器
打开后在终端

输入
|
|
未完待续