Java代审学习——nginxWebUI
字数 933 2025-08-20 18:17:58
NginxWebUI Java代码审计学习文档
环境搭建
项目信息
- 项目地址: https://github.com/cym1102/nginxWebUI
- 分析版本: 3.7.1
Docker部署方式
Dockerfile配置如下:
FROM ubuntu
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list \
&& apt update \
&& apt -y install openjdk-11-jdk \
&& apt -y install nginx \
&& apt -y install wget \
&& apt -y install git \
&& apt -y install maven \
&& apt -y install vim
项目结构分析
- 项目结构简单清晰
- 接口路由主要在
controller包下 - 可使用MurphySec进行依赖安全扫描(注意版本较老可能存在第三方漏洞)
漏洞分析:任意文件上传
漏洞位置
- 控制器类:
controller.adminPage.MainController - 方法:
upload(Context context, UploadedFile file) - 路由映射:
/adminPage/main/upload
漏洞成因
-
文件后缀无限制:
- 未对上传文件的后缀名进行限制或过滤
- 可上传任意类型文件(包括脚本文件)
-
文件名处理不当:
- 直接将文件名与
FileUtil.getTmpDir()拼接创建新文件 - 未对文件名进行安全检查或处理
- 存在目录穿越风险
- 直接将文件名与
攻击利用场景
1. SSH公钥Getshell
攻击步骤:
- 在攻击机生成SSH密钥对:
ssh-keygen -t rsa - 将公钥(
id_rsa.pub)保存为authorized_keys - 通过目录穿越上传到目标服务器的
/root/.ssh/目录 - 使用私钥连接目标服务器:
ssh -i id_rsa root@目标IP
2. 定时任务Getshell
攻击步骤:
- 创建恶意定时任务文件
- 通过目录穿越上传到
/etc/cron.d/或类似目录 - 系统将自动执行恶意任务
防御建议
-
文件上传安全措施:
- 严格限制上传文件类型(白名单机制)
- 对上传文件名进行规范化处理
- 禁止路径穿越字符(如../)
- 将上传文件存储在非web可访问目录
-
权限控制:
- 限制上传功能的使用权限
- 使用低权限用户运行服务
-
输入验证:
- 对上传的文件名进行严格验证
- 使用安全的文件路径拼接方法
代码审计要点
-
重点关注文件操作相关功能:
- 文件上传/下载
- 文件读写操作
- 路径拼接处理
-
特别注意以下危险操作:
- 未经验证的用户输入直接用于文件操作
- 使用相对路径或包含用户输入的路径
- 系统命令执行相关功能
-
审计工具建议:
- 使用静态代码分析工具辅助审计
- 结合动态测试验证漏洞