摘自freebuf
出处:https://www.freebuf.com/vuls/211822.html
基础知识:
1.php://filter是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;使用不同的参数可以达到不同的目的和效果:其中resource=<要过滤的数据流>,指定了要筛选过滤的数据流
2.php的data://text/plain;base64,数据流封装器,代表之后的数据为base64编码的
3.由于XXE漏洞的特殊性,在读取HTML、PHP等文件时可能会抛出此类错误parser error : StartTag: invalid element name。其原因是,PHP是基于标签的脚本语言,<?php ... ?>这个语法也与XML相符合,所以在解析XML的时候会被误认为是XML,而其中内容(比如特殊字符)又有可能和标准XML冲突,所以导致了出错。所以,为了读取包含有敏感信息的PHP等源文件,可以先将可能引发冲突的PHP代码进行base64编码,这里就会用到php://filter,例如php://filter/read=convert.base64-encode/resource=index.php代表将index.php进行base64编码后读取
漏洞发现过程:
1.发现页面存在xml调用,可能存在XXE,但是xml在前端进行了加密。
2.寻找加密的js函数,发现不可读。使用浏览器设置断点,先修改xml内容,再继续运行函数对xml加密,完成绕过。
3.构造XXE利用代码,请求远程文件时回显Error while parsing XML&#x