学了一段时间漏洞复现,也有点手痒了,所以就有了这篇文章。

0x01 漏洞简介

该漏洞是由于在验证用户是否登录的时候采用了jwt-token验证的形式,又加上服务端生成jwt-token的时候使用了密钥硬编码,所以导致token伪造,任意用户登录。文章可能涉及一些 jwt 和 spring security 相关的知识,感兴趣的可以去学习一下。

0x02 漏洞分析

由于是未公开的漏洞,所以某些代码可能会打上码,希望理解,主要是分享一下这种类型漏洞的挖掘思路。

该系统是基于SpringBoot+MyBatis+spring security实现的,首先我们要清楚的知道,文件上传意义不是非常大了,因为springboot不能很好的支持jsp文件解析,除去极少个别的linux系统任意文件上传到任务管理反弹shell的情况,其他文件上传意义并不是特别大,当然如果大佬们有什么其他的骚姿势,也可以互相交流下。

源码down下来后,第一件事就是idea打开查看下pom.xml文件,看看引入了哪些依赖,如图

首先引起我注意的就是jjwt,因为jwt-token如果用作用户身份凭证,是有可能存在token伪造的。

看到使用了jwt了,就习惯性地 ctrl+shift+r 全局搜索 "jwt"

可以看到一些关键性的信息,jwt存储的请求头和jwt加解密使用的密钥,然后可以看到生成token的方法,这些信息是比较关键的,我们一定要留意。

因为,jwt加解密密钥如果是写死的话,那么我们就可以伪造用户登陆了,现在我们就来看看jwt-token,是如何生成的,跟进generateToken(userDetails)方法,如图

可以看到是从userDetails对象中获取到用户名设置到claims集合中,key为sub,还有将created设置为当前时间。

然后带入了generateToken(claims)方法中,我们继续跟入

可以看到使用了jjwt组件的默认工具类创建了token,分别设置了claims、过期时间、加密方式和密钥。这是jwt常用的加密方式,看到这里我们就能知道token是如何创建的了,前面说过,只要secret密钥可以知道,我们就可以伪造token了。

但是,先别激动,我们得确认是否真的就是只验证了token正确,就可以伪造用户登陆了,因为有些系统是会从数据库中查询是否存在我们传入的token的,如果数据库中不存在,那么也是无法登陆的。

这时我们就需要查看配置文件了,看看设置了哪些过滤器,关于用户身份认证的过滤器。由于该系统是使用了security作为认证和权限校验框架,所以我们就去找对应的配置类,ctrl+shift+r 全局搜索 "websecurityconfigurerAdapter",如图

因为该项目是使用的注解方式配置security配置文件的,所以我们针对性搜索就可以搜索出配置类。

上图可以看到添加了jwtAuthenticationTokenFilter()过滤器,看到 jwt 我们就应该敏感起来了,看一下该类做了哪些操作,如图

可以看到,首先先从request对象中获取this.tokenHeader请求头,该请求头为前面看到的Authorization请求头。然后判断请求头是否不为null同时以Authorization开头,之后截取Authorization之后的内容,也就是token的内容,使用的是bearer方式,只要拿着token令牌就可以访问对应的资源。

然后将获取到的token带入getUserNameFromToken(authToken)方法,解析获取到用户名。再将解析出来的用户名带入数据库查询,获取到真实用户对象,也就是包含用户的所有信息(账号密码之类的)。

最关键的就是jwtTokenUtil.validateToken(authToken, userDetails)方法,因为只有该方法为true时才算通过认证了。我们可以跟进去看一下是如何检验的。如图

可以看到,先是调用了前面一样的方法,从token中获取用户名,然后判断获取到的用户名和数据库中查询出来的用户名是否相等,并且token没有过期,就可以返回true。所以我们重点关注点就是在getUserNameFromToken方法,只要该方法没有从数据库中来校验token,那么我们就可以确定存在token伪造漏洞了,跟进去如图

继续跟进

可以看到使用了jwt工具类解析的token,并没有从数据库中查询来校验token,到这里我们就可以确认该系统存在token伪造漏洞了。

现在我们来整理一下已知的信息:该系统支持jwt-token身份认证

jwt密钥可知,硬编码了

没有从数据库中查询验证token是否真实存在

那么,就可以愉快的使用默认的密钥来构造token了,如图

最后来看一下伪造token使用前后的对比图

使用前,如图

使用后,如图

到此,漏洞也就分析完毕了,个人感觉,拿到源码审计的时候,要多留意系统有没有使用一些容易出现问题的组件,或者是一些密钥硬编码的问题,因为如果使用了硬编码的话,很可能就是一个通用漏洞哦。

0x03 修复建议

不要使用密钥硬编码,从数据库中查询验证用户token是否有效。

php 伪造登入,某系统任意用户伪造登录相关推荐

  1. 通达OA前台任意用户伪造登录漏洞复现

    0x01简介 北京通达信科科技有限公司是一支以管理软件研发.实施.服务与咨询为主营业务的高科技企业,隶属于世界500强企业中国兵器工业集团公司. 2019最值得购买的OA系统排名 通达OA采用基于WE ...

  2. 通达OA任意用户伪造登录漏洞分析与复现

    2020年04月17日, 通达OA官方在更新了一个v11版本安全补丁, 其中修复了一个任意用户伪造登录漏洞.未经授权的攻击者可以通过构造进行任意用户登录(包括admin),登录之后可进一步上传恶意文件 ...

  3. 如何远程登入Windows系统?

    远程功能是租用服务器常用的技术, 主要是经网络远程非本地的服务器作业务管理, Windows系统与Linux系统的远程方法完全不同, 请使用前留意 以下为Windows远程的方法 于租用服务器任何位置 ...

  4. 如何远程登入Linux系统?

    远程功能是租用服务器常用的技术, 主要是经网络远程非本地的服务器作业务管理, Windows系统与Linux系统的远程方法完全不同, 请使用前留意 以下为Linux远程的方法 打开远程工具网站 (ht ...

  5. Linux用户查看系统有多少用户在登录

    作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正在做什么.本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法. 1. 使用w ...

  6. 查看有多少个linux用户登录,Linux用户查看系统有多少用户在登录

    作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正在做什么.本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法. 1. 使用w ...

  7. Day212.OAuth2、微信二维码登入注册功能、用户登录信息前后端供、讲师列表前后端 -谷粒学院

    谷粒学院 OAuth2的使用场景 一.OAuth2解决什么问题 1.OAuth2提出的背景 照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源 2.图例 资源拥有者:照片拥有者 ...

  8. win7服务器未能登入,Win7提示profile服务未能登录,无法在系统中创建怎么办

    最近有Win7用户发现系统不能启动而且还提示"profile服务未能登录,无法在系统中创建更多线程"(如下图所示),只要点击又会自动关机了,那么如何解决呢此问题?下面小编分享Win ...

  9. Java Swing+Mysql电影购票系统(普通用户/管理员登录+充值购票+影院管理)

    Java Swing+Mysql电影购票系统 文章目录 数据库连接 主要页面 运行截图 文章目录 电影购票系统模拟真实购票流程,在线选座,充值购票,影院信息管理.登录用户分为:普通用户+管理员 数据库 ...

最新文章

  1. Win7 OBJECT_HEADER之TypeIndex解析
  2. C++ 程序不一定从 main 处开始执行
  3. zen3架构_全新Zen3架构,AMD发布最新Ryzen5000系列处理器
  4. 《极乐迪斯科》:醉鬼神探的深邃人生
  5. 机器学习算法与Python实践之(二)k近邻(KNN)
  6. Hybris Commerce Cloud backoffice的一些使用截图 - OAuth工作中心
  7. elasticsearch 删除满足条件的语句_ELK从入门到还未精通(二)——ElasticSearch上篇
  8. linux最常用的20条命令
  9. QPW 企业维度评分表(tf_company_dimesion)
  10. 带看板娘玩法指导的贪吃蛇小游戏源码
  11. 未来2年,会Python的人将会非常抢手
  12. JavaScript 数组拼接打印_JavaScript数组_创建数组_一维数组_length(二十三)
  13. php curl post上传图片,php curl上传图片问题
  14. 你的公司建立了企业文化了么?没有就看看这个
  15. 第五章 DirectX 光照,材质和纹理(下)
  16. HBuilderX ios打包失败(已解决)
  17. 员工工号怎么编码_人事档案编码怎么编
  18. python爬取qq音乐歌词风变编程_爬取QQ音乐歌词
  19. 亲爱的朋友,祝您天天好心情!
  20. 加拿大 oracle audio,来自加拿大的“简单”与“纯粹”——Verity Audio Otello座地式扬声器...

热门文章

  1. Mybatis中大于,小于,不等于等特殊符号的写法
  2. blender中如何导入python库
  3. lucene4.10.3入门
  4. CAD插件学习系列教程(十) 高程点注记压盖地物批量处理
  5. BeeWare 峰器 中文文档 - 教程 1 - 你的第一个应用程序
  6. wpf实现仿qq消息提示框
  7. jQuery-动画停顿循环执行
  8. 笔记本电脑能安装matlab吗,matlab安装【管理手段】
  9. 玩转Django2.0---Django笔记建站基础十一(二)
  10. Vue超实用案例1:使用setTimeout实现延迟执行代码