前言
看到先知社区有位师傅审计了一个很基础的java项目,很适合刚入门的新手学习java审计,于是参考自行审计了一下并记录过程。
环境准备
-
idea
-
jdk 1.8
-
tomcat 9.0
-
mysql 5.7
-
https://github.com/Hui4401/StudentManager 项目地址
mysql导入sql数据
mysql.exe -uroot -p
create database student_manager;
use student_manager;
source C:/Users/admin/Desktop/StudentManager-masterstudent_manager.sql;
注意目录不要有空格和中文
将dao层的几个文件数据库地址配置成自己本地的
添加表示为web
配置tomcat9.0
tomcat去官网下好到本地即可,然后应用程序服务器处配置一下
启动项目
环境配置完毕,这时候就可以去审计了
漏洞审计
任意用户登录
先从index.jsp 开始看,这里在验证cookies中是否存在name的值,如果是老师就进入one_page_student,如果是学生就进入student/main.jsp
可以伪造一下存在的用户,不用登录就可以直接跳转到后台
成功实现伪造cookie绕过登录验证
cookie注入
我们跟进findWithId()函数
跟进
发现明显的存在SQL语句拼接
去验证即可,存在一个盲注,如果语句查询正确就是跳转到login.jsp,错误就是跳到one_page_student
任意用户注册
这里check_register负责处理数据,跟进去
发现他是用session来获取验证码值
继续查看用例,发现是在code.jsp中,没有去设置失效的时间,这样就可以导致验证码重复使用,造成任意用户批量注册
越权改他人头像
此处id值参数可控
就可以修改任意存在的id值,来造成越权改他人头像
将我们的id改成root用户,登录root后发现成功被越权修改了头像
删除学生处存在的sql注入
在 ScoreD.java 的第 26 行,deleteScore() 方法调用通过不可信赖的数据源输入构建的 SQL 查询。通过这种调用,攻击者能够修改语句的含义或执行任意 SQL 命令
getParameter(id)获得请求中的参数,该参数是由name指定的Java中的JSP里边有个特性直接request.getParameter("Parameter");去获取请求的数据,参数中id是通过request.getParameter直接获取。攻击者若在此处写入恶意语句,可能会造成sql注入
验证发现存在sql注入
小结
一个非常简单的java审计项目,漏洞百出,还有一些xss什么的,各位可以自行下载尝试,非常适合入门的新手学习。
参考:https://xz.aliyun.com/t/12105
免责声明:
「由于传播、利用本公众号虫洞小窝所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及作者不为此承担任何责任,一旦造成后果请自行承担!」
原文始发于微信公众号(虫洞小窝):StudentManager代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论