审计项目 | 业务逻辑漏洞审计
2023-4-12 22:32:28 Author: Ms08067安全实验室(查看原文) 阅读量:19 收藏

文章来源 | MS08067Java代码审计6期作业

本文作者:普通犬(Java代码审计6期学员)

一、黑盒寻找逻辑漏洞

由于逻辑漏洞在白盒审计的情况下比黑盒挖掘更加难发现(吃力不讨好),我们通过先黑盒渗透找到漏洞后再白盒审计分析代码。

我这里找到的漏洞是未授权访问漏洞。

先登录后台(admin/111111),登录后台查看cookie信息。


Cookie:JSESSIONID=B4EBA06858664F3FE6C1A16D5F27014D;inxedulogin_sys_user_=inxe dulogin_sys_user_1

这里我们看到"inxedulogin_sys_user_"这个cookie_key,再看后面的value值“inxedulogin_sys_user_1”。

看到这个值里面包含“sys”、"user"、"1",这类关键字初步猜测应该是跟系统权限有关系。尝试用“inxedulogin_sys_user_=inxedulogin_sys_user_1”去未登录过任何用户的浏览器加进该cookie并访问。

我原来用的火狐浏览器登录的admin用户,注入cookie我用谷歌浏览器。

注入完cookie后访问后台路径“/admin/main/”,竟成功访问到后台并显示当前账号为:“admin”。那么这里就存在未授权访问的问题。

不过有个问题是,当web应用重新启动后直接用刚刚的cookie去访问并不能成功访问到后台,这个问题在代码分析环节再看。

二、代码分析

因为未登录的情况下直接访问后台会跳转,我们要判断是否有使用到Filter或者拦截器,先查看“/admin/main”映射的Controller里面有没有对已登录用户进行判断操作。

路径:

demo_inxedu_open\src\main\java\com\inxedu\os\edu\controller\main\MainController.java

这里可看到Controller里面未对用户是否已登录做任何判断,直接就是获取当前用户权限的逻辑。所以可推测在这之前有使用到Filter或者拦截器对用户是否已登录做判断。

查看web.xml文件,未查看到跟用户相关的Filter。


查看spring拦截器,spring-mvc.xml,可看到跟后台相关的拦截器。

com.inxedu.os.common.intercepter.IntercepterAdmin类,跟进拦截器看里面写的什么内容。

类里面有一个 preHandle 方法,里面是跟登录用户有关的操作。这里只截取了一部分重要代码。

通过SingletonLoginUtils.getLoginSysUser方法获取到用户后,对用户进行判断。如果用户为空则直接跳转到登录页面。

跟进SingletonLoginUtils.getLoginSysUser方法。

跟进到 EHCacheUtil.get(userKey) 里面看怎么获取的用户。

这里通过传进来的实参 key 从cache对象里面获取到用户的,前面说到web应用重启后无法直接用cookie未授权访问是因为需要有用户登录过后会把用户对象存到cache对象里面,才能再后注入cookie:inxedulogin_sys_user_:inxedulogin_sys_user_1去未授权访问,且后面cookie值后面这个1是对应的数据库里面 sys_user表用户的id,这里还存在一个越权的问题,可通过遍历ID来登录到不同用户的后台。

通过 inxedulogin_sys_user_1获取到用户admin后,即可顺利经过过滤器。

随后访问到 MainController控制器。

造成漏洞的主要原因是,拦截器和控制器里面都使用cookie:inxedulogin_sys_user_的值去获取用户及权限(前提:用户有登录过并存储在cache对象中),该值比较固定可以被猜测及遍历方式利用获取到后台权限,未使用到JSESSIONID的随机值获取用户、权限。

如果你也想0基础开启代码审计之路

看这里👇👇👇


—  实验室旗下直播培训课程  —


和20000+位同学加入MS08067一起学习


文章来源: http://mp.weixin.qq.com/s?__biz=MzU1NjgzOTAyMg==&mid=2247508299&idx=1&sn=17ca31e26f622213adc91ee0ed2a1509&chksm=fc3c184acb4b915c28f88d233b8e18290bab18ccf712d9ff711dc2997df5b473527924145a5b#rd
如有侵权请联系:admin#unsafe.sh