Burp Proxyでリクエストをインターセプトする場合やBurp Repeaterにリクエストを送信する場合に、InspectorはHTTP/2ヘッダや疑似ヘッダを、実際のリクエストに近い形で扱えます。
各ヘッダと疑似ヘッダは、リクエストヘッダにそれぞれの項目があり、名前と値のフィールドに分かれています。実際のバイナリは表示していませんが、これはサーバに送信される内容を正確に表しています。次のビデオデモンストレーションで、その様子が確認できます:
この表現方法はHTTP/1から完全に切り離されているため、悪意のあるリクエストを構築する際に、HTTP/1構文の制限に縛られることはありません。これにより、一部の高度な、HTTP/2特有の攻撃が行えます。
たとえば、次のことが可能です:
ヘッダ名にコロンを入れる。
メソッドやパス内に任意のスペースや改行を入れる。
ヘッダ名や値の任意の位置に改行を挿入する。
これらの変更のほとんどは、メインのInspectorビューでヘッダの名前や値をダブルクリックするだけで行えます。
仕様書によると、このような種類のインジェクションは、サーバによってリクエストが拒否されるはずですが、一部のサーバはこのようなインジェクションを許容しています。現在のところ、この動作を利用できるツールはBurpだけです。
これらの変更を適用するとメッセージエディタでは、HTTP/1の構文では情報を失わずにリクエストを正確に表現できなくなります。この場合、ケトルなリクエストとみなされます。
HTTP/2のヘッダや値に改行を入れるには、Inspectorのエントリの右側にあるマークをクリックして、ヘッダを掘り下げます。この画面で、名前または値のフィールドを選択し、Shift+Return
キーを押すと\r\n
というシーケンスを入力できます。