某oa java代码审计1
字数 1146 2025-08-10 08:28:40

某OA系统Java代码审计教学文档

一、前言

本文档基于某OA系统的Java代码审计实战案例,详细分析了两处安全漏洞:前台任意文件读取和后台getshell漏洞。通过本案例学习,可以掌握基本的Java Web应用代码审计方法和漏洞利用技巧。

二、环境搭建

1. 系统安装

  • 从官网下载OA系统安装包
  • 默认安装过程会自动安装Tomcat、Java和MySQL
  • 安装完成后目录结构包含web目录(oa目录)

2. 开发环境配置

  • 使用IntelliJ IDEA作为开发工具
  • 将WEB-INF/classes和lib目录添加为项目库
  • 配置完成后即可开始代码审计

三、漏洞分析与利用

1. 前台任意文件读取漏洞

漏洞位置

public/getfile.jsp文件

漏洞分析

  1. 参数处理逻辑:

    • 首先检查user参数是否为空,为空则检查用户登录状态
    • 接受三个参数:filenameextnameprop
  2. 路径拼接逻辑:

    • 检查prop参数是否等于"activex"
    • 如果等于,则构造路径:web路径 + activex + filename + extname
    • 如果不等于,则使用系统默认配置路径
  3. 漏洞成因:

    • filenameextname参数未做安全过滤
    • 可通过路径遍历(../)访问系统任意文件

漏洞利用

  1. 基础利用:
GET /oa/public/getfile.jsp?user=1&prop=activex&filename=../public/getfile&extname=jsp HTTP/1.1
Host: 192.168.222.129:8088
  1. 读取MySQL数据库文件:
http://192.168.222.129:8088/oa/public/getfile.jsp?user=1&prop=activex&filename=../../mysql5.1.46/data/ibdata1&extname=
  1. 提取密码:
    • 使用UTF-8编码打开下载的文件
    • 使用正则表达式搜索管理员密码:
      admin([a-f\d]{32}|[A-F\d]{32})
      

2. 后台getshell漏洞

前提条件

  • 已通过前台漏洞获取管理员密码
  • 成功登录后台系统

漏洞位置

网盘文件上传功能

漏洞分析

  1. 正常上传流程:

    • 上传文件到upfile\file_netdisk\admin\目录
    • 可通过重命名功能修改文件后缀
  2. 漏洞成因:

    • 文件上传后未做内容检查和后缀限制
    • 重命名功能可任意修改文件后缀为可执行后缀(如.jsp)

漏洞利用

  1. 上传webshell文件
  2. 通过重命名功能将文件后缀改为.jsp
  3. 访问上传的webshell:
    upfile\file_netdisk\admin\1z.jsp
    

四、修复建议

1. 任意文件读取漏洞修复

  1. filename参数进行严格过滤,禁止路径遍历字符(../)
  2. 限制文件读取范围为指定目录
  3. extname参数进行白名单验证

2. 后台getshell漏洞修复

  1. 对上传文件内容进行安全检查
  2. 实现文件后缀白名单机制
  3. 禁止通过重命名功能修改文件后缀
  4. 将上传目录设置为不可执行

五、总结

本案例展示了从代码审计到漏洞利用的完整过程:

  1. 通过关键词搜索定位潜在漏洞点
  2. 分析参数处理逻辑和安全缺陷
  3. 构造有效攻击载荷
  4. 利用漏洞获取系统权限

关键学习点:

  • 文件操作相关的安全风险
  • 未过滤用户输入的危害
  • 权限控制不严的后果
  • 从代码审计到实际渗透的完整链条
某OA系统Java代码审计教学文档 一、前言 本文档基于某OA系统的Java代码审计实战案例,详细分析了两处安全漏洞:前台任意文件读取和后台getshell漏洞。通过本案例学习,可以掌握基本的Java Web应用代码审计方法和漏洞利用技巧。 二、环境搭建 1. 系统安装 从官网下载OA系统安装包 默认安装过程会自动安装Tomcat、Java和MySQL 安装完成后目录结构包含web目录(oa目录) 2. 开发环境配置 使用IntelliJ IDEA作为开发工具 将WEB-INF/classes和lib目录添加为项目库 配置完成后即可开始代码审计 三、漏洞分析与利用 1. 前台任意文件读取漏洞 漏洞位置 public/getfile.jsp 文件 漏洞分析 参数处理逻辑: 首先检查 user 参数是否为空,为空则检查用户登录状态 接受三个参数: filename 、 extname 和 prop 路径拼接逻辑: 检查 prop 参数是否等于"activex" 如果等于,则构造路径: web路径 + activex + filename + extname 如果不等于,则使用系统默认配置路径 漏洞成因: filename 和 extname 参数未做安全过滤 可通过路径遍历( ../ )访问系统任意文件 漏洞利用 基础利用: 读取MySQL数据库文件: 提取密码: 使用UTF-8编码打开下载的文件 使用正则表达式搜索管理员密码: 2. 后台getshell漏洞 前提条件 已通过前台漏洞获取管理员密码 成功登录后台系统 漏洞位置 网盘文件上传功能 漏洞分析 正常上传流程: 上传文件到 upfile\file_netdisk\admin\ 目录 可通过重命名功能修改文件后缀 漏洞成因: 文件上传后未做内容检查和后缀限制 重命名功能可任意修改文件后缀为可执行后缀(如.jsp) 漏洞利用 上传webshell文件 通过重命名功能将文件后缀改为.jsp 访问上传的webshell: 四、修复建议 1. 任意文件读取漏洞修复 对 filename 参数进行严格过滤,禁止路径遍历字符( ../ ) 限制文件读取范围为指定目录 对 extname 参数进行白名单验证 2. 后台getshell漏洞修复 对上传文件内容进行安全检查 实现文件后缀白名单机制 禁止通过重命名功能修改文件后缀 将上传目录设置为不可执行 五、总结 本案例展示了从代码审计到漏洞利用的完整过程: 通过关键词搜索定位潜在漏洞点 分析参数处理逻辑和安全缺陷 构造有效攻击载荷 利用漏洞获取系统权限 关键学习点: 文件操作相关的安全风险 未过滤用户输入的危害 权限控制不严的后果 从代码审计到实际渗透的完整链条