最近开始整java代码审计,于是找了几个通用开源的论坛审计了一下,发现这个bbs后台getshell的点有点意思就写出来了,这个漏洞我已经提交了issue并且得到了作者的回复表示会更新代码修复该漏洞。
我觉得这个漏洞挺水的,但还是想分享一下我的看到的有趣的点,各位大佬手下留情,轻点喷。
项目地址:
https://github.com/diyhi/bbs
issue:
https://github.com/diyhi/bbs/issues
调试运行所需要的相关环境以及工具:
jdk1.8,idea,tomcat9.x,mysql5.7
(1)普通用户登陆测试
以普通用户test登入到系统,并且在创建主题中选择上传文件
上传jsp文件
发现上传失败,不允许jsp文件上传
(2)以admin登入到后台
点击系统设置-基础设置-话题编辑器
点击保存并且抓包
由图中数据包可以出其中的可允许修改的后缀的字段,并且添加jsp字段
修改成功后直接test用户上传jsp后缀名的附件
发现可以上传成功
成功解析该jsp代码,并且执行命令whoami
10.png
其实第(2)步中最后修改成功的时候我刷新看了下基本设置我是懵逼的,我在想是不是没有修改成功,后来跟进去看了代码发现,修改成功之后的代码其实是存入到数据库中去的。后来尝试看了下上传果然成功了。下面我们来分析一下设置这个功能点的流程走向。
首先在设置中我们可以看到每次点击刷新该设置的时候的页面
底下的可允许的后缀名,通过跟踪代码,其接口的代码在以下文件中的edit接口的get方法
src\main\java\cms\web\action\setting\SystemSettingManageAction.java
跟进去readRichTextAllowFileUploadFormat
继续跟进richtext,从filemanage类当中发现通过读取richtext.propertise文件作为配置文件
在保存的时候,我们的代码流程走的是以下代码中的edit接口的post方法
src\main\java\cms\web\action\setting\SystemSettingManageAction.java
其中updateSystemSetting就是把传入的参数写入到配置当中
跟进updateSystemSettings
最后直接update 到数据库中
以下是该数据库存到的表
以往在尝试了修改后缀名之后往往再次刷新之后看到后缀名没有修改成功就直接放弃了,其实是很有可能已经成功了,只不过会出现像我这次的这种情况,修改完成后的配置文件其实是存到数据库中去的,而每次加载的时候都是从默认的配置文件中加载的,所以无法得到是否真正的完全修改成功的反馈,只能是再去尝试以下上传
该应用还有个上传升级包点应该也可以shell不过人家是正常的更新的功能点所以就不做详细测试了,还有其他的一些高危漏洞,因为觉得后台的洞都还蛮鸡肋的就不写上来了。
第一次写文章,java审计也才开始不久,各位大佬轻点喷