java-sec-code-master搭建&审计
字数 2176 2025-09-04 23:22:12
Java-sec-code-master搭建与安全审计指南
一、环境搭建
1. 所需工具
- 开发工具:IDEA
- 构建工具:apache-maven-3.9.1
- 服务器:apache-tomcat-9.0.105
- Java环境:JDK 1.8
- 数据库:MySQL 5.7.26
2. 数据库配置
- 使用phpstudy自带的MySQL
- 导入项目中的
create_db.sql文件 - 修改
create_db.sql文件中的数据库连接信息(用户名和密码) - 创建数据库并导入SQL文件
3. 项目配置
- 在IDEA中配置JDK 1.8的bin目录
- 配置Tomcat服务器(从官网下载并解压)
- 使用IDEA自带的Maven或自行安装
4. 项目启动
- 执行
mvn clean install命令 - 运行
Application.java主类 - 启动成功后,后续可直接通过Tomcat启动
二、安全漏洞审计
1. 命令注入漏洞
漏洞位置
src/main/java/org/joychou/controller/CommandInject.java
漏洞方法
-
/codeinject端点:- 直接拼接
filepath参数到命令中 - 攻击payload:
localhost:9000/codeinject?filepath=.%26ipconfig
- 直接拼接
-
/codeinject/host端点:- 从HTTP头中获取
host并直接执行 - 攻击方式:修改请求头
host: localhost&ipconfig
- 从HTTP头中获取
安全方法
/codeinject/sec端点:
- 使用
SecurityUtil.cmdFilter过滤输入 - 过滤规则:
^[a-zA-Z0-9 /\\.-]+$(只允许字母、数字、空格、斜杠、点和横线)
2. RCE漏洞
漏洞位置
src/main/java/org/joychou/controller/Rce.java
漏洞方法
/runtime/exec端点:
- 直接使用
Runtime.getRuntime().exec(cmd)执行用户输入 - 无任何过滤措施
3. SQL注入漏洞
漏洞位置
src/main/java/org/joychou/controller/SQLI.java
漏洞方法
-
jdbc_sqli_vul方法:- 直接拼接用户输入的
username到SQL语句中 - 攻击payload:
1' or '1
- 直接拼接用户输入的
-
mybatisVuln01/02/03方法:- MyBatis框架下的SQL注入漏洞
安全方法
-
jdbc_sqli_sec方法:- 使用预编译语句防止SQL注入
-
mybatisSec01/02/03方法:- MyBatis框架下的安全写法
-
mybatisOrderBySec04方法:- 处理排序字段时的安全写法
4. SSTI(服务器模板注入)
漏洞位置
src/main/java/org/joychou/controller/SSTI.java
漏洞特征
- 直接使用用户输入作为模板内容
- 可能导致任意代码执行
5. 路径遍历漏洞
漏洞位置
src/main/java/org/joychou/controller/PathTraversal.java
漏洞特征
- 未对文件路径进行规范化处理
- 可能通过
../等方式访问系统敏感文件
6. 文件上传漏洞
漏洞位置
src/main/java/org/joychou/controller/FileUpload.java
漏洞特征
- 未对文件类型、内容进行充分验证
- 可能导致恶意文件上传
7. XSS漏洞
漏洞位置
src/main/java/org/joychou/controller/XSS.java
漏洞特征
- 未对用户输入进行HTML编码
- 可能导致脚本注入
三、安全防护建议
-
命令执行防护:
- 使用白名单限制可执行命令
- 对用户输入进行严格过滤
- 避免直接拼接用户输入到命令中
-
SQL注入防护:
- 使用预编译语句(PreparedStatement)
- 使用ORM框架的安全查询方式
- 对输入参数进行类型检查和长度限制
-
文件操作防护:
- 规范化文件路径
- 限制文件访问范围
- 检查文件类型和内容
-
XSS防护:
- 对所有动态输出进行HTML编码
- 使用CSP(Content Security Policy)策略
- 设置HttpOnly标志的cookie
-
输入验证:
- 实施严格的输入验证策略
- 使用正则表达式限制输入格式
- 对特殊字符进行转义或过滤
四、审计技巧
-
查找危险API:
Runtime.exec()ProcessBuilderStatement.executeQuery()- 直接文件操作相关API
-
关注用户输入流向:
- 从请求参数到危险API的调用链
- 未经验证的用户输入使用
-
检查安全配置:
- 框架的安全配置是否正确
- 是否启用了安全防护机制
- 错误处理是否泄露敏感信息
-
使用工具辅助:
- 静态代码分析工具(如FindBugs、SonarQube)
- 动态扫描工具(如Burp Suite、OWASP ZAP)
- 专用Java审计工具
通过本项目的审计实践,可以深入了解Java Web应用中常见的安全漏洞及其防护方法,提高代码安全意识和安全开发能力。