0x01 漏洞复现
直接访问
/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp
会显示日志页面
如果将%u002e%u002e/%u002e%u002e换成../..或者%2e%2e /%2e%2e都会跳转到登录页面
0x02 漏洞分析
根据GitHub的对比发现主要修改的地方有两处,第一处是web.xml中,将setup/index.jsp,setup/setup-*,移除
第二处是AuthCheckFilter中对路径进行url解码,解码之后再判断有没有..
在opefire中引入的http组件是netty,而netty又支持unicode uri编码,也就可以将%u002e转化为.。
当请求
/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp
时,会进入
org.jivesoftware.admin.AuthCheckFilter#doFilter
中进行鉴权,而且在netty中也能进行解析
进入dofilter之后先登录路径:上下文路径+/login.jsp
然后获取请求的uri:
/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp
获取到之后看是否包含plugins/,如果包含则取出后面的路径为uri
之后就是将web.xml中配置的excludes路径提取出来挨个遍历与请求的uri进行处理,处理函数为
org.jivesoftware.admin.AuthCheckFilter#testURLPassesExclude
在testURLPassesExclude中,判断请求uri是否是以setup/setup-开头的,如果是则判断请求uri中是否包含..和2e%,而且请求的uri并未进行url解码,所以这里就直接返回true
返回true之后就将doExclude设置为true,接下来就不需要在进行处理,直接进入下一个filter,从而达到绕过鉴权
Web.xml中删除setup开头的排除项
在org.jivesoftware.admin.AuthCheckFilter中先对uri进行url编码解码,然后统一判断请求uri中是否包含..
END
往期经典回顾
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,文章作者和本公众号不承担任何法律及连带责任,望周知!!! |
点赞是鼓励 在看是认同 分享是传递知识
看完点个“在看”分享给更多人
原文始发于微信公众号(杂七杂八聊安全):漏洞分析 | openfire权限绕过漏洞分析
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论