记一次传统javaweb项目审计
caigo 漏洞分析 130浏览 · 2025-03-03 03:37

环境搭建

下载地址:https://gitee.com/huang-yk/student-manage/repository/archive/master.zip

源码下载到本地后,IDEA打开等待maven加载

修改数据库配置文件

src/druid.properties

image.png
图片加载失败


创建对应数据库

image.png
图片加载失败


然后由于项目的传统javaweb项目,不能直接tomcat配置启动,会有点麻烦

打开项目结构

image.png
图片加载失败


先添加模块,配置web,指向对应web.xml文件

image.png
图片加载失败


然后配置tomcat,添加库,指向本地tomcat/lib

image.png
图片加载失败


最后配置工件

image.png
图片加载失败


然后保存,配置tomcat启动

image.png
图片加载失败


这里路径要注意下,因为代码中路由是写死的

image.png
图片加载失败


image.png
图片加载失败


如果启动的时候出现缺少依赖的情况,自己从maven搜索对应依赖下载到本地添加为库就行

管理员账号:admin/123

代码审计

鉴权绕过

看下这套系统的鉴权逻辑,这套系统的鉴权是写在filter

image.png
图片加载失败


一共两个,一个是校验管理员的,一个是校验普通用户的,我们先来看管理员的

image.png
图片加载失败


这里的逻辑是获取我们登录账号的UserType,判断值是否为1

image.png
图片加载失败


那么这里管理员接口不能未授权,我们只能尝试普通用户能否提权,也就是能否把usertype修改为1

全局搜索usertype,看下有没有可控的sql语句

image.png
图片加载失败


image.png
图片加载失败


添加用户的功能点,关注user_type

image.png
图片加载失败


默认写死了,那这里就没办法了

看下另一个后台鉴权

image.png
图片加载失败


重点关注下面这个不需要登入

看下这个静态资源是啥

image.png
图片加载失败
这里看着好像逻辑没问题,但是这里使用的是uri.lastIndexOf("/") 和 uri.lastIndexOf(".") 提取页面名称和后缀名,在tomcat中会对;进行特殊处理,例如:

在这个例子中,;jsessionid=12345 是一个路径参数,Tomcat 会将其解析为附加信息,而实际的资源路径是 /resource

Tomcat 等中间件在解析 URL 时,默认会忽略分号及其后面的内容

后端采用HttpServletRequest.getRequestURI() 获取请求的 URI

中间件会将 ;.png 忽略,不会将其传递给后端

也就是说传到后端的内容如下

这里会照成中间件和后端解析不一致

这里动调下看着会清楚点

image.png
图片加载失败


找个后端非管理员功能点测下

image.png
图片加载失败


获取教师信息的功能点

image.png
图片加载失败


多处SQL注入

先判断数据库使用技术,项目额外依赖中未发现其它数据库技术,判断为JDBC,全局搜索append或者+

image.png
图片加载失败


不少直接拼接的地方,随便点几个看看

image.png
图片加载失败


注释是获取学生信息的功能,看上级调用

image.png
图片加载失败


image.png
图片加载失败


get接收参数query,路由是/admin/adminStudentUrl,构造测试下

image.png
图片加载失败


sqlmap启动

image.png
图片加载失败


除了这处还有几处,这里就不演示了

XSS

这种系统基本是XSS重灾区,随便插几个

学生管理

image.png
图片加载失败
image.png
图片加载失败


image.png
图片加载失败


课程管理

image.png
图片加载失败


image.png
图片加载失败


CSRF

在代码中未发现CSRF防护,大概率存在

找个功能点测下

image.png
图片加载失败


抓包,生成poc

image.png
图片加载失败


模拟管理员触发

image.png
图片加载失败


image.png
图片加载失败


成功添加,可配置前面的xss打组合拳

0 条评论
某人
表情
可输入 255

没有评论