学习存货(2)
CVE-2018-11784简单分析之反推的魅力
看着挺有趣的,简单分析下:
通过搜索tomcat漏洞找到:
修改了这两个文件,我们看java文件即可,xml文件先不看:
因为跟url跳转相关,直接搜索redirect/direct等关键字:
关键问题在这里
说实话这样黑盒找修复代码,还是有点费劲的,毕竟看的是修复代码,没有漏洞代码做参照
通过网上前人的脚印找到github漏洞修复对比:
这样看太清晰了,其中问题代码是左边的代码块:
右边是加了一行这个:
// Avoid protocol relative redirects while (location.length() > 1 && location.charAt(1) == '/') { location.deleteCharAt(0); }
修复这个问题代码的版本如下:
github项目:tomcat>9.0.12都修复了,tomcat9.0.12之前都没做处理
跟进相关修复文件:
复制粘贴出来这一段到我的本地测试:
这是修复后的,直接去除掉修复的代码:
运行查看:
访问:http://localhost:8070//test
跳转到了test
漏洞原因就是因为:
sendRedirect方法支持http/https外,还有//
运行下:
访问路由地址,跳转到百度:
这里的代码没对//做处理,导致变量走sendRedirect的时候,直接url跳转了:
简单跟下sendRedirect方法:
再往下跟进函数
修复方案就是去除掉两次/
所以官方的修复方案就是这样:
循环判断,如果这里的while改成if,那么会存在安全问题hhhh
再次访问:http://localhost:8070//test/
已经不能重定向了
输入//,只会输出一个
这样可控点再走sendRedirect方法,就不能url跳转了.
这种反推对漏洞挖掘来说还是很有意思的