web源码 学籍管理系统-Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘

大家好,我的朋友,我是Power7089,星耀网络安全创始人。

今天给大家带来【石炼项目@Java代码审计】agloluxu星友(他的哔哩哔哩账号:鬼谷黑客)的学习笔记,分享给大家,共同学习进步。

【石头计划@Java代码审计】是一个不断成长的知识星球,系统学习Java代码审计从入门到提升。 在这里我们不仅注重打好基础,更注重进阶实战。 强烈建议加入我们,在实践中改进Java代码审计。

温馨提醒,星球数量即将突破1000颗,价格将上涨,赶快扫码加入吧!

输入文字

1.环境准备1.1、版本信息

项目地址:

Jdk版本:jdk1.8.0_131

数据库版本:mysql5.7

想法版本:idea2021.2

中间件版本:apache-tomcat8.5.82

以上所有软件都需要下载并安装。 安装和破解方法这里就不记录了,百度一下就知道了。 其中我使用的是phpmystudy自带的mysql,使用起来比较方便。

1.2. 1.2.1. 项目部署数据库环境部署

下载完项目后,解压压缩包,将解压后的【StudentManager-master】文件夹放置在tomcat网站根目录下(ps:其实任何目录都可以,只是为了标准化才放在这里) 。

创建数据库和表

打开phpstudy并运行mysql。

[windows+r] 打开cmd窗口。 登录mysql

mysql -uroot -p

创建一个名为[student_manager]的数据库:

因为我已经创建过了,所以会提示【数据库存在】

create database student_manager;

检查数据库是否创建成功:

show databases;

将【student_manager.sql】中的sql语句复制粘贴到mysql窗口中执行。 注释掉的部分不需要复制。 任何内容都不应被注释掉。

进入【student_manager】数据库,查看数据库中所有表是否已创建:

use student_manager;
show tables;

至此,数据库环境就部署完成了。

1.2.2. 修改数据库配置文件

位置[src]-[dao]。 修改该目录下三个文件中的数据库连接代码,将mysql连接用户和密码修改为你本地的mysql数据库账户密码。 请记住,所有三个文件的代码都必须更改。

1.2.3. 想法配置tomcat

打开idea,左上角【文件】-【打开】

打开【StudentManager-master】项目

打开项目配置:

重要的是,这是用于配置项目部署的输出目录。 如果没有配置,则会输出到名为[out]的文件夹中。 但项目运行时,会读取[WEB-INF]-[classes]中的文件。 这会导致我们更改的配置文件不生效。 我在这里卡了很久:数据库配置文件都改了,但是系统一直无法登录,错误是数据库连接失败(密码错误)。 经过查阅各种渠道的信息后,我才了解到这个问题。

配置tomcat

点击左上角【+】,选择【tomcat服务器】-【本地】

必须存在以下配置:

选择项目启动入口:

项目条目位于 web 目录中的index.jsp 中。 所以直接选择[web]目录。

1.2.4. 启动项目

点击Idea右上角的项目启动按钮

浏览器访问链接(注意添加自己配置的自定义目录,我这里是[web],所以访问是::8081/web/,配置方法是[idea配置tomcat]-[选择项目启动入口])(提到),看到项目相关界面,说明部署成功。 后续登录测试没有问题。 默认账户密码:zzu zzu

2. 审核流程 2.1. 审核思路

没有web.xml文件,直接看index.jsp。 因为一般index.jsp是程序的入口文件。 然后全局搜索一些关键词,审计前10个漏洞,最后按功能点审计,查找并填补空白web源码 学籍管理系统,主要是审计逻辑漏洞。 关键词方法和功能点也可以互换使用,没有固定的方法,只要思路清晰即可。

2.2. 审计结果 2.2.1。 Cookie绕过登录验证漏洞

下面是index.jsp中获取和处理cookie的代码。 遍历前端cookie后,当cookie的名称有该名称时,就会获取该名称的值,并调用teacherD类的findWithId()函数。 请看下面的功能分析。 根据该函数的返回值,即教师的结果,判断是否跳转到one_page_student目录(教师登录成功后才能跳转的目录)。

TeacherD类的findWithId()函数分析:将用户传递给该函数后,执行查询语句。 如果查询结果为真,则返回茶。 Tea返回到index.jsp,是老师。

也就是说,如果我们在cookie中构造name:xxx,那么只要系统中存在用户xxx,我们就可以直接访问index和teacher可以访问的所有功能,而无需登录。

经常性:

1.添加cookies

2.访问index.jsp

3、如下图,直接跳转到后台界面。 后来,当我分析登录站点的login.jsp的代码时,我意识到cookie中的名称是用来保留登录信息的。

2.2.2、sql注入漏洞

这个项目的sql语句基本都是拼接的,没有任何过滤。 多个sql注入漏洞。 包括登录功能,还有一个通用密码可以绕过登录。

全局搜索关键字:select

这里以登录时的通用密码为例,顺便分享一下我审核登录功能的过程:

找到登录功能的前端代码文件:[login.jsp](通过全局搜索login找到,或者搜索user和password关键字,没有用户名和密码怎么能登录,对吧)。 然后看登录表单提交到哪里了,emm,提交到[check_login]。

那么下一步就是查看[check_login]。 也可以全局搜索或者使用idea快捷键【ctrl+鼠标左键单击文件名或函数名】输入对应的文件内容。

找到[check_login]servlet后,往下看,使用字符变量[user]和[password]接收用户名和密码,然后传入[teacherD]对象的[checkAccount]函数。

跟进【checkAccount】函数,诺诺,用户和密码直接拼接,sql注入正常完成。 从数据库中查看用户查询和密码查询,而不是单独写。 而是使用[and]组合查询,然后检查[sql]执行结果是否为true。 如果为 true,则将 [rs] 传递给 [getTeacher],并返回值。 传递给【tea】,则表示登录成功。 它只是判断sql执行结果是否为true,然后判断登录是否成功,对吧? 然后只需在登录框中的用户名中使用通用密码即可绕过密码判断。

经常性:

访问登录界面,用户名:zzu'或'1'='1

随便输入密码吧,反正不是正确的密码(zzu)

点击【登录】即可进入后台。

2.2.3、暴力破解漏洞

登录时无验证码机制,无登录失败锁定策略,存在暴力破解漏洞。 还是看上面2.2.2中的登录sql语句。 判断语句执行是否返回true,就会返回。 不涉及验证码,也没有密码多次输入错误会锁定账户的代码。 绝对能够破解密码。

再现性:太简单了。 大家都是来学习代码审计的。 难道不能重现暴力攻击吗? 自己用burp和Hydra试试吧,我很懒。

2.2.4. 用户名和密码明文传输

这个主要看登录函数的参数传递过程,没有加密解密,也没有编码解码。 直接拿[用户]和[密码]明文执行[sql]。 这也算是Web渗透测试中的一个低危漏洞,所以在这里做一下记录。

经常性:

使用burp捕获登录数据包,可以看到post数据中的[user]和[password]参数的值都是明文。 以明文形式传输敏感数据存在安全风险。

登录后面的审核就是看前端发来的其他参数。 审核后返回2.2.1,绕过登录漏洞。 详见2.2.1。

2.2.5。 任意用户注册

对注册用户的审核模仿了登录的想法。 这里有趣的是,注册函数执行的sql语句是预编译的,因此不存在sql注入漏洞。 但注册并没有过滤传入的参数,可能存在xss。 另一个想法是利用二次注入漏洞修改任意用户密码。 另外web源码 学籍管理系统,这里重要的一点是,注册时需要填写邮箱地址,但没有验证邮箱地址是否有效。 这导致有可能使用同一电子邮件地址注册许多用户,从而导致任意用户注册。

重现:可以参考下面2.2.6注册验证码绕过截图。 可以使用同一电子邮件地址注册多个用户。

2.2.6、注册表验证码绕过

注册功能的验证码即使被破坏也不会被破坏,存在验证码绕过,导致重放攻击。

经常性:

在注册页面输入正确的验证码和用户信息进行注册。

Burp截获注册函数的数据包,放入repeater模块中。

发送包裹,然后修改用户名,然后发送包裹(验证码没有修改),发现响应是一样的。 是302跳转到[one_page_student],说明注册成功。 因此,这里的验证码只要截获的数据包没有被释放,并且存在重放攻击,就可以使用。 而且我们在没有修改邮箱地址的情况下多次发送包裹,却注册成功,验证了2.2.5中任意用户注册的漏洞。

2.2.7. 任何密码修改

您可以直接更改任意密码,无需验证旧密码。 也可以更改任何用户的密码。

加入我们

欢迎来到【石炼项目@Java代码审计】

与千余位明星好友合卷Java代码审计

点击下方链接了解星球原创核心内容

外部交流群

微信加好友 Power_7089

注意:Java代理审核外部组,稍等片刻,您将被添加到该组中。

学习材料

后台回复以下关键词即可获取相应学习资料!

【PHP代审录屏】往期PHP代码审计直播课【0531】往期PHP代码审计直播课关注回复关键字 "weblogic漏洞复现",可获取本视频中的全部课件(内含工具脚本,课程文档PDF,练习环境等)关注回复关键字 "安全书籍",可获取7.8G网络安全书籍。关注回复关键字 "JavaWeb代码审计",可获取50套中已更新的JavaWeb系统代码审计实战文章。(进行ing)关注回复关键字 "前八套环境",实时获取最新JavaWeb练习环境。(进行ing)关注回复关键字 "炼石计划",加入知识星球学习JavaWeb代码审计【完整版】课程。(进行ing)关于炼石计划,获取完整版学习课程。可点击下方链接了解。