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安装与配置
安装步骤
- 下载MySQL 5.7.31(避免使用Homebrew安装)
- 首次安装后可能遇到登录问题,需安全模式启动并修改密码:
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安装与破解
常见问题解决
-
SSL连接问题:修改
dbconfig.xml中的连接URL:<url>jdbc:mysql://address=(protocol=tcp)(host=localhost)(port=3306)/jira?useUnicode=true&useSSL=false&characterEncoding=UTF8&sessionVariables=default_storage_engine=InnoDB</url> -
许可证问题:使用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流量,需:
- 修改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 - 允许访问受保护目录下的资源
- 绕过
关键代码分析
// 路径规范化逻辑
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前后有特殊字符,则拒绝访问
三、渗透测试技巧
-
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容器处理流程的重要性
- 正则表达式在安全控制中的关键作用
- 多层防御机制的必要性