ベースリクエストに挿入するペイロードの種類を設定できます。Burp Intruderには、さまざまな種類のペイロードを自動生成するオプションがあります。あるいは、単純な単語リストも使用できます。
Intruder > ペイロードタブのペイロードセット欄で、ペイロードタイプを選択できます。
多くのペイロードオプションで、あらかじめ定義されたペイロードリストを使用できます。詳細は、定義済みペイロードリストを参照してください。
各ペイロードタイプは、ペイロードオプション欄でカスタマイズできます。多くのタイプに、次のような基本設定オプションがあります:
タイプ固有のペイロードオプションは、ペイロードタイプの説明で詳しく説明します。
ペイロードに使用する文字列の単純なリストを設定できます。
実行時にペイロード文字列を読み込むファイルを設定できます。
とても大きなペイロードリストが必要な場合、このペイロードタイプを使用すると、リスト全体をメモリに保持しなくなくなります。ファイルの各行を1つのペイロードとして読み込むので、ペイロードには改行文字を含められません。
指定したテンプレートにしたがって、文字やその他のアイテムを組み合わせてペイロードを生成できます。
テンプレートには最大8個のポジションを定義でき、各ポジションにアイテムリストを設定できます。任意のポジションの間にセパレータを使用できます。例えば、AA/11というテンプレートに対して、最初の2つのポジションがAからZまで、次の2つのポジションが0から9までを繰り返すような攻撃を設定できます。これは例えば、給与計算アプリケーションがAA/11形式の番号を使用して個人を識別する場合に有用です。
さまざまな方法でリストアイテムを編集できます:
カスタムイテレータであらかじめ設定されているものを選択するには、定義済み形式を選択ドロップダウンメニューをクリックし、形式を選択します。その後、形式は変更できます。次から選択できます:
文字列リストの各アイテムに対して、文字置換を適用できます。
パスワード推測攻撃で、辞書に載っている一般的な単語を変形させるために、文字置換を使用できます。
攻撃ではリストの各アイテムに対して、すべての文字置換ルールを順番に使用します。例えば、e > 3 と t > 7 とする置換ルールでは、"peter"は次のようなペイロードを生成します:
peter p3ter pe7er p37er pet3r p3t3r pe73r p373r
文字列リストの各アイテムに対して、大文字小文字を変更できます。
パスワード推測攻撃で、辞書に載っている一般的な単語の大文字小文字違いを生成するために使えます。
攻撃では、各アイテム内の文字を順番に変更します。重複するペイロードは破棄されます。大文字小文字変換のオプションが選択できます:
たとえば、すべての変更オプションが選択されている場合、"Peter Wiener"は次のペイロードを生成します:
Peter Wiener peter wiener PETER WIENER Peter wiener
前のリクエストに対するレスポンスからテキストを抽出し、それを次のペイロードとして使用します。
有用なデータの抽出やエクスプロイトの引き渡しを再帰的に行う必要がある場合に使用できます。たとえば、SQLインジェクションでデータベースからの情報を窃取するには、次のような形式のクエリを再帰的に挿入します:
UNION SELECT name FROM sysobjects WHERE name > 'a'
サーバのエラーメッセージから、最初のデータベースオブジェクトの名前が漏洩しています:
Syntax error converting the varchar value 'accounts' to a column of data type int.
このクエリーに次は"accounts"を使い、次のオブジェクトを見つけます。再帰的にペイロードをgrepしてデータベースの全オブジェクトを一覧化する作業を、簡単に自動化できます。
次のオプションを設定する必要があります:
再帰検索タイプのペイロードを使用する攻撃では、最大同時リクエスト数が1のリソースプールを使用する必要があります。リソースプールの詳細は、Intruderリソースプールを参照してください。
アイテムのリストに対して、指定した文字を不正なUnicodeエンコーディングの別の文字に置き換えて、ペイロードを生成します。
このペイロードタイプは、特定の文字列をブロックするように設計されたフィルタを回避しようとする場合に使用できます。たとえばファイルパストラバーサル攻撃の防御で ../ と ..\ へのマッチを想定している場合などです。
使用可能なオプションは次の通りです:
冗長なエンコーディングを使用するかどうか、および6バイトまでの最大長を設定できます。
これにより、基本的なASCII文字(0x00~0x7F)をUnicode形式で表現できます。これらの文字は本来通常は1バイトで表現されます。
不正なUTF-8継続バイト - 冗長UTF-8の最大長が2バイト以上に設定されている場合、各継続バイトに対して順番に3つのエンコーディングを生成します。
生成されたバイトシーケンスを16進数表記で表現する方法を制御します:
0x1G
は10進数の32と解釈されるかもしれません。そして、2桁の16進数コードの先頭にこの不正な16進数文字が使われると、デコードした結果1バイトの最大値をオーバフローしますが、この状況で一部の16進数デコーダは結果の最下位8ビットのみを使用します。よって、0xG1
は10進数で257にデコードされ、10進数の1と解釈されます。上記のようにデコードされた場合に同じ16進数コードとして解釈される不正な16進数表現が、2桁の正常な16進数コードそれぞれに対して、4~6個あります。不正な16進数表記オプションが選択された場合、不正なエンコードをされたアイテムのリストそれぞれについて、あり得るすべての不正な16進数表記を生成します。
16進数でエンコードされたペイロードの見た目を制御します:
これのオプションにより次が可能です:
大量の冗長エンコーディングや組み合わせの最大化が選択された場合、これらのオプションは膨大な数の不正なエンコーディングを生成する可能性があります。
リストアイテムの文字置換を制御します:
指定された文字や文字列のブロックに基づいたペイロードを生成します。
このペイロードタイプは、次のように使用できます:
次のオプションがあります:
指定した範囲内の数値ペイロードを、指定した形式で生成できます。
数値範囲について、さまざまな設定が可能です:
合計桁数が大きい数値(約12桁以上)で回す場合、攻撃テンプレート内の大きな数値を複数のペイロードマーカで分割して指定し、そこに対してより小さな桁数の数値ペイロードを生成したほうが信頼性が上がります。
これは、Burpは、数値範囲の設定とペイロードジェネレータ実行時の内部状態に倍精度浮動小数点を使用しているためです。非常に大きな数値、または非常に小さな数値を扱う場合、精度が失われる可能性があります。
数値フォーマットについても、さまざまな設定が可能です:
最小または最大サイズを強制しない場合は、すべての桁オプションを空白にします。
数値フォーマットを編集すると、最小桁数、最大桁数の数値例が表示されます。
指定した範囲内の日付ペイロードを、指定した形式で生成できます。
このペイロードタイプは、次のように使用できます:
次のオプションがあります:
E
|
Sat
|
EEEE
|
Saturday
|
d
|
7
|
dd
|
07
|
M
|
6
|
MM
|
06
|
MMM
|
Jun
|
MMMM
|
June
|
yy
|
03
|
yyyy
|
2003
|
/ . :
|
/ . :
|
指定した文字セットのすべての組み合わせで、指定した長さのペイロードを生成します。
次のオプションがあります:
ペイロード値が空の文字列を生成できます。これを使うと、ペイロードポジションを設定せずに、繰り返しベースリクエストを発行できます。
このペイロードタイプは、さまざまな攻撃に使用できます。例えば:
ペイロードを生成する数を指定するか、無限に継続するか設定できます。
入力の各文字位置の値をできます。ペイロードポジションで指定された既存の文字列を入力のベースにするか、指定した文字列でも可能です。この攻撃は、各アイテムを順番に、1文字ずつ、その文字のASCIIコードを1つ増やしていきます。
このペイロードタイプを使用して、どのパラメータ値、また値のどの部分が、アプリケーションの応答に影響があるのかをテストできます。たとえば、セッショントークンのどの部分がセッション状態を追跡しているかテストする場合に便利です。もしセッショントークン内の一部の文字を変更してもまだセッションが維持されているようであれば、その文字はセッションの追跡に使用されていない可能性があります。
入力の各ビット位置の値を変更できます。ペイロードポジションで指定された既存の文字列を入力のベースにするか、指定した文字列でも可能です。1回あたり1文字を対象として、指定された各ビットを順番に反転します。
次のオプションがあります:
たとえば、元の値が"ab"の場合、リテラル文字列として動作してすべてのビットを反転すると次のペイロードになります:
`b
cb
eb
ib
qb
Ab
!b
áb
ac
a`
af
aj
ar
aB
a"
aâ
一方、ASCII16進数文字列として"ab"を扱い、すべてのビットを反転すると次のペイロードになります:
aa
a9
af
a3
bb
8b
eb
2b
文字フロバーと似たような状況でよりきめ細かく制御する必要がある場合に、ビットフリッパーが使用できます。たとえば、意味にあるデータがCBCモードのブロック暗号で暗号化されてセッショントークンや他のパラメータ値に含まれる場合、暗号ブロック内の直前のビットを変更すると、復元されるデータの一部を体系的に変更できる可能性があります。暗号化された値の中の、個々のビットを変更した場合の影響を確認できます。
名前またはメールアドレスのリストから、さまざまな一般的な生成規則を使用して、ユーザ名の候補を生成します。
特定の個人ユーザを狙っていて、しかしアプリケーション内で使用されているユーザ名やメールアドレスの生成規則がわからない場合に、このペイロードタイプが便利です。
たとえば、"peter wiener"という名前を指定すると、最大115通りの結果になります:
peterwiener peter.wiener wienerpeter wiener.peter peter wiener peterw peter.w wpeter w.peter pwiener p.wiener wienerp wiener.p ...
リストの1アイテムごとに生成するペイロードの最大数を設定できます。
ECBで暗号化されたデータの暗号文ブロックを並び替えます。その結果、復号した際に意味のある平文になり、アプリケーションロジックが不安定になる可能性があります。
ECB暗号は、他のブロックとは関係なく平文のブロックを暗号化するため、(同じ鍵を使っていれば)同じ平文が暗号化されると同じ暗号文になり、またその逆も起こります。したがって、暗号文の大部分のブロックを並べ替えると、復号された平文のブロックも並び替えられる可能性があります。一部のデータ(ユーザ名、ユーザID、ロール、タイムスタンプのフィールドを持つ構造化されたセッショントークンなど)では、解読された際に意味のあるデータ内容になるよう変更し、アプリケーション処理を不安定にしたり、許可されていない処理を実行できる可能性があります。
次のオプションがあります:
Burp拡張を呼び出してペイロードを生成します。
ジェネレータ選択...をクリックし、ペイロードジェネレータの拡張をリストから選択します。拡張は、Intruderペイロードジェネレータとして登録する必要があります。
現在のペイロードの値を別のペイロードポジションにコピーできます。
このペイロード タイプは、さまざまな状況で便利です、例:
このペイロードタイプでは、ペイロードのリテラル値をコピーできますが、別のペイロードポジションにあるペイロードから現在のペイロードを体系的に生成もできます。それには、適切なペイロード処理ルールを定義してください。