审计项目 | 业务逻辑漏洞审计

文章来源 | 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我用谷歌浏览器。

94bca7c4d0517c3e92ead4afb7515994.png

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

434b0ce49e4f80da00786d1fa48d8bd5.png

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

二、代码分析

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

路径:

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

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

80789003aebbcca6b0b10f6d0b9399fb.png

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

9470216426e9b4b5a742aa9baa6e12d9.pngfe62d80b955322ca7cd280f4ebee7e3a.png

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

238464b838b0992b7d563fede0a98e3d.png

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

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

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

5e2f99111ddab284a95a9293ad94027d.png

跟进SingletonLoginUtils.getLoginSysUser方法。

7e009f99622ff93b05ec2f6823adad42.png43502273a08d7552b49039686609a300.png

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

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

dc6d072ef53451422bc5e8859f4f08ee.png

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

4aa959a8bdab858e4959d0d7b8998340.pngc2d3f4037c87a28c50771bfe2a706de4.png

随后访问到 MainController控制器。

da3434782e818042b6806394555de2ba.png

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

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

看这里👇👇👇

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

e9dc50ee17be429954a487617ea9aa28.jpeg

b40c3a208637424fffab00c227fd83cd.jpeg

b7ecd591ad18e25f2463e8500fc6be4f.jpeg45cefe35e04a46d6c4f375c2baa8fefa.png

0d44f0ed521d425de452d74e1b0bf142.jpeg

a1c5f65b9399f120b70595304e2e8ea7.jpeg

df1d614c9cfed5098cffa4b562834f54.jpeg

56594655df37d6ba7626f89d90eb4375.jpeg

b9f1782b7f3725f29798e5aba5539d14.jpeg


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

bc3c0e665465ce1b8d594706742373dd.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值