大纲|总括

图一

XML(语言|传输数据的一种类型)|XXE(漏洞)|基本知识

xml|xxe基础概念

参考:https://blog.csdn.net/m0_63917373/article/details/127654477
1、XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。
2、XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
3、XXE(XML External Entity)是一种攻击技术,利用了XML解析器的功能来加载外部实体。
4、DTD(Document Type Definition)是一种用于定义XML文档结构的规范,其中可以定义实体(Entity)。
5、实体是XML中的一种特殊元素,可以用来表示常量值或者引用外部资源。在DTD中,可以使用实体来定义一些常用的字符串,然后在XML文档中使用实体引用来代替这些字符串。例如,可以在DTD中定义一个实体,然后在XML文档中使用&company;来引用这个实体,这样就可以将ABC Company作为一个常量值在XML文档中使用。
6、!XXE攻击利用了XML解析器对外部实体的支持,攻击者构造恶意的XML文档,其中包含对外部实体的引用。当解析器解析这个恶意的XML文档时,会尝试加载外部实体,攻击者可以利用这个机制来读取敏感文件、执行远程请求等。

XML和XXE区别

1、XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的信息传输工具。
2、XXE 漏洞全称XML External Entity Injection,即 xml 外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

XML 与 HTML 的主要差异:

1、XML 被设计为传输和存储数据,其焦点是数据的内容。
2、HTML 被设计用来显示数据,其焦点是数据的外观。
3、HTML 旨在显示信息,而 XML 旨在传输信息。

xxe攻击流程:

攻击者构造恶意的XML文档,其中包含对外部实体的引用。
攻击者将恶意的XML文档发送给目标系统,触发XML解析器解析。
XML解析器在解析过程中尝试加载外部实体。
如果加载成功,攻击者可以读取外部实体的内容,例如敏感文件的内容。
攻击者可以利用外部实体的内容进行进一步的攻击,例如执行远程请求。

具体分析

pikachu靶场XML-知识点:回显,玩法,协议,引入:4:40
1、XML|DTD学习:
https://blog.csdn.net/lxz352907839/article/details/127531994
https://www.cnblogs.com/ForEvErNoME/p/2373384.html
2、引入外部实体DTD:会将DTD文件的内容当作XML代码执行。
(1)条件:对方网站没有禁止引入外部实体DTD。
(2)类似于远程文件包含,可以自定义代码攻击,可以绕过一些防御的软件或者代码(payload中的ip改为自己的)。
3、无回显情况(反向连接的思路)
通过第一步访问文件,然后再访问dtd文件,把读取到的数据赋给data,然后我们只需要再自己的网站日志,或者写个php脚本保存下来,就能看到读取到的文件数据了。(就是构造这样的payload:让对方服务器去请求某一个目标文件,然后让他访问我们自己的IP下的DTD文件,随后我们可以在这个DTD文件里设计访问日志或者构造php文件接收来查看数据)。
xxe|协议-读文件(绕过对方的过滤)–思路:30:45
参考:https://www.cnblogs.com/20175211lyz/p/11413335.html
xxe-lab靶场登录框xml数据传输测试–检测发现xxe:35:40
CTF-Jarvis-OJ-Web-XXE|真题|数据请求格式:46:50
1、这里就是盲猜,把type值改为application/xml然后构造payload放进去看有没有被执行。
CTF-Vulnhub(非vulhub)-XXE安全漏洞复现(重点)-实战:50:22
1、vulnhub更贴近实战,但是对内存要求较高。
2、用file协议读取文件需要这个文件的完整路径(绝对路径),但是用php的去读取只需文件名(相对路径,默认在当前目录(注意不是根目录)下找目标文件)。
3、”./“和”../“都是用于指定文件路径的相对路径符号。
“./“表示当前目录,用于引用当前目录下的文件或文件夹。例如,”./file.txt”表示当前目录下的file.txt文件。
“../“表示上级目录,用于引用上级目录下的文件或文件夹。例如,”../folder/file.txt”表示上级目录中的folder文件夹下的file.txt文件。
因此,”./“和”../“的区别在于引用的目录位置不同。”./“表示当前目录,而”../“表示上级目录。
xxe工具使用-实战:1:20:50

XXE防御

图二