Shikata Ga Nai

Private? There is no such things.

P1 Vulnerability by Bypassing the membership payment pageを訳してみた

Hello there, ('ω')ノ

 

P1 会費支払いページのバイパスによる脆弱性を。

 

脆弱性:

 支払いバイパス

 

記事:

 https://medium.com/@mares.viktor/p1-vulnerability-by-bypassing-the-membership-payment-page-3289e09262c1

 

今回は、クライアント側でのサーバ側セキュリティの強制に関連する最新の

脆弱性の 1 つと、これが悪い理由を。

 

いつものように、ターゲットを匿名化し、ウェブサイトに

「example.com」のドメインを与え。

この Web サイトでは、「my.example.com」でユーザとして登録できるため、

最初にアカウントを登録して。


サインアップページ

 

次に、my.example.com/contact にリダイレクトされ、

ここで名と姓を送信することになっているので、先に進み、

いくつかの詳細を送信して続行して。

ここで、メンバーシップの開始と支払いを求められ。


メンバーシップの選択

 

このページをバイパスできず、支払いのためにサードパーティの

Web サイトにリダイレクトされ、対処するのが面倒だったので、

これはサイトが失望させた場所のようなもので。

それで、それをそのままにして、一時停止することにして。

 

その日の後半に、この Web サイトで何ができるかを確認することにし。

まず最初に、Burp Suite のトラフィックを確認し

Web サイトはクリックごとに非常に多くのリクエストを生成していて。

スコープをフィルター処理して、*.example.com で

生成されたリクエストのみを表示して。

興味深いことに、「api.example.com」に対して興味深いリクエストが

行われているのを見つけ。

目を引いた最初のものはこれで。


興味深いリクエスト

 

上記の PATCH リクエストは、API バックエンドに対して行われ、

顧客の詳細を入力する必要があり。

メンバーシップ ページの前のリクエストで。

しかし、もっと興味深いのは実際の反応で。


API からの応答

 

これはすぐに注意を引き。

PATCH リクエストによって、firstName、lastName、

および phoneNumer が変更されて。

 

だから疑問に思い。

 API 経由でメールを確認できるか?

 料金を支払わずにサブスクリプションを有効にすることはできるか?

 無効な社会保障番号を追加することはできるか ?

 (顧客の確認プロセスをバイパスするために?)

 

リクエストを作成し、最善を尽くして。


会員ステータスの変更リクエスト

 

サーバからの応答:

 

サーバからの正常な応答

 

次のステップとして、Web ブラウザに戻ってページを更新しますが、何も起こらず。

まだ、/membership ページで止まったままで。

次のページに強制的に移動する必要があるのではないかと思い、

gobuster でディレクトリ ブルート フォース攻撃を開始し、

/dashboard を見つけた後、ウェブサイトはまだ /membership ページに戻ってきて。

迂回するのは不可能のようで。

 

しかし、API があまりうまく実装されていないので、

他の問題もあるに違いないと思い。

「api.example.com」へのすべてのリクエストを調べ始めたところ、

非常に興味深いことがわかり。

サインアップ時に詳細を入力し、/membership ページに移動すると、

以下の API リクエストが作成されて。

 

 

「api.example.com/history/update」への PATCH リクエストがあり。

これは、登録、連絡先の詳細、会費の支払いなどのプロセス中に

どこにいたかを追跡するもので。

 

しかし、それはすぐに考えさせて。

 これは安全な実装か?   

 不要なチェックをバイパスするために実行できる追加の手順を

 ブルート フォースできるか?

 

そこで、このリクエストを Burp Suite の Repeater に送信し、

currentStep の値を変更して。

そして、この応答を受け取って。

 

 

API は基本的に、過度に冗長なエラーでシーケンス全体を提供してくれて。

しなければならなかったことは、newStep の値を BANKING_DASHBOARD に

変更することだけで。

 

 

Best regards, (^^ゞ