Help us understand the problem. What is going on with this article?

sWebMachineGun.exe の画面説明

sWebMachineGun.exe

HTTP 通信を好きなだけ発行できるツール

過去のテキスト

基本概念

基本的には、初期アーキテクチャの説明の「Repeater(sWebMachineGun.exe) ver1.7.0.0 以前」と変化していない。
3次元空間でのリクエスト送信

または、変数の繰り返しとパターンの繰り返しをまとめて、"変数とパターン" の繰り返しとみなしてもよい。

ターンとカウンタを合わせた2次元空間でのリクエスト送信

画面例

アプリケーションタブ

タブ外の共通ボタンなど

029.png

Execute/Stopボタン

「設定をレジストリに保存して実行」または「停止」

Clearボタン

レスポンスタブの結果をクリアする

Saveボタン

設定をレジストリに保存する

Macroボタン

マクロについて」を参照

Exitボタン

設定をレジストリに保存して、終了する

ClearCookieボタン

内部的に保存しているクッキー、カスタム認証のトークンをクリアする

Reloadボタン

設定をレジストリに保存して、再起動する

Proxyボタン

HTTP Proxyを経由させる必要のがある場合の設定。
Basic認証とか、Proxyの認証とか・・・なんとなくわかるよね。
.NET Framework は Windows なので、Windows 統合認証用のドメインも指定できるみたいだね。

033.png

Certificateボタン

未稿

Loglogボタン

sPortRedirector.exeで説明する

URIとか、パラメータとかをなんとなくいい感じに出力しようとしている

Requestタブ

027.png

028.png

Settingタブ(置換方法)

040.png

置換方法について

前方追加
変数名=≪ここに置換文字列が埋め込まれる≫
これは基本形
後方付加
変数名=値≪ここに置換文字列が埋め込まれる≫
これはNullInjectionなどに使えると思う
完全置換
変数名=≪値自体が書き換わる≫
値としてマクロ文字「%S%」が使える
「`%S%`」だと、値全体をバッククォートで囲むという意味になる
043.png
文字追加
指定の仕方は独特。042.png こんな感じ「(文字数)(カンマ)(文字)」で指定する
名前の後方付加
変数名≪ここに置換文字列が埋め込まれる≫=値
数値計算
使っていないじゃないかな・・・

Settingタブ(変数名の指定方法)

041.png

パスに対しても繰り返し処理ができるのだが、その仕様上の注意は、以下を参照

System.Uri クラスの仕様と、sWebMachineGun.exe のパスに関しての仕様上の注意

GeneralSettingタブ(その1)

034.png

GeneralSettingタブ(その2)

035.png

Judge/RegExタブ

031.png

TimeoutCheckタブ

タイムアウト判定モードの際のタイムアウトしたかどうかの判定をここで設定する。

053.png

単純文字列の有無でもいいし、正規表現で判定してもよいし、スクリプトで判定してもよい

Scriptタブ

030.png

ver4.8.0.0 現在

  • Boo 0.9.7
  • IronPython 2.7
  • IronRuby 1.1
  • JScript.NET
  • NLua(Lua5.2)

Responseタブ

052.png

繰り返しした結果を表示する

簡易的な判定としては、XSS,bSQLi,CrLfInjection 程度

Judge/RegExタブScriptタブで設定した判定も「SimpleResult」欄に表示される。

ステータスバー

083.png

  • 「Start」は開始時間
  • 「Remain」は大体の残り時間
  • 現在置換中のパターン文字列や、対象パラメータ名
  • 「数値 Wait... 数値」は、遅延中(待機中)の時間
  • 右下の値は、プログレスバーの値/最大値ですが、「現在の位置/(想定される最大の全リクエスト数(+タイムアウトチェックの場合は待機時間を加算[分]))」

簡易判定の bSQLi の仕組み

「何もしない」で「正常系」を取得。置換方法で「InduceError」フラグのあるタイプを「エラー」タイプとして記憶しておき、まず「正常系」と「エラー系」の違いを判断する(レスポンスコードの違い、同じレスポンスコードならコンテンツサイズ)
上記(「正常系」と「エラー系」が異なる)の状態で、「InduceError」フラグのない置換方法が「正常系」に近い(レスポンスコード、同じレスポンスコードの場合は、コンテンツサイズが「正常系」と「エラー系」で近い方)と判定された場合に「bSQLi」としている。
一つのURLに対しては「正常系」は一度取得後に更新しないが、「エラー系」は「InduceError」フラグのある置換方法が登場する度に更新される。

ぶっちゃけ、あまり精度は高くないので、判定としては参考程度かな。

使い方

動作モード(繰り返しの方法)

sWebMachineGun.exeの動作モード

CSRFトークンについて

GeneralSettingタブから遷移してくる

048.png

  • 抽出方式を選択して、貼付方式を選択する。という流れ。

  • 抽出方式、貼付方式ともにプラグイン形式なので、拡張可能

  • 抽出方式、貼付方式共に、テキストボックスが2つある。

  • 1つ目のテキストボックスは、対象の変数名。一般的には、抽出側はHTMLのhiddentダクの名前、貼付側はPOSTの変数名になると思う

  • 2つ目のテキストボックスは、その値を XML または JSON と想定して XPath または JPath を記述する事が可能

  • 1つ目のテキストボックスが空欄で、2つのテキストボックスの指定があった場合、ボディ全体を対象とする。つまり、抽出側はボディ全体が XML または JSON 形式の場合とか、貼付側は、POST するボディが XML または JSON の場合とか

  • 「Double」は、抽出した値を変数名として再度実施する。という事。以前にこういうものがあった。

<input type="hidden" name="csrfname" value="abcdefg">
<input type="hidden" name="abcdefg" value="xzyqwst">

049.png

  • 抽出方法

    • Cookie クッキーヘッダから抽出
    • Hidden HTML→hiddenタグから抽出
    • HttpHeader HTTPヘッダから抽出
    • Regex (最大2回の)正規表現で抽出
    • ScriptTag HTML→Scriptタグ中の文字列リテラルから抽出
    • Script/言語 指定したスクリプトで抽出する
  • 貼付方法

    • HttpHeader HTTP ヘッダに貼付する
    • None 貼付はしない
    • Post/Query Postまたはクエリ文字列に貼付する
    • Regex (最大2回)の正規表現で貼付位置を決めて貼付する
    • Script/言語 指定したスクリプトで貼付する

CSRFトークン、None について

  • 抽出と貼付は「レスポンスから抽出して、直後のリクエストに貼付」を想定している
  • 貼付方法にある「None」は、抽出だけ行いたい場合に使う
  • 直後のリクエスト以外で、マクロ「%csrf≪インデックス≫%%」の置換対象となる
  • 最初のリクエストで抽出だけして、(直後だけでなく)その後に続くレスポンス全てに貼付したい場合に使えると思う

遅延処理について

リクエスト間で、遅延が欲しい場合、指定する

GeneralSettingタブから遷移してくる

050.png

説明しなくても、なんとなく分かるよね。

  • 乱数発生アルゴリズムを選択して
  • 最小遅延時間(ミリ秒)を指定して
  • 最大遅延時間(ミリ秒)を指定するだけ

終了時サウンドについて

GeneralSettingタブから遷移してくる

スピーカーをオンにしておけば、繰り返し処理が終了すると、音が出る

051.png

  • 「Speak」は指定した文字列をしゃべる。(.NET Framework4 以降の標準音声合成。MS-Office2010以降がインストールされていると日本語エンジンも一覧にでると思う)
  • 「Speak」は、言語エンジンと、発声文字列、ボリュームとレートなので、説明は省略
  • 「Sound」は、wav形式を指定するとその音が繰り返し終了時に流れる
  • 「Sound」は、.NET Framework4 の標準のサウンドクラスを使っているので、wav形式だけだと思う。MP3形式とかにも対応したいけど・・・

カスタム認証について

リクエスト・テンプレートごとに、カスタム認証を設定できる。

WebAPI の診断の時に役立つ。

セレクトボックスを選択して「DEL」ボタンで、無選択状態となる

047.png

カスタム認証の方式は、プラグイン形式にしているので、拡張可能

044.png

ver4.8.0.0 現在で

  • OAuth2 (www-form)
  • OAuth2 (json)
  • PostAccessToken
  • WSSE
  • WSSE Digest
  • Scriptで実装
    • Boo 0.9.7
    • IronPython 2.7
    • IronRuby 1.1
    • JScript.NET
    • NLua(Lua5.2)

045.png

OAuth2 の場合、...既定値でなんとなく設定できると思う

046.png

WSSE の場合、...既定値でなんとなく設定できると思う

デバイスメッセージ(外部連携)

GeneralSettingタブで設定する

例えば、
nページ目にアクセスすると、メールが送信されて、受信したメールの本文の数値をn+1ページ目のリクエストの特定の場所に埋め込んで、セッションを続ける
というのが、「%%msg%」マクロでできる

054.png

  • 使いたいオブジェクトをチェックすればいい。
  • 設定が必要なオブジェクトは、ダブルクリックすると、現在の設定値が上部のテキストボックスにコピーされる
  • 「Default」というボタンで、既定の設定値が上部のテキストボックスにコピーされるので、それを参考に設定してもよい
  • 設定が終われば「Set!」ボタンで、オブジェクトへ反映させる
  • オブジェクトはプラグイン形式なので拡張可能
  • 通信するリクエストに「%%msg%」があり、どれかがチェックされていれば、上から順に実行していき、「%%msg%」が置換されてリクエストされるだろう

ver4.8.0.0 現在

  • mail メールサーバ(POP3/IMAP4)に接続してメールを受信、メールの本文、題名から正規表現で値を返却、または添付ファイルを返却
  • TextRegularExpressions 既に別のオブジェクトが返却した値を、正規表現でさらに整形して返却
  • ImageFilter 既に別のオブジェクトが返却したバイナリを画像として読み込み、QRコード/Exif情報を返却(画像やPDFからの文字認識は未実装→「target=OCRは動作しない」→Office2003があれば.NETでもできるらしいorz)または、既に別のオブジェクトが返却したバイナリを音声として読み込み、.NET Framework4 標準の音声認識エンジン(あまり精度は高くない{Coltanaさんを使いたいけどorz})で音声からテキストを抽出して返却
  • Clipboard クリップボードを監視して、テキスト/画像/サウンドを返却
  • InputMessageDialog 入力ボックスのあるダイアログを表示して一時停止、手動で必要な値を入力すればいいのさ

Android で、SMSをメールに送信する というアプリを使えば、

nページ目のリクエストで、SMS(Android)にパスコードが送信されて、n+1ページ目にその値を使って認証
というのを自動化できると思うぞ。

マクロについて

032.png

%%[pP]≪数字≫%
ページ番号に置換される。
数字は桁数。例えば「%%p3%」は「001」とか「002」とか
%%[cC]≪数字≫%
セッション番号(カウント数+ターン数)に置換される。
数字は桁数。例えば「%%c3%」は「001」とか「002」とか
%%[gG]≪数字≫%
グローバルカウント番号に置換される。
設定画面はここ
数字は桁数。例えば「%%g3%」は「001」とか「002」とか
%s%
置換対象文字列
%s%
置換対象文字列上では、変数名
置換方法
%M%
マーキング文字
置換方法
%H%
ホスト名
置換方法
%S%
変数の値
置換方法→完全置換
%file≪インデックス≫%
アップロードファイル(バイナリ)を指定する。アップロードファイルはここで指定する
%%byte%
URLデコードされた置換対象文字列
入力する事はないが、結果画面で見かけるかも
%%msg%
ダイアログからの入力
詳しい説明はここ
%%csrf≪インデックス≫%
CSRFトークン
設定画面はここ
%%m≪インデックス≫%
カスタムマクロ
例えば、今日はid=1234の情報使ってください、明日はid=2456の情報使ってください。とかをカスタムマクロ化しておくと、ここだけ変更すればいいので、便利かもね

「C」、「P」や「G」は、全角数字でカウントする事も可能

インデックスへ戻る

sWebTool Manual index

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした