jira环境搭建及受限文件读取原理和深思CVE-2021-26086
字数 1829 2025-08-29 08:31:35

Jira环境搭建及CVE-2021-26086受限文件读取漏洞分析

一、Jira环境搭建指南

1. 安装准备

  • 系统要求:本文基于Mac系统,但步骤适用于多平台
  • 软件版本
    • MySQL 5.7.31(推荐版本,兼容性好)
    • Jira软件(版本需支持CVE-2021-26086漏洞)

2. MySQL安装与配置

安装步骤

  1. 下载MySQL 5.7.31(避免使用Homebrew安装)
  2. 首次安装后可能遇到登录问题,需安全模式启动并修改密码:
    sudo mysqld_safe --skip-grant-tables
    mysql -u root
    UPDATE mysql.user SET authentication_string=PASSWORD('newpassword') WHERE User='root';
    FLUSH PRIVILEGES;
    

关键配置

创建/etc/my.cnf文件(Mac默认不生成):

[client]
default-character-set = utf8mb4
port = 3306
socket = /tmp/mysql.sock

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default-storage-engine=INNODB
character_set_server=utf8mb4
innodb_default_row_format=DYNAMIC
innodb_large_prefix=ON
innodb_file_format=Barracuda
innodb_log_file_size=2G
skip_ssl

数据库创建

CREATE DATABASE Jira CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER DATABASE Jira DEFAULT CHARACTER SET = utf8mb4 DEFAULT COLLATE = utf8mb4_bin;

验证字符集配置:

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

3. Jira安装与破解

常见问题解决

  1. SSL连接问题:修改dbconfig.xml中的连接URL:

    <url>jdbc:mysql://address=(protocol=tcp)(host=localhost)(port=3306)/jira?useUnicode=true&amp;useSSL=false&amp;characterEncoding=UTF8&amp;sessionVariables=default_storage_engine=InnoDB</url>
    
  2. 许可证问题:使用atlassian-agent工具生成密钥:

    java -jar atlassian-agent.jar -d -m your@email.com -n your_name -p jira -o http://127.0.0.1:8080 -s BRX3-TPH5-YVOW-XXXX
    

二、CVE-2021-26086漏洞分析

1. 漏洞概述

  • 漏洞类型:受限文件读取
  • 影响版本:Atlassian Jira特定版本
  • CVSS评分:7.5 (High)

2. 漏洞复现

POC示例

/s/xx/_/;/WEB-INF/web.xml
/s/xx/_/;/WEB-INF/decorators.xml
/s/xx/_/;/WEB-INF/classes/seraph-config.xml
/s/xx/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties

变体POC:

/s/everything/_/;anythingulike/WEB-INF/web.xml

Burp Suite配置技巧

由于Burp默认不捕获localhost流量,需:

  1. 修改Jira绑定IP为非localhost地址
  2. 在Burp中修改目标主机为实际IP

3. 漏洞原理深度分析

请求处理流程

  1. URL解析阶段

    • org.apache.catalina.core.StandardContextValve#invoke处理请求
    • 对路径中的;进行忽略处理,如/s/s3gundo/_/;anythingulike/WEB-INF/web.xml变为/s/s3gundo/_//WEB-INF/web.xml
  2. 路径规范化

    • normalize()方法处理双斜杠和特殊字符
    • 最终路径变为/WEB-INF/web.xml
  3. UrlRewriteFilter处理

    • RuleChain#process方法匹配规则
    • 关键正则:^/s/i)(?!WEB-INF)(?!META-INF).*)
      • (?i):不区分大小写
      • (?:否定前瞻,确保后面不跟WEB-INF或META-INF
  4. 请求转发

    • 绕过StandardContextValve直接转发到DefaultServlet
    • 允许访问受保护目录下的资源

关键代码分析

// 路径规范化逻辑
public static String normalize(String path, boolean replaceBackSlash) {
    if (path == null) return null;
    String normalized = path;
    if (replaceBackSlash && path.indexOf(92) >= 0) {
        normalized = path.replace('\\', '/');
    }
    // ... 其他处理逻辑
}

绕过限制机制

  • 通过;字符分割URL,使前半部分匹配规则,后半部分作为实际访问路径
  • 请求转发机制绕过常规的访问控制检查

4. 漏洞利用限制

  • 只能读取Web应用目录下的文件(WEB-INF和META-INF)
  • 无法跨目录读取系统其他文件
  • normalize()函数限制,无法使用../进行目录遍历

5. 官方修复方案

修改了路径检查的正则表达式:

Pattern PATHS_DENIED = Pattern.compile("[^a-zA-Z0-9]((?i)(WEB-INF)|(META-INF))[^a-zA-Z0-9]")

规则:如果WEB-INF或META-INF前后有特殊字符,则拒绝访问

三、渗透测试技巧

  1. WAF绕过

    • ;/中间填充随机字符串可绕过某些WAF规则
    • 示例:/s/xx/_/;xyz123/WEB-INF/web.xml
  2. 敏感文件枚举

    • WEB-INF/web.xml - 核心配置文件
    • WEB-INF/decorators.xml - 页面装饰配置
    • WEB-INF/classes/seraph-config.xml - 安全配置
    • META-INF/maven/*/pom.xml - 包含版本信息
  3. 漏洞挖掘思路

    • 关注所有URL重写和请求转发逻辑
    • 特别注意分号(;)在URL中的处理方式
    • 检查规范化函数是否可能被绕过

四、防御建议

  1. 及时更新:应用官方安全补丁
  2. 输入验证
    • 严格过滤URL中的特殊字符
    • 实现多层路径检查机制
  3. 权限控制
    • 限制DefaultServlet的访问范围
    • 对WEB-INF和META-INF目录设置额外保护
  4. 安全编码
    • 避免直接使用用户输入构造文件路径
    • 对请求转发目标进行严格校验

五、总结

CVE-2021-26086漏洞展示了Web应用中路径处理逻辑的重要性。通过精心构造的URL,攻击者可以绕过多层安全控制直接访问受保护资源。该漏洞的利用依赖于:

  1. 分号在URL中的特殊处理方式
  2. URL重写规则的不完善
  3. 请求转发机制的安全缺陷
  4. 路径规范化函数的局限性

对于安全研究人员,此案例强调了:

  • 深入理解Web容器处理流程的重要性
  • 正则表达式在安全控制中的关键作用
  • 多层防御机制的必要性
Jira环境搭建及CVE-2021-26086受限文件读取漏洞分析 一、Jira环境搭建指南 1. 安装准备 系统要求 :本文基于Mac系统,但步骤适用于多平台 软件版本 : MySQL 5.7.31(推荐版本,兼容性好) Jira软件(版本需支持CVE-2021-26086漏洞) 2. MySQL安装与配置 安装步骤 下载MySQL 5.7.31(避免使用Homebrew安装) 首次安装后可能遇到登录问题,需安全模式启动并修改密码: 关键配置 创建 /etc/my.cnf 文件(Mac默认不生成): 数据库创建 验证字符集配置: 3. Jira安装与破解 常见问题解决 SSL连接问题 :修改 dbconfig.xml 中的连接URL: 许可证问题 :使用atlassian-agent工具生成密钥: 二、CVE-2021-26086漏洞分析 1. 漏洞概述 漏洞类型 :受限文件读取 影响版本 :Atlassian Jira特定版本 CVSS评分 :7.5 (High) 2. 漏洞复现 POC示例 变体POC: Burp Suite配置技巧 由于Burp默认不捕获localhost流量,需: 修改Jira绑定IP为非localhost地址 在Burp中修改目标主机为实际IP 3. 漏洞原理深度分析 请求处理流程 URL解析阶段 : org.apache.catalina.core.StandardContextValve#invoke 处理请求 对路径中的 ; 进行忽略处理,如 /s/s3gundo/_/;anythingulike/WEB-INF/web.xml 变为 /s/s3gundo/_//WEB-INF/web.xml 路径规范化 : normalize() 方法处理双斜杠和特殊字符 最终路径变为 /WEB-INF/web.xml UrlRewriteFilter处理 : RuleChain#process 方法匹配规则 关键正则: ^/s/i)(?!WEB-INF)(?!META-INF).*) (?i) :不区分大小写 (? :否定前瞻,确保后面不跟WEB-INF或META-INF 请求转发 : 绕过 StandardContextValve 直接转发到DefaultServlet 允许访问受保护目录下的资源 关键代码分析 绕过限制机制 通过 ; 字符分割URL,使前半部分匹配规则,后半部分作为实际访问路径 请求转发机制绕过常规的访问控制检查 4. 漏洞利用限制 只能读取Web应用目录下的文件(WEB-INF和META-INF) 无法跨目录读取系统其他文件 受 normalize() 函数限制,无法使用 ../ 进行目录遍历 5. 官方修复方案 修改了路径检查的正则表达式: 规则:如果WEB-INF或META-INF前后有特殊字符,则拒绝访问 三、渗透测试技巧 WAF绕过 : 在 ;/ 中间填充随机字符串可绕过某些WAF规则 示例: /s/xx/_/;xyz123/WEB-INF/web.xml 敏感文件枚举 : WEB-INF/web.xml - 核心配置文件 WEB-INF/decorators.xml - 页面装饰配置 WEB-INF/classes/seraph-config.xml - 安全配置 META-INF/maven/* /pom.xml - 包含版本信息 漏洞挖掘思路 : 关注所有URL重写和请求转发逻辑 特别注意分号( ; )在URL中的处理方式 检查规范化函数是否可能被绕过 四、防御建议 及时更新 :应用官方安全补丁 输入验证 : 严格过滤URL中的特殊字符 实现多层路径检查机制 权限控制 : 限制DefaultServlet的访问范围 对WEB-INF和META-INF目录设置额外保护 安全编码 : 避免直接使用用户输入构造文件路径 对请求转发目标进行严格校验 五、总结 CVE-2021-26086漏洞展示了Web应用中路径处理逻辑的重要性。通过精心构造的URL,攻击者可以绕过多层安全控制直接访问受保护资源。该漏洞的利用依赖于: 分号在URL中的特殊处理方式 URL重写规则的不完善 请求转发机制的安全缺陷 路径规范化函数的局限性 对于安全研究人员,此案例强调了: 深入理解Web容器处理流程的重要性 正则表达式在安全控制中的关键作用 多层防御机制的必要性