sWebMachineGun.exeの動作モード

# sWebMachineGun.exeの動作モード

## リクエストの例

以下のリクエストを例とする。

### リクエストタブで、送信メッセージを準備する

画面は、「Request」タブで、送信するリクエストのテンプレートを準備する

1発目は、「/input.cgi」へ送るリクエスト

![webMmode001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/c401f083-45a9-6f80-02ff-9c799f26bba1.png)

2発目は、「/confirm.cgi」へ送るリクエスト

![webMmode002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/f61ef849-44d3-4750-057a-bab60c4caa15.png)

3発目は、「/complete.cgi」へ送るリクエスト

![webMmode003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/8dd5ccb3-8b4e-eacb-142d-b6df6e4e7ca9.png)

この「1→2→3」「/input.cgi→/confirm.cgi→/complete.cgi」を "セッション" と呼ぶことにする。

とりあえず、"セッション" を生かすには、セレクトボックスが「全て使用」になっている事が重要。

### 変数置換対象ページ

これは、変数置換を行うリクエスト番号をしているもの。

上記のサンプルでは、「1(/confirm.cgi)」となっている。

「Setting」タブで設定する事ができる

![webMmode004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/4b7363bf-b878-20db-c9ce-0e2f9fdc4a1d.png)

### 判定対象ページ

これは、XSSなどの判定を行うレスポンスをどれにするのかを対応するリクエストの番号指定するもの

上記のサンプルでは、「2(/complete.cgi)」となっている。

「Judge/RegEx」タブで設定する事ができる

![webMmode005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/7c4ae9eb-2526-d4b4-b8fe-53bf4c7a6661.png)

### 変数置換対象ページと判定対象ページ

「変数置換対象ページ」と「判定対象ページ」は上記のように個別に設定できるが、同じ値の場合(XSSの反射型など)は、「Target」ボタンで設定することもできる。

また「AutoTarget」チェックボックスは、表示されているリクエストが自動的に「変数置換対象ページ」と「判定対象ページ」になる。表示を切り替えると自動的に追随する。

![webMmode001a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/f007f235-d21e-6207-24a5-7fb929dc5b5e.png)

## 単純繰り返し(1次元)

上記を踏まえて、"セッション" を指定した回数分だけ繰り返す

この図は「1回だけ繰り返す」ということになっている

![webMmode006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/109aec93-68e3-09f2-5871-23de46899595.png)

## ファジングその1(2次元)

上記は、回数分だったが、今回は「パターンの個数分」繰り返す

つまり、置換リストの中でもチェックされた置換パターンの分だけ、置換される。

これは、全リクエスト中の「%s%」の部分が、そのパターンに置換されるという繰り返しを行う。

![webMmode007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/bffc0771-5e4e-70d6-6195-8d2920267136.png)


## 変数リスティング(3次元)

上記は、パターンの回数分だったが、今回は各パラメータに対して、各パターンを繰り返していく。

今回は、「変数置換対象ページ」のパラメータ(今回は「/confirm.cgi」の「a」「c」「e」の3つ)に対して、置換パラメータをそれぞれ行う。

![webMmode008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/97807059-e5bb-324c-928d-95264dded6af.png)

## 変数リスティング(3次元)のオプション

- 「クエリストリングを対象」「Postパラメータを対象」「クッキーを対象」は、分かりやすいと思う。

- 「パスを対象」は、文字通りURLのパスを置換対象とするかどうか。
 - ときどきパスがパラメータ化している場合があるので。
 - 置換対象のパラメータのタイプがそれぞれある。

- 「UUID/Hashのみ」は、UUIDっぽいパスやHashっぽいパスのみを対象とする
- 「「◆」を含むパス」は、例えば「/webapp/id:50/age:30」というのに使えると思う

例えば「/webapp/id/50」とかなら、「最後のみ」でも「数値のみ」でもよいと思う。
「/webapp/id/50/age/30」とかなら「数値のみ」が最適かと思う。

- 「何もしない」は、置換する前に、なにもしない(置換しない)セッションを実施するということ。置換句の返しの前に正常性の確認ができる。
- 「最後に何もしない」は、置換繰り返し後に何もしないセッションを実施することで、繰り返し処理などで、セッション外に連れていかれたのかそうではないのかの確認ができる
- 「数値計算を行う」は、数値の値に対して、+1して-1した計算式を与えるかどうか
- 「数値に文字」は、数値の値に対して、通常のアルファベットを与える。(つまり脆弱性なのか、数値変換できなかっただけなのかの判別に使う)
- 「除外変数名」は、CSV形式で、置換対象外にするパラメータ名を入れる
- 「CSRFToken名は除外する」は、別途指定されている CSRFTokenのパラメータを除外するかどうか
- 「CSV変数名」は、CSV形式の値となっているパラメータ名を指定。CSVのデリミタはその後ろのテキストボックスで指定
- 「変数追加」は、置換文字列を名前としてパラメータを新規追加するかどうか。
- 「配列無視」は「a[0]=a&a[1]=b」を一つのパラメータとしてみなすかどうか 
- 「UrlEncoded」は、置換後にURLエンコードするか、そのまま投げるか

### 変数リスティング(3次元)のオプション(配列無視)

- 「配列無視」は「a[0]=a&a[1]=b」を一つのパラメータとしてみなすかどうか 

例えば、`a[0][0]=e&a[0][1]=f&a[1][0]=g&a[1][1]=h` の場合、

- a[0][0]
- a[0][1]

だけを実施する

## タイムアウトチェック

[sWebMachineGun.exe のHTTPセッションのタイムアウトチェック](https://qiita.com/tomoki0sanaki/items/8da62a7dcf781918144d)

## 全セッション全変数リスティング

今までは、セレクトボックスが「全て使用」になっていたけど、これを外す。

![webMmode009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/56ec5a9d-c288-80a8-5ba4-74f84c5d9192.png)

この図では「1(/confirm.cgi)」だけを使うようにするモード。

「execute」ボタンで、「1(/confirm.cgi)」だけを使って、繰り返し処理を行う。

「AllSend」ボタンは、テンプレート中の全リクエストを独立に扱う。つまり、例では「0(/input.cgi)」「1(/confirm.cgi)」「2(/complete.cgi)」を独立に繰り返し処理を行う。

「Next」は、画面上の次のリクエスト(例では「1」の次なので「2(/complete.cgi)」だけを使って繰り返し処理を行う。

## 応用編

### SQL Injection

未稿

# sWebMachineGun.exe Index

[sWebMachineGun.exe のメインメニューに戻る](https://qiita.com/tomoki0sanaki/items/e2b7767551a576b1dbd3)