XXE漏洞
1.XML基础知识
eXtensible Markup Language可扩展标记语言
用途
配置文件
交换数据
XML内容
xml声明
XML格式要求
-
XML文档必须有根元素
-
XML文档必须有关闭标签
-
XML标签对大小写敏感
-
XML元素必须被正确的嵌套
-
XML属性必须被加引号
XML格式校验
DTD(Document Type Definition)文档类型定义
DTD内容之元素
元素 ELEMENT
DTD内容之实体
实体 ENTITY
实体ENTITY的使用
内部实体
外部实体
外部实体引用:协议
协议 | 使用方法 |
---|---|
file | file:///etc//passwd |
php | php://filter/read=convert.base64encode/resource=index.php |
http | 页面不存在_百度搜索 |
不同语言支持的协议
Libxml2 | PHP | Java | .NET |
---|---|---|---|
file , http, ftp | file, http, ftp, php, compress.zlib, compress.bzip2, data, glob, phar | file, http, https, ftp, jar, netdoc, mailto, gopher* | file, http, https,ftp |
PHP扩展
完整的XML内容
XML声明部分
文档类型定义
文档元素
2.什么是XXE
XML外部实体注入(XML External Entity Injection)
XXE定义
如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等危害。
3.XXE利用方式
<!DOCTYPE a[ <!ENTITY xxe SYSTEM "file:///C:/Windows/system.ini"> ]>
盲打-http接口参数,写入文件
4.XXE防御
1.禁用外部实体
Java
DocumentBuilderFactory dbf =DocumentBuilderFactory.newlnstance(); dbf.setExpandEntityReferences(false);
2.过滤用户提交的XML数据
' “ "(two apostrophe) "" < > ]]> ]]>> <!--/--> /--> --> <!-- <! <![CDATA[/]]>
3.WAF
以mod_security为例