【代码审计】某JAVA酒店管理系统多个漏洞(附源码)

【代码审计】某JAVA酒店管理系统多个漏洞(附源码)

原创 WL Rot5pider安全团队 2025-05-06 07:31

点击上方蓝字  关注安全知识

欢迎加 
技术交流群
 ,随意聊,禁
发广告、政治 赌毒
等,嘿嘿

群已满200,请添加:
The_movement 备注:
进群

酒店管理系统代码安全审计

一、项目概况

1.1 技术栈

  • 开发语言:Java

  • 框架:Spring Boot

  • 数据库:MySQL 5.7/8.0

  • 构建工具:Maven

1.2 环境搭建

# 基础环境准备java -version # 需要JDK1.8+mvn -v        # Maven环境检测mysql --version # 支持5.7或8.0版本# 项目部署流程1. 新建数据库并执行sql.sql脚本(注意设置utf8mb4字符集)2. IDEA导入项目后修改application.yml中的数据库配置3. 执行mvn clean package完成打包

二、安全漏洞分析

2.1 任意文件读取漏洞(高危)

影响范围
:controller/FileController
漏洞原理
:未对文件路径参数进行校验,导致目录穿越攻击 controller/FileController 控制器存在任意文件读取漏洞 代码位置:controller/FileController ,传参fileName,获取程序根目录(调试出来的路径),拼接/upload目录,在拼接传入的fileName文件名;先创建一个1.txt文件如下

攻击向量

GET /file?fileName=../../../../etc/passwd HTTP/1.1Host: target.com

修复建议

// 使用PathMatcher进行安全校验public ResponseEntity<?> readFile(@RequestParam String fileName) {    Path path = Paths.get("upload").resolve(fileName);    if (!Files.exists(path) || !path.startsWith(Paths.get("upload"))) {        return ResponseEntity.badRequest().build();    }    // 文件读取逻辑...}

2.2 多处SQL注入漏洞(高危)

影响范围
:NewsController/YonghuController
漏洞成因
:原始代码直接拼接SQL查询条件

// 原始危险代码示例String sql = "SELECT * FROM news WHERE title = '" + title + "'";

controller/NewsController 控制器存在SQL注入漏洞 代码位置:controller/NewsController,对传入参数无任何限制,MPUtil.sort()和MPUtil.between()触发SQL注入


查看MPUtil.sort()和MPUtil.between()函数,无任何过滤器进行限制

检测方法

1. 使用SqlMap进行自动化检测

  1. 手工测试特殊字符(’ OR 1=1–)

3.构造poc
全局搜索“MPUtil.sort(”字符串
经过测试,用到该方法的功能均存在SQL注入 代码位置: controller/YonghuController

安全编码规范

// 使用JPA Criteria API构建安全查询CriteriaBuilder cb = entityManager.getCriteriaBuilder();CriteriaQuery<News> cq = cb.createQuery(News.class);Root<News> root = cq.from(News.class);cq.where(cb.equal(root.get("title"), title));List<News> results = entityManager.createQuery(cq).getResultList();

2.3 文件上传漏洞(中危)鸡肋

漏洞原理
controller/FileController 控制器存在任意文件上传漏洞 代码位置:controller/FileController,对上传的文件名和文件内容无任何限制,但是该项目没有解析JSP的依赖,无法利用


POC


题外话: Spring Boot 中解析 JSP 文件需要添加相应的依赖和配置,如下: 在 pom.xml 中,你需要添加以下依赖:

    <!-- Spring Boot Starter Web -->    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <!-- JSP解析支持 -->    <dependency>        <groupId>org.apache.tomcat.embed</groupId>        <artifactId>tomcat-embed-jasper</artifactId>    </dependency>    <!-- JSP编译器 -->    <dependency>        <groupId>org.apache.jasper</groupId>        <artifactId>jasper</artifactId>    </dependency></dependencies>

防护建议

1. 严格限制上传文件类型(MIME类型+后缀名双重校验)

  1. 上传文件存储到独立目录

  2. 重命名上传文件防止路径遍历

// 文件上传安全处理示例@PostMapping("/upload")public String handleFileUpload(@RequestParam("file") MultipartFile file) {    // 校验文件类型    if (!file.getContentType().startsWith("image/")) {        thrownew InvalidFileTypeException();    }    // 生成唯一文件名    String filename = UUID.randomUUID().toString() + getFileExtension(file.getOriginalFilename());    // 存储到安全目录    Path uploadDir = Paths.get("uploads");    Files.copy(file.getInputStream(), uploadDir.resolve(filename));    return"redirect:/";}

三、安全加固方案

3.1 输入验证机制

输入类型
验证规则
异常处理
文件名
白名单正则匹配 ^[a-zA-Z0-9_-.]+$
返回400 Bad Request
查询参数
参数长度限制(<=50字符)
记录安全日志

3.2 安全配置基线

# application-security.ymlspring:  servlet:    multipart:      max-file-size: 10MB      max-request-size: 10MB  datasource:    hikari:      connection-test-query: SELECT 1

3.3 日志监控体系

// 关键操作日志记录@Aspect@Componentpublicclass SecurityLoggingAspect {    privatefinal Logger logger = LoggerFactory.getLogger(getClass());    @Pointcut("execution(* com.example.controller.*.*(..))")    public void controllerMethods() {}    @AfterReturning(pointcut = "controllerMethods()", returning = "result")    public void logAfter(JoinPoint joinPoint, Object result) {        logger.info("Method {} executed with result {}",                     joinPoint.getSignature(), result);    }}

四、代码下载地址

公众号回复【20250506

【限时
6
折!华普安全研究星球:以
原创实战
为主+SRC/内网渗透核心资源库,助你在漏洞挖掘、SRC挖掘少走90%弯路】当90%的网络安全学习者还在重复刷题、泡论坛找零散资料时,华普安全研究星球已构建起完整的「攻防实战知识生态」:

✅ 原创深度技术文档(独家SRC漏洞报告/代码审计报告)

✅ 实战中使用到的工具分享

✅ 全年更新SRC挖掘、代码审计报告(含最新0day验证思路)

✅ 漏洞挖掘思维导图

✅内部知识库(
含审计出的0day、1day),进入圈子免费进入


实战为王
】不同于传统课程的纸上谈兵!!

图片
图片
图片
图片
图片

图片

后期我们将持续发布原创代码审计、src等漏洞挖掘文章,后期有些源码、挖掘思路等也会放进圈子哈~

有任何问题可后台留言

往期精选

围观

PHP代码审计学习

丨更多

热文

浅谈应急响应

丨更多

·end·

—如果喜欢,快分享给你的朋友们吧—

我们一起愉快的玩耍吧

【免责声明】

“Rot5pider安全团队”作为专注于信息安全技术研究的自媒体平台,致力于传播网络安全领域的前沿知识与防御技术。本平台所载文章、工具及案例均用于合法合规的技术研讨与安全防护演练,严禁任何形式的非法入侵、数据窃取等危害网络安全的行为。所有技术文档仅代表作者研究过程中的技术观察,不构成实际操作建议,更不作为任何法律行为的背书。