这个CMS写的感觉很渣,官网服务器放在阿里云,估计作者又抱着连阿里云都防不住那就没办法的心态。
这次发现的是一个无需登陆即可getshell的漏洞
从入口文件找应用层目录
在/application/下看到了admin模块
控制器里面有个Upload.php文件
其中问题代码在114行到264行,由于篇幅过长,我在这里截取其中重要的一部分代码
首先,整个文件没有对访问者的身份进行判断,也就是无需登陆
我们来看标记的第一处和第二处
这里会获取一个file_path,也就是上传路径,如果不存在则创建该路径的文件夹,下面紧跟着就是获取文件,参数名为file_upload
再来看标记的第三处和地四处
在中间的过程中并没有对文件后缀进行校验,第三处直接将文件命名,后缀保持不变,第四处就直接从服务器Temp中复制到指定目录了
再来看第五处
在文件上传成功之后,会用getimagesize()这个函数去获取图片信息,否则会强制改掉文件后缀,并报错提醒
所以我们需要构造一个表单,请求路径根据入口文件和模块路径得出index.php?s=/admin/upload/uploadfile,请求方式为POST,构造一个表单,文件参数名为file_upload,路径参数名为file_path
上传的是时候要使用图片马,后缀直接改为.php
返回路径upload\/common\/1520581783.php,用菜刀连接
成功getshell