XXE利用
有回显XXE
可直接在页面查看情况;带内XML外部实体(XXE),则可以发送带有XXE有效的负载请求
无回显XXE
又叫Blind XXE,可以使用外带数据通道提取XML外部实体(OOB-XXE)
漏洞发现
先找接受XML作为输入内容的端点(修改HTTP,修改CONTENT-TYPE,检查是否解析)
再看站点是否解析xml,解析即可尝试引用实体和DTD
如果可以引用外部实体,则存在xxe漏洞
本地文件读取
有回显XXE
1.file:///
2.若为PHP程序,可使用php://filter伪协议
3.当所读文件包含了< &使用CDATA,利用外部参数实体
(有些解析库支持列目录)
无回显XXE
既然没有回显,那就要想办法把数据发送到远程服务器上
(利用通过该国外部DTD将内部参数实体内容与外部DTD声明的实体内容进行拼接。利用payload来从目标主机读取文件内容后,把文件内容作为url的一部分来请求我们本地监听的端口)
流程:定义一个参数实体,值为用file协议请求本地文件,然后定义另一参数实体,将其引用
(但几乎所有XML解析器都不解析同级参数实体内容)
所以想到嵌套,不同级时引用%file又不能出现在DTD内部子集的标记内,因此我们才引用外部DTD
(实体值中不能有%所以对其进行编码)
内网主机探测
有回显:利用BP爆破模块对IP或者端口设置变量,通过引用外部普通实体进行爆破
无回显:同理,但通过响应时间进行判断(存活的主机时间较短???)
Java中上传excel导致xxe漏洞
若存在上传功能,且支持上传xslx格式,则可能存在xxe漏洞。将XSLX该为改为zip格式,在XML文件中写入payload,通过监听相应的端口带回文件
XXE修复
过滤用户的xml数据 < 关键字等等
或者是在相应语法中设置