XXE(XML External Entity Injection)外部实体注入

危害

如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

当然现在只要较低版本的php才有, 高版本的已经禁止了.

 
 

可以通过不同语言的协议进行注入.
各种语言支持的一些可以网上搜索到. 有的协议还需要 安装一些扩展才能使用.

  1. 利用XXE请求一个很大的file, 可能会造成服务器的中断. (俗称"XXE炸弹")
  2. 可以让注入的内容膨胀, 从而浪费很多内存
  3. 可以服务器上有哪些端口开放的. 如果没有开放会报错, ^^^端口没开放

只要会写xml代码, 丢进去, 能执行, 就可以搞事情了
当然, 前提是要确定请求是xml才行

xxe-靶场 和样例

​https://github.com/c0ny1/xxe-lab​

这个作者也是upload-labs靶场的作者.

pikachu 靶场也可以

只要在输入框中输入的xml能执行就可.
例如:

  1. 在某个输入框中, 我想知道某个端口是否运行了.
    可以使用下方代码.

XXE_输入框

  1. 想要浪费内存资源, 在输入框中使用一下代码.
  2. 它会自己膨胀从而达到目的.
  3. XXE_php_02

  4. 使用BP 和 xxe-labs 的php进行演示:
  5. XXE_输入框_03

XXE_输入框_04

 
 
 
上面都是有回显的, 如果没有回显
可以使用dnslog, 产生解析记录:
dns.log平台: ​​​http://dnslog.cn/​

具体代码省略.
继续学习中补充.

XXE漏洞的防御

分析
1.

出现该漏洞的根本原因就是原来的代码允许外部实体注入, 那么把外部实体注入禁掉不就可以了吗?

微信支付里介绍的xxe漏洞和修复
​​​pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5​

  1. 对于标签和符号进行过滤,不允许输入这些东西.
    例如:
1. 单引号'
2. 双一号 ""
3. 两个单引号 ''
4. 大于 >
5. 小于 <
6. ]]>
7. ]]>>
8. <!--/-->
9. /-->
10. -->
11. <!--
12. <!
13. <![CDATA[/]]>

&nbsp;

  1. 自己写太麻烦
    可以用waf 更加的方便.