渗透课程第二阶段--Part8--XXE渗透与防御
目录
一. XML基础知识
XML
XML用途
XML内容
XML格式要求
XML用途
XML格式校验
DTD内容之元素
DTD内容之实体
内部实体ENTITY的使用
外部实体ENTITY的使用
外部实体引用:协议
不同语言支持的协议
PHP扩展
完整的XML内容
三. XXE利用方式
XXE
XXE定义
微信支付XXE漏洞
盲打-DNSLog
盲打-http接口参数,写入文件
四. XXE防御
Java
过滤用户提交的XML数据
WAF
Python
PHP
一. XML基础知识
XML
eXtensible Markup Language 可扩展标记语言
这是一种标记语言,很类似 HTML。设计宗旨是传输数据,而非显示数据
XML用途
- 配置文件
- 交换数据
XML内容
XML格式要求
- XML文档必须有根元素
- XML文档必须有关闭标签
- XML标签对大小写敏感
- XML元素必须被正确的嵌套
- XML属性必须加引号
XML用途
XML格式校验
DTD(Document Type Definition) 文档类型定义
DTD内容之元素
DTD内容之实体
内部实体ENTITY的使用
外部实体ENTITY的使用
外部实体引用:协议
协议 使用方式
file file:///etc//passwd php php://filter/read=convert.base64-encode/resource=index.php
http http://:wuya.com/evil.dtd
不同语言支持的协议
Libxml2 PHP Java .NET file
http
ftp
file
http
ftp
php
compress.zlib
compress.bz
ip2
data
glob
phar
file
http
https
ftp
jar
netdoc
mailto
gopher*
file
http
https
ftp
PHP扩展
Schema Extension Required https
ftps
openssl zip zip ssh2.shell
ssh2.exec
ssh2.tunnel
ssh2.sftp
ssh2.scp
ssh2 rar rar ogg oggvorbis expect expect
完整的XML内容
三. XXE利用方式
XXE
XXE定义
如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
微信支付XXE漏洞
盲打-DNSLog
盲打-http接口参数,写入文件
四. XXE防御
Java
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false);
过滤用户提交的XML数据
'
''
''(two apostrophe)
" "
<
>
]]>
]]>>
<!--/-->
/-->
-->
<!--
<!
<![CDATA[/]]>
WAF
以mod_security为例
Python
from lxml import etree xmlData= etree.parse(xmlSource,etree.XMLParser(resolve_entites=False))
PHP
libxml_disable_entity_loader(ture);