BossCMS是一款基于自主研发PHP框架+MySQL架构的内容管理系统,能够满足各类网站开发建设的需求。系统开源、安全、稳定、简洁、易开发、专注为中小型企业及政企单位、个人站长、广大开发者、建站公司提供一套简单好用的网站内容管理系统解决方案。官网提供了大量的网站模板,可以让您不需要任何的专业技术就能轻松搭建您的网站,易操作、易上手、快捷方便的后台操作让您10分钟就会建立自己的网站。
工具 | 版本 |
---|---|
mysql | V5.7.26 |
php | V5.6.9 |
seay源代码审计系统 | V2.1 |
phpstorm | V2021.3 |
phpstudy_pro | V8.1.1.3 |
打开cms目录后我们先去简单阅读一下BOSScms的README.md,看看设计者的对于自己的介绍,搜 集点信息看看注意事项,作者也是很nice都录制了视频。
这里打开cms目录后会有几个我们需要关注的目录,首先是admin目录这里可能就是后台功能目录,install目录是安装cms的功能目录配置数据库文件、初始化cms功能等,upload目录为上传文件存储目录。
我们直接进入根目录下的index.php,看看会有什么发现,这里定义了四个常量和一个利用文件包含 system目录下的enter文件,我们跟进去看看enter文件。
这里enter文件设置了一下请求头内容、时区、一些常量,在最后继续进行文件包含into.class.php 文件,调用into文件中的load()方法,我们继续跟进。
这里self了一下,我们看看self方法的定义,就是调用本类中的静态方法和属性,也可以访问父类的。这里就是返回一下调用本类下的load_class()方法,那我们继续跟进一下。
这里该load_class()方法需要四个参数,我们先来进去第一个if逻辑判断一下$type类型因为初始赋值 为null,直接进入判断if逻辑,这里涉及前后台功能调用,如果是IS_INSIDE是true进入system/admin目录功能,如果是fales进入system/web目录功能。
这里简单的思考了一下,为什么会做到前后台功能分开调用呢,看了一下代码发现,在admin/index.php存在常量IS_INSIDE为true,如果是admin/index.php下的load下的类就会存在该常量,自然做到了前后功能分离,感觉这样设计思维真的很巧妙~
$func先检查一下是否在包含的类里面,也就是$part里面就利用回调函数call_user_func()实现。
也就是我们路由分析下来就是需要传入的值为?mold=&part=&func,而通过分析我们发现mold值为system目录的下级目录,而part为功能目录下的实现文件,而func值为该实现文件的方法。通过输入admin验证一下猜想,基本符合。
在登录后台的时候通过查看添加用户功能,看能不能挖掘sql注入漏洞,结果发现了个大问题,一个比较好玩的权限逻辑问题。这里添加用户的路由
http://192.168.18.132/bosscms/admin/?mold=manager&part=manager&func=add
我们跟进到manager.class.php里面的add()方法,这里先into::basc_class('admin'),应该是load一个名字admin的类我们跟进去看看。
这里bassic_class()方法需要两个值,两个值$name和一个$func,$func初始值为null,在代码中给他复制一个固定值init,感觉像是初始化之类的,问题不大,跟进去。
在admin.class.php里面的,init()方法,我以为是初始化类的,结果是个判断权限,就是判断获取到session,如果是不存在的seesion就是空的,然后进入if逻辑,利用header进行跳转会登录页面。
可能大家还没发现问题,这里没有做终止,它在做完跳转后动作后,继续进入add()方法进行添加用户。这里一个巧妙的帽子戏法导致了整个信息系统后台功能点存在未授权漏洞。
我们利用登录后的添加用户poc,然后随便改个cookie来进行验证,显示保存成功,看来我们分析的没有错,我们进行登录看看是否成功。
这里就要回归我们怎么getshell在后台功能中有个安全设置可以修改上传后缀,然后找个上传点上传祖产大宝贝即可~