AJAXリクエストをBURPを使用してインターセプトしたいと思います。以前にWebアプリケーションのテストにBURPを使用しました。ただし、これは奇妙なケースのようです。ここで何が欠けているのかわかりません。
状況は次のとおりです。
私はWebページを持っているとしましょう: http://www.example.com/forum/register.php 。
このページの[登録]フォームの他のフィールドには、emailIDテキストフィールドがあります。アプリケーションの奇妙なロジックのため、このテキストフィールドに文字を入力すると、ドロップダウンボックスが表示され、その文字に一致するすべての候補が表示されます。
例:文字「a」を入力すると、プルアップされる候補の一部は、abc @ yahoo.com、ana @ gmail.com、aka @ yahoo.comなどのようになります。
注:これは、オートコンプリートが有効になっているフィールド/フォームではなく、これらの行が疑問に思っている場合に備えて、これらの提案がプルアップされる原因となるものです。
BURPでリクエストを確認しましたが、emailIDテキストフィールドに入力された各文字に対して、疑わしいとおり、ajaxリクエストが行われています。
したがって、BURPからの要求は次の形式になります。
GET /abcd/register.php?mod=ajax&inajax=yes&infloat=register&ajaxmenu=1&action=email_verify&email=allTheCharactersIEntered HTTP/1.1
ホスト:www.example.com
今、BURPでINTERCEPTがONになっていて、上記のGETリクエストが一時停止(インターセプト)され、リクエストを変更および転送できるようになっていますが、実際にはすでに応答が受信されており、提案ボックスがすでに表示されていますブラウザとBURPの[HTTP履歴]タブでも確認できるように、それぞれの提案が入力されています。
私が達成したいことは、emailIDテキストボックスに単一の文字を入力するたびに(それはajax呼び出しが行われているときです)私の理解)、応答(提案ドロップダウンボックス)が生成される前に、入力した文字をその場で傍受して変更できるようにする必要があります。
ここで欠けているのは何ですか?上記をどのように達成しますか?上記のシナリオでは意味をなさないことを自由に質問してください。
すべてのリクエストをインターセプトしていますか、それとも単に「スコープ内」のリクエストをインターセプトしていますか? JavaScriptコードのロジックがタイムリーな応答を取得しない場合、インターセプトしていないドメインが別のドメインを試す可能性があります。
別の可能性は、タイムアウトが経過した場合にアクセスされる応答のクライアント側キャッシュがあることです。おそらくBurp Interceptがタイムアウトを引き起こしているため、アプリケーションは単にローカルストレージにアクセスしています。
アプリケーションのクライアントスクリプトを見て、これがどのように機能するかを正確に確認してください。また、Burpの完全なプロキシログを調べて、リクエストが欠落していないことを確認します。
Burpには、特定のファイルタイプ(.jpeg、.cssなど)をインターセプトしない設定があります。プロキシツールのオプションタブを見ると、スキップされたファイルタイプの1つとして.jsがあることがわかります。ページが.jsファイルからの結果を要求している場合、これは傍受されません。この画像では、特定の拡張機能をインターセプトしないためのオプションを確認できます。 https://www.pentestgeek.com/wp-content/uploads/2014/07/3-proxy-intercept-settings.png
また、この質問を確認してください: Burp SuiteはJSON応答をインターセプトしていません
あなたがしたいのは、プロキシの仕事、あなたの場合はBurp Proxyです。交通状況を確認しているだけではないことを確認してください。
リクエストが送信されるまでBurpによってリクエストが一時停止されていることが確実な場合。次に、ajax呼び出しのタイムアウトが小さいと思います。
この特定の機能(タイプされた文字ごとのajax GET要求)は、ある種のレガシーコードなのか、それとも単に古い部分を忘れたのでしょうか。アプリケーションがアップグレードされて、まだ発見されていない他の手段でこの「オートコンプリート」を処理している可能性があります。この1つのリクエストは特定の意味を持たないか、単に冗長です(つまり、それをブロックし、新しいコードがその仕事を始めます)?