schoolcms--upload getshell

这个cms有点旧了,找了一下Github已经很久没有进行更新了,应该是不再维护了,看样子是使用的范围比较小,fofa搜了一下只有一点点,大大多点开看还像是单纯的测试站....找了一下,这个cms是有个文件上传的CVE编号的,相关的漏洞分析利用啥的好像没人整,那就自己来吧...

环境搭建

windows10  phpstudy
schoolCMS建站源码

搭建直接把源码丢到WWW目录下就好,这里提一下PHP配置文件中mysqli的拓展前面的注释符需要去掉,不然会报错,因为build文件中用到了拓展类中的mysqli类来进行数据库的操作

出现这个页面也就搭建成功了

漏洞分析

用默认账号登录后台,找到了两处可以上传文件的地方,一处是网站管理->主题管理,另一处是站点配置->站点设置处,可以上传网站的logo;两个地方都来看一下

网站管理->主题管理

审计代码结合功能点测试能够帮助更快定位到相关功能代码的位置
一般主题管理都是上传压缩包,功能代码应该会有一步解压缩的操作,所以制作一个压缩包,放一张正常的图片,一个PHP文件

返回的json数据进行unicode解码,编辑成功,但是主题哪里并没有多,也就不清楚到底有没有上传成功,根据上传的路径跟一下源码
Application/Admin/Controller/ThemeController.class.php#184

首先会对上传的文件进行一个校验,跟进FileUploadError方法,该方法相当于是一个表单验证,如果POST表单中存在nametype的,就继续,并且文件成功上传返回true,若不能正常上传成功会返回对应的错误信息

接着回到Upload方法中,对上传的文件类型进行校验,这里是写死的白名单,只能是数组里两种数值中的一种,因为是正常上传的压缩包所以并没有影响,接着会继续向下,看一下Upload方法后面的操作

接下去会对上传的压缩包进行解压缩,并对其中的项目名称进行校验,首先排除临时文件和临时目录,之后只有文件名中含有_Html或者_Static才会进行路径的拼接,$this->html_path$this->static_path都是类中定义好的路径

$this->html_path = 'Application'.DS.'Home'.DS.'View'.DS;
$this->static_path = 'Public'.DS.'Home'.DS;


之后再将$file中的两个字符串替换为空,截取文件路径,下面就是判断是否存在文件夹,判断文件是否是文件夹不是就进行文件的写入
所以接下来只需要对压缩包进行重新修改就可以了,还是一样的文件,文件夹的名字改成xx_Html,打成压缩包之后重新上传,成功传入,可以看到上传之后文件名会被修改为压缩文件xx+文件本来的名称

通过主题模块查看默认模板可以知道上传之后的文件所在路径为Application/Home/View,后面直接跟上拼接之后的文件名就可以访问到shell了

站点配置->站点设置

站点logo处可以进行文件上传,上传的文件会被重命名,覆盖掉原本的logo文件,也就是说只能该目录下只能有一个logo文件名的文件
上传一个正常的图片文件,Burp抓包之后获取路径,通过路径定位到上传方法的控制器
Application/Admin/Controller/SiteController.class.php#72

还是一样会先经过FileUploadError方法的处理,重点部分在断点位置,调用了explode方法对文件上传的type进行了处置,以/为分隔符,获取到值后分别赋给了$type$suffix,之后就是判断是否存在image文件夹没有就会进行创建;$filename会进行重命名,这里是重点,文件名会被重写,拼接的后缀恰巧是前面从type中获取到值的$suffix
正常的上传png图片,获取到的content-typeimage/png,经过explode处理之后,$type$suffix的值分别为imagepng,所以文件名还会是png后缀,再通过move_uploaded_file方法将上传的文件移动到指定的路径下。
利用代码逻辑这文件重命名的漏洞,上传图片之后修改content-typeimage/php,就可以获取shell了
burp请求包如下


通过前端代码可以获取到路径,文件名固定为home_logo,从代码中也可以看到,访问shell即可

写在后面

这个CMS还是比较简单的,可能就是因为比较旧了吧,本来想着ZIP拿shell还可以申请个CVE来着,去看了一下issue发现两年前已经有人提了,那就把这个审计的过程记录一下。

  • 发表于 2021-11-03 09:40:40
  • 阅读 ( 8592 )
  • 分类:漏洞分析

0 条评论

请先 登录 后评论
joker
joker

19 篇文章

站长统计