XXE(XML External Entity Injection)外部实体注入
危害
如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
当然现在只要较低版本的php才有, 高版本的已经禁止了.
可以通过不同语言的协议进行注入.
各种语言支持的一些可以网上搜索到. 有的协议还需要 安装一些扩展才能使用.
- 利用XXE请求一个很大的file, 可能会造成服务器的中断. (俗称"XXE炸弹")
- 可以让注入的内容膨胀, 从而浪费很多内存
- 可以服务器上有哪些端口开放的. 如果没有开放会报错, ^^^端口没开放
只要会写xml代码, 丢进去, 能执行, 就可以搞事情了
当然, 前提是要确定请求是xml才行
xxe-靶场 和样例
https://github.com/c0ny1/xxe-lab
这个作者也是upload-labs靶场的作者.
pikachu 靶场也可以
只要在输入框中输入的xml能执行就可.
例如:
- 在某个输入框中, 我想知道某个端口是否运行了.
可以使用下方代码.
- 想要浪费内存资源, 在输入框中使用一下代码.
- 它会自己膨胀从而达到目的.
- 使用BP 和 xxe-labs 的php进行演示:
上面都是有回显的, 如果没有回显
可以使用dnslog, 产生解析记录:
dns.log平台: http://dnslog.cn/
具体代码省略.
继续学习中补充.
XXE漏洞的防御
分析
1.
出现该漏洞的根本原因就是原来的代码允许外部实体注入, 那么把外部实体注入禁掉不就可以了吗?
微信支付里介绍的xxe漏洞和修复
pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5
- 对于标签和符号进行过滤,不允许输入这些东西.
例如:
- 自己写太麻烦
可以用waf 更加的方便.