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

漏洞成因

  1. 文件后缀无限制

    • 未对上传文件的后缀名进行限制或过滤
    • 可上传任意类型文件(包括脚本文件)
  2. 文件名处理不当

    • 直接将文件名与FileUtil.getTmpDir()拼接创建新文件
    • 未对文件名进行安全检查或处理
    • 存在目录穿越风险

攻击利用场景

1. SSH公钥Getshell

攻击步骤

  1. 在攻击机生成SSH密钥对:
    ssh-keygen -t rsa
    
  2. 将公钥(id_rsa.pub)保存为authorized_keys
  3. 通过目录穿越上传到目标服务器的/root/.ssh/目录
  4. 使用私钥连接目标服务器:
    ssh -i id_rsa root@目标IP
    

2. 定时任务Getshell

攻击步骤

  1. 创建恶意定时任务文件
  2. 通过目录穿越上传到/etc/cron.d/或类似目录
  3. 系统将自动执行恶意任务

防御建议

  1. 文件上传安全措施:

    • 严格限制上传文件类型(白名单机制)
    • 对上传文件名进行规范化处理
    • 禁止路径穿越字符(如../)
    • 将上传文件存储在非web可访问目录
  2. 权限控制:

    • 限制上传功能的使用权限
    • 使用低权限用户运行服务
  3. 输入验证:

    • 对上传的文件名进行严格验证
    • 使用安全的文件路径拼接方法

代码审计要点

  1. 重点关注文件操作相关功能:

    • 文件上传/下载
    • 文件读写操作
    • 路径拼接处理
  2. 特别注意以下危险操作:

    • 未经验证的用户输入直接用于文件操作
    • 使用相对路径或包含用户输入的路径
    • 系统命令执行相关功能
  3. 审计工具建议:

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