【代码审计】某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进行自动化检测
- 手工测试特殊字符(’ 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类型+后缀名双重校验)
-
上传文件存储到独立目录
-
重命名上传文件防止路径遍历
// 文件上传安全处理示例@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 输入验证机制
|
|
|
---|---|---|
|
|
|
|
|
|
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等漏洞挖掘文章,后期有些源码、挖掘思路等也会放进圈子哈~
有任何问题可后台留言
往期精选
围观
丨更多
热文
丨更多
·end·
—如果喜欢,快分享给你的朋友们吧—
我们一起愉快的玩耍吧
【免责声明】
“Rot5pider安全团队”作为专注于信息安全技术研究的自媒体平台,致力于传播网络安全领域的前沿知识与防御技术。本平台所载文章、工具及案例均用于合法合规的技术研讨与安全防护演练,严禁任何形式的非法入侵、数据窃取等危害网络安全的行为。所有技术文档仅代表作者研究过程中的技术观察,不构成实际操作建议,更不作为任何法律行为的背书。