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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2018-7747 — CalderaForms 1.5.9.1 XSS (WordPress plugin) - チュートリアル | Kitploit
ツール/GitHubGitHub/mindpr00f/cve-2018-7747
脆弱性分析ウェブアプリケーション悪用ウェブセキュリティCTFペネトレーションテスト学習と教育
GitHubmindpr00f/cve-2018-7747

CVE-2018-7747

CalderaForms 1.5.9.1 XSS (WordPress plugin) - チュートリアル

リポジトリを見る
8年前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2018-7747

CalderaForms 1.5.9.1 XSS (WordPressプラグイン) - チュートリアル


CalderaFormは、ドラッグ&ドロップで簡単にフォームを作成できるWordPressプラグインです。 最近の活動でいくつかのポータルをテストする機会があり、そのうちの1つはまさにこのプラグインで作成されたお問い合わせフォームをホストしていました。 対象インスタンスのカスタム設定により、脆弱性を発見することができました。その性質はシンプルで入門書的なものであるため、初心者にいくつかのメカニズムを説明する良い口実になると思います。

教育目的専用 - 明示的な許可なく対象をテストするため、または違法な目的でこれらの情報を使用しないでください - 消化中に冷水に飛び込まないでください - 暑いときは玉ねぎのように重ね着をしてください

完全なエクスプロイト:
https://www.exploit-db.com/exploits/44489/
CVE:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7747


設定

分析対象の設定では、フォームはユーザーに感謝のメッセージを返し、入力された名前で呼びかけるように設定されていました。

テスト環境を再現するには、ローカルにWordPressインスタンスをインストールし、CalderaFormsバージョン1.5.9.1をインストールします(こちらまたはこちらから入手可能)。

インストール後、WordPress管理コンソール > 左側の列 > 「Caldera Forms」 > 上部ボタン > 「New Form」 > Contact Formを選択し、名前を変更して「Create Form」をクリック

alt text

作成後、設定を変更できます:上部ボタン > 「Form Settings」 > Success Messageを変更し、ユーザーが入力したデータの1つを含めるようにします。ボックスをクリックすると、ヒントのドロップダウンが表示されます。
%first_name%を追加

alt text

上部ボタン > 「Save Form」

フォームをページに挿入するには:左側の列 > 「Pages」 > 「Sample Page」 > 「Edit」 > 「Caldera Form」 > 先ほど作成したフォームを選択 > 「Insert Form」 > 右側の列 > 「Update」

alt text

完了。


偵察とベクターの特定

分割統治のパラダイムに従い、このタイプの攻撃を構築するために必要な手順を一つずつ見ていきましょう。

テスト段階では、コンポーネントと対話する際、与えた刺激に基づく反応に常に注意を払う必要があります。特に、入力したデータの「経路」とそれらが受ける変換に焦点を当てます。

私たちのケースの具体的な例は次のとおりです:

  1. フォームを含むページにアクセス:http://127.0.0.1/wordpress/sample-page/

  2. フォームに次のデータを入力します
    "First Name": myName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

  3. データはプラグインのロジックに従って処理されます

  4. 受け取った感謝メッセージには、First Nameフィールドに入力した文字列が含まれています
    "Thank you myName, form has been successfully submitted."

alt text

「First Name」フィールドに入力した文字列が感謝メッセージに返されます。
具体的には、その文字列はHTMLのdivタグ内に含まれています。
私たちの入力はページのHTMLに含まれます。
考慮事項:「良い感じだ。接触点がある。」

一歩進みましょう。「処理」フェーズ(手順2)で入力はどのように扱われるのでしょうか?具体的には、使用できる文字(およびその組み合わせ)に制限はあるのでしょうか? もちろん目標は「何か」を注入できるようにすることです。インジェクションを試みる際は、入力がどこにたどり着くかを念頭に置き、適切な「言語」を使う必要があります。

入力はSQLインタプリタで処理される?その言語を話す必要がある
入力はPHPスクリプトで処理される?その言語を話す必要がある
入力はHTMLページにたどり着く?……

したがって、HTMLに典型的な文字や構文を使用できるかどうか、特にこの言語がJavaScriptコードを含む/解釈する能力があるため、「着地ゾーン」である先ほどのdivタグにコードを挿入する戦略を見つけられるかどうかを理解することが重要です。

これを行うために、「First Name」フィールドに単純なHTMLタグを入力し、それが「サニタイズ」(sanitized)されるかどうか、つまり無害/解釈不能に変更されるか、それともそのまま返されるかを確認します。この目的のために、テキストに改行を挿入するタグ<br>を使用します。

以前の番号付けに従って:

  1. フォームに次のデータを入力します
    "First Name": m<br>yName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

  2. 感謝メッセージには、変更されていないHTMLタグが含まれており、それが正しく解釈され、メッセージの途中に改行が挿入されます

root@kitploit:~
"Thank you m  
yName, form has been successfully submitted."

alt text

考慮事項:「良い感じだ。小なりと大なりの記号を使用でき、サニタイズされずに解釈されるHTMLタグを挿入できる。」

一歩前進。フォーマットタグをより有用なもの、例えばページ内にJavaScriptコードを挿入して実行できる<script>タグに置き換えます。

  1. フォームに次のデータを入力します
    "First Name": m<script>alert(1);</script>yName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

  2. 感謝メッセージには、変更されていないHTMLタグが含まれており、正しく解釈され、alertボックスが表示されます

alt text

考慮事項1:「良い感じだ。ユーザーのブラウザのコンテキストで任意のJavaScriptコードを実行できる。」
考慮事項2:「良くない。JavaScriptを実行するユーザーは自分自身である。」


保存と呼び出し

状況は次のとおりです:自分たちが管理していないサイトを介して、ユーザーのブラウザのコンテキストでJavaScriptを実行できますが、現時点では、そのユーザーはフォームに値を入力した本人です。これはまったく役に立ちません。
アイデアは次のとおりです:実行したいコードを含む感謝メッセージを呼び出す方法はあるでしょうか?

最初の「偵察」サブミット(または最初の手順を再実行)に戻りましょう。

ネットワークトラフィックまたはページのソースを分析すると、フォームがhttp://127.0.0.1/wordpress/cf-api/CF5ad9b3176c0f4(最後の部分は異なる場合があるため、以下のすべての例で適宜変更)へのPOSTリクエストを実行していることがわかります。つまり、アドレスhttp://<target>/cf-api/<form-id>へのPOSTです。
このリクエストの応答は、感謝メッセージを含むいくつかのデータを含むJSONであり、次の構造を持っています:

root@kitploit:~
{
      "data":
          {"cf_id":"48"},
      "html":"<div class=\" alert alert-success\">Thank you myName, form has been successfully submitted.<\/div>",
      "type":"complete",
      "form_id":"CF5ad9b3176c0f4",
      "form_name":"MyContactForm",
      "status":"complete"
}

この情報は取っておきます。すぐに戻ります。特に"form_id"と"cf_id"フィールドに注目してください。

POSTが実行されるアドレスには何があるのでしょうか?あまり推測せずに、GETを実行した場合、つまりhttp://127.0.0.1/wordpress/cf-api/CF5ad9b3176c0f4 のページにアクセスした場合、そこにあるのはまさに問題のフォームのHTMLです。

  1. フォームに次のデータを入力します
    "First Name": myRedirectedName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

そして、サブミットから生じるネットワークトラフィックを確認します

alt text

今回は、ロケーション/wordpress/cf-api/CF5ad9b3176c0f4/?cf_su=1&cf_id=49へのHTTP 302コード(リダイレクト)を受け取り、そのページには感謝メッセージのdivタグを含むHTMLがそのまま返されます。

このアドレスの形式に注目:

http://<target>/cf-api/<form-id>/?cf_su=1&cf_id=<cf-id>

ここで、<form-id>と<cf-id>の値は、先ほど分析したJSONに含まれているもので、それぞれ"form_id"と"cf_id"です。

最初の質問に答えましたか?はい。感謝メッセージの内容を呼び出す方法を見つけました。
考慮事項:「良い感じだ。必要に応じて、データを含むメッセージを呼び出すことができる。」


組み立てる

これまでに収集したすべての情報をまとめ、攻撃を仕立てましょう。
1)ターゲットに悪意のあるコードを保存する
2)そのコードを取得するために必要なデータを収集する
3)攻撃を「トリガー」するための適切なURLを構築する

  1. フォーム(どちらのページでも構いません)に次のデータを入力します
    "First Name": m<script>document.body.innerHTML=String.fromCodePoint(128046);</script>yName
    "Last Name": myLast
    "Email Address": my@e.mail
    "Comments": myComm

  2. 生成されたトラフィックの分析(sample-pageページの場合は受信したJSONを読み取るか、フォームのみのページの場合はリダイレクトを読み取る)により、form_idとcf_idの識別子を取得します

root@kitploit:~
{  
      "data":  
          {"cf_id":"69"},  
      "html":"...",  
      "type":"...",  
      "form_id":"CF5ad9b3176c0f4",  
      "form_name":"...",  
      "status":"..."  
}
  1. 攻撃を実行するためのURLを構築して使用します

http://127.0.0.1/wordpress/cf-api/CF5ad9b3176c0f4/?cf_su=1&cf_id=69

alt text


いくつかの考慮事項:

  • 最後に訪問したページのコンテンツ(より一般的には動作)は、私たちが制御していることに注意してください。想像力を働かせてください
  • 私たちのJavaScriptコードによってページが変更されるのは、ユーザーのブラウザ内で発生するという事実を考慮してください:XSSはクライアントサイド攻撃として定義されます
  • スクリプトを呼び出す方法を見つける必要があったのはなぜですか?
    XSS攻撃の背後にある考え方は、被害者のブラウザのコンテキストでコードを実行することです。最初のテストでは、JSコードを実行しましたが、それは揮発性の方法で、かつ自分自身のブラウザのコンテキスト内でした。
  • なぜ牛が使われたのですか?かわいいからです
  • GETリクエストのパラメータ「cf_id」は、フォームに入力されたデータセットの(連番の)識別子です。したがって、その値を減らすことで、「時間をさかのぼって」、他の人が以前に送信した情報を取得できます。もし木星が天蝎宮にあり、金星が土星に対抗しておらず、フォームが感謝メッセージにユーザーのメールアドレスも含むように設定されている場合、過去の訪問者のアドレスを取得できる可能性があります。

読者には、関心があれば、以下を提案します:

  • 攻撃を繰り返し、被害者が「MUCCA」という文字列を含むアラートを表示するように適切なバッファを構築してください
  • 前の演習を、'(アポストロフィ、シングルクォート)、"(引用符、ダブルクォート)、またはイタリア語キーボードレイアウトにない`(グレイヴアクセント、バックティック、バッククォート)の文字を使用せずに繰り返してください
  • 自分のポータル上でフォームを含むページのアドレスを指定して、次の操作を実行するスクリプトを任意の言語で開発してください:
    • フォームの入力と送信
    • 入力したフィールドのいずれかが返されるか確認
    • 該当フィールド内に悪意のあるバッファを構築して送信
    • 攻撃を呼び出すページのアドレスを返す
  • 最初に設定したフォームの設定(感謝メッセージの変更)を変更し、前の手順のスクリプトを再テストしてください
ツールをダウンロード