Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

admin 2022年11月22日13:03:03代码审计评论14 views4154字阅读13分50秒阅读模式

嗨,朋友你好,我是闪石星曜CyberSecurity创始人Power7089。


今天为大家带来【炼石计划@Java代码审计】agloruxu星友的学习笔记(他的哔哩哔哩号:鬼谷黑客),分享给大家一起学习进步


【炼石计划@Java代码审计】是一个系统化从入门到提升学习Java代码审计的成长型知识星球。这里不仅注重夯实基础,更加专注实战进阶。强烈推荐加入我们,一起来实战提升Java代码审计。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

温馨提示,星球人数即将破千,价格将会上调,火速扫描加入!



进入正文


1、 环境准备

1.1、版本信息

项目地址:https://github.com/Hui4401/StudentManager

Jdk版本:jdk1.8.0_131

数据库版本:mysql5.7

Idea版本:idea2021.2

中间件版本:apache-tomcat8.5.82

以上软件均需要下载和安装好,安装及破解方法此处不做记录,百度一下就知道了。其中mysql我使用的是phpmystudy自带的,用起来方便。

1.2、项目部署

1.2.1、数据库环境部署

将项目下载后,将压缩包解压,把解压后的【StudentManager-master】文件夹放到tomcat网站根目录中(ps:其实任何目录均可,但为了规范放到这里)。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

创建数据库、表

打开phpstudy,将mysql运行起来。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

【windows+r】打开cmd窗口。登录mysql

mysql -uroot -p

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

创建一个名为【student_manager】的数据库:

因为我已经创建过了,所以会提示【database exists】

create database student_manager;

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

查看数据库是否已经创建成功:

show databases;

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

将【student_manager.sql】里面的sql语句复制粘贴到mysql的窗口中去执行。其中注释掉的部分可以不复制。没注释掉的一点也不能少。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

进入【student_manager】数据库,查看该数据库中的表是否都创建完成:

use student_manager;
show tables;

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

至此数据库环境便部署完成。

1.2.2、修改数据库配置文件

定位【src】-【dao】。将该目录下的三个文件里面数据库连接的代码进行修改,将mysql连接用户和密码修改成自己本地mysql的数据库账号密码。记住,三个文件的代码都要改。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

1.2.3、idea配置tomcat

打开idea,左上角【file】-【open】

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

打开【StudentManager-master】项目

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

打开项目配置:

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

很重要,这是配置项目部署的输出目录。如果不配置,会输出到一个叫做【out】的文件夹下。但是项目跑起来,读取的是【WEB-INF】-【classes】里面的文件。这就会导致我们改的配置文件不生效,我在这里踩坑了很久:数据库配置文件都改了,但是系统一直登录不上,报错是数据库连接失败(密码错误)。后来多方查阅资料才知道这个问题。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

配置tomcat

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

点击左上角【+】,选择【tomcat server】-【local】

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

下图配置一定都要有:

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

选择项目启动入口:

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

该项目入口在web目录的index.jsp里面。所以直接选【web】目录。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

1.2.4、启动项目

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

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

浏览器访问链接(注意要加上自己配置的自定义目录。我这里是【web】,所以访问的是:http://localhost:8081/web/。配置方式在【idea配置tomcat】-【选择项目启动入口】有提到),看到项目相关界面,说明部署成功。后面测试登录均无问题。默认账号密码:zzu zzu

2、 审计过程

2.1、审计思路

没有web.xml文件,所以直接看index.jsp。因为一般index.jsp是程序的入口文件。然后全局搜一些关键字,审计一下top10漏洞,最后再按功能点去审计,查漏补缺,主要审计逻辑类漏洞。关键字法和功能点也可以交叉使用,法无定法,只要思路清晰即可。

2.2、审计结果

2.2.1、cookie绕过登录验证漏洞

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

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

teacherD类的findWithId()函数分析:user被传到该函数之后,执行了查询语句,查询结果为真的话就返回tea,tea返回到index.jsp里面就是teacher。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

也就是说,如果在cookie里面构造一下name:xxx,只要系统存在xxx这个用户,我们就能不用登录,直接访问index及teacher可访问的所有功能。

复现:

1.添加cookie

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

2.访问index.jsp

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

3.如下图,直接跳转到了后台界面。后来分析登录处login.jsp的代码时才知道,cookie里面的name是用于保持登录用的。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

2.2.2 、sql注入漏洞

这个项目sql语句基本全是拼接的,也没有过滤器。多处sql注入漏洞。包括登录功能,还存在万能密码绕过登录。

全局搜关键字:select

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

这里以登录处的万能密码为例,顺便分享一下我审计登录功能的过程:

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

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

那接下来就是看【check_login】咯,一样全局搜或者用idea的快捷键【ctrl+鼠标左键单点文件名或函数名】也能进入相应文件内容。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

找到【check_login】的servlet之后,往下看,将用户名和密码用字符型变量【user】和【password】接收,然后传入了【teacherD】对象的【checkAccount】函数。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

跟进【checkAccount】函数,诺诺诺,user和password直接拼接的,妥妥sql注入。再看从数据库中查询用户和查询密码没有分开写,而是用【and】组合查询,然后看【sql】执行结果是否为真,为真就把【rs】传入【getTeacher】,返回值再传给【tea】,这意味着登录成功了。只判断sql执行结果是否为真就判断是否登录成功是吧,那不就只要在登录框的用户名用万能密码就能绕过密码判断了吗。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

复现:

访问登录界面,用户名用:zzu’ or ‘1’=’1

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

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

点击【登录】,就进后台了。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

2.2.3、暴力破解漏洞

登录处没有验证码机制,没有登录失败锁定策略,存在暴力破解漏洞。还是看上文2.2.2的登录sql语句。判断语句执行是否返回为真就返回,并没有验证码介入,也没有密码输错几次就锁定账户的代码。铁定可爆破密码。

复现:太简单了,大家都来学代码审计了,复现个暴力破解还不会吗。拿burp和hydra自己试试吧,我偷懒一下。

2.2.4、用户名密码明文传输

这个主要看登录功能传参过程中,没有加密解密,也没有编码和解码。直接拿着【user】和【password】明文去执行【sql】的。这在web渗透测试里面也算一个低危漏洞,这里做个记录。

复现:

用burp抓取登录数据包,看post数据中的【user】和【password】参数的值都是明文的。存在敏感数据明文传输安全风险。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

登录后面的审计就是看前端传来的其他参数,审着审着就回到2.2.1的绕过登录漏洞啦,详情见2.2.1。

2.2.5、任意用户注册

注册用户的审计模仿登录处的思路。这里有意思的是,注册功能执行的sql语句采用了预编译,所以不存在sql注入漏洞。但是注册对传入的参数并没有做过滤,可能存在xss。还有一个思路是利用二次注入漏洞,修改任意用户密码。另外这里的重点是,注册要填写邮箱,但是没有验证邮箱是否有效。这就导致可以用同一个邮箱注册很多用户,造成任意用户注册。

复现:可以参考下文2.2.6注册验证码绕过的截图。同一个邮箱可以注册多个用户的。

2.2.6、注册处验证码绕过

注册功能的验证码没有即使销毁,存在验证码绕过,导致可重放攻击。

复现:

注册页面,输入正确的验证码和要注册的用户信息。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

Burp拦截注册功能的数据包,放到repeater模块。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

发包,然后修改一下用户名,再发包(验证码没有修改),发现响应都一样。是302跳转到【one_page_student】,代表注册成功。所以这里的验证码只要被拦截的那个数据包不放掉就可以一直用,存在重放攻击。而且我们多次发包是没有修改邮箱的,但是都注册成功了,验证了2.2.5任意用户注册的漏洞。

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

2.2.7、任意密码修改

没验证旧密码,可以直接修改任意密码。也许还能修改任意用户的密码。


加入我们

欢迎加入【炼石计划@Java代码审计】

与千余星友共卷Java代码审计

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

【炼石计划@Java代码审计】知识星球马上一千人了,即将涨价!129一年真心超值!

Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

外部交流群

微信添加好友Power_7089

备注Java代审外部群,稍等片刻,拉你进群。



学习资料

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

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




原文始发于微信公众号(闪石星曜CyberSecurity):Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月22日13:03:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Java代码审计实战 || 某开源JavaWeb学生管理系统漏洞挖掘,漏洞有趣丰富。 http://cn-sec.com/archives/1422841.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: