目录
环境搭建:
靶场:Windows10
Openfire版本:4.7.4版本 安装地址:Openfire4.7.4
参考文章:
Administration Console authentication bypass · Advisory · igniterealtime/Openfire · GitHub
本文章只是个人学习时做的笔记,记录一下,如果有写的不好的地方可以提出来,也请谅解轻喷。
实验开始:
该漏洞影响版本:
3.10.0, 3.10.1, 3.10.2, 3.10.3, 4.0.0, 4.0.1, 4.0.2, 4.0.3, 4.0.4, 4.1.0, 4.1.1, 4.1.2, 4.1.3, 4.1.4, 4.1.5, 4.1.6, 4.2.0, 4.2.1, 4.2.2, 4.2.3, 4.2.4, 4.3.0, 4.3.1, 4.3.2, 4.4.0, 4.4.1, 4.4.2, 4.4.3, 4.4.4, 4.5.0, 4.5.1, 4.5.2, 4.5.3, 4.5.4, 4.5.5, 4.5.6, 4.6.0, 4.6.1, 4.6.2, 4.6.3, 4.6.4, 4.6.5, 4.6.6, 4.6.7, 4.7.0, 4.7.1, 4.7.2, 4.7.3, 4.7.4
漏洞分析
我们进入window10下的openfire的目录下,找到Openfire\plugins\admin\webapp\WEB-INF\web.xml文件,我们对该代码进行审计
这串代码就是openfire的鉴权机制,我们看到这红框中的最后有一个通配符,而我们可以利用这个通配符从而达到绕过openfire的鉴权机制。我们继续审计代码。
上面的图片是我通过其他博客上面截图下来的,因为我实在找不到这些源码的位置,就当作参考了。
第一张图里的代码,它会先判读是否含有setup/setup-*,如过含有就会跳到下面的判读,接下来的判断就是对用户输入的字符串进行一个过滤,如果用户输入的字符串不含有..和%2e,则返回true。看到第二个图,当返回true的话,他将会break退出,就不需要鉴权验证。
因为..和%2e被过滤了,那我们就将..进行Unicode编码,编码为%u002e,验证payload:/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp
这个payload可以用于验证是否存在鉴权绕过漏洞。既然它存在这个漏洞,我们就可以利用这个漏洞进行登录后台,我们先登录进后台,发现有一个创建用户的功能
我们先对其进行抓包
利用漏洞创建管理员用户
这是创建用户的包,那么我们可以利用创建用户的参数和漏洞进行结合创建一个拥有管理员权限的用户,用户和密码为user
payload:/setup/setup-s/%u002e%u002e/%u002e%u002e/user-create.jsp?csrf=jVgaRDMfG6j7JLE&username=user&name=&email=&password=user&passwordConfirm=user&isadmin=on&create=Create+User
注意(这里面的csrf的值要和抓包之后cookie里的csrf的值一样)
实验完成