これは、VBScript & WSH(Windows Scripting Host)用です
履歴
第一版 : 最初のバージョン (2003/12/13)
第二版 : (2004/01/04)
第三版 : (2004/04/07)
第四版 : (2004/06/30) (mojichk.dll が必要になったよ)
第五版 : (2004/08/04) (スクリプトの大幅な仕様変更)
第五版 : (2004/08/11) バグ修正と COM ライブラリの追加
第六版 : (2004/11/11) バグ修正と一部のステージでレジューム機能の追加
第七版 : (2004/12/06) デバグ・モード(スキャンURLを作成するだけ)の追加
2第一版 : (未公開) 最初から作りなおした
2第一版 : (未公開) 最初から作りなおした(バグ修正とバッチファイルの追加)
3第一版 : (2005/11/04) (スピードが出なかったので)最初から作りなおした。(SQLite版)
3第一版 : (未公開) (バグ修正と、Distinct の追加と Not In () 句から except 文にした)
3第一版 : (2005/11/18) (ServerHeder.vbs のバグ修正など)(一応、著作権を保持するようにした)
3第一版 : (2006/10/15) (GetList.vbs のバグ修正、DB のスキーマ修正など、exception.dat を新規追加した)
4第一版 : (2006/10/26) (GetList.vbs/GetList.bat のバグ修正と少しばかりの高速化、DB のスキーマ修正など)
4第一版 : (2006/11/17) (GetList.bat で、存在するディレクトリリストも出力するようにした、拡張子の追加登録、CheckBunkatu2.bat での CScript 呼出しで//NoLogo を追加、extention テーブルで元を示すフィールドを追加した、各テーブルの name フィールドに unique 属性を付けた)
4第一版 : (2007/11/03) COM の内部の Form がオブジェクト変数ではなかったので、オブジェクト変数にした
はじめに
DirIndexChk.vbs
GetHTML/GetHTMLw の結果を利用した Web 監査の補助スクリプトです
基本的な処理の流れは、
GetHTML/GetHTMLw で一括ダウンロード (準備段階)
本スクリプトを使って、ディレクトリ・インデキシング可能かどうか、特殊なファイルが読み取り可能かどうかを調査します
Ver2.0 から、各ディレクトリのサーバヘッダも調査します
Ver2.0 から、特殊なファイルの生成ルールの仕様が変わりました
GetHTTPResponseCode() 関数内部にチェックルーチンを追加すれば、カスタマイズなチェックができます(200 でも特定のボディはエラーとする...など)
本スクリプトには
sComHTTP
と
MojiChk.dll
が必要です。
また、添付されている DirIndexChkCom.dll で GETHTML.hif の解析を行っていますので、COM コンポーネントとしてレジストリに登録しておく事を推奨します。
getHTML/getHTMLw は、Yutaka Endo 氏によって製作された Web ページの一括ダウンロード・ツールです。
私はまだ試していないですが、Flash コンテンツの中まで見るらしいです。
この GetHTML/GetHTMLw は、ダウンロードしたデータを、対象の Web サイトと同一のディレクトリ構造を維持した形でダウンロードされます。
という事で、ローカルのディレクトリ構造(GetHTML/GetHTMLw のデータ・ディレクトリ)を元に sComHTTP でディレクトリ・インデキシングなどが可能かどうかを調査するものです。
httpScan.vbs
Web サーバからの基本的な反応を見ます。
nc.exe (netcat) が必要です。
DirIndexChk2
基本的コンセプトは、DirIndexChk.vbs と同じです。
しかし、機能ごとにスクリプトを分割しました。
リストの出力ファイルなどには NTFS のストリーム機能を用いていますので NTFS 限定です。
DirIndexChk2
WSH(VBScript) 処理のメイン
GetList.vbs
GetHTML/GetHTMLw のデータ・ディレクトリから URL リストを作成する
CreateList.vbs
URL リストと extension.txt,filename.txt,filenameFotter.txt,filenameHeader.txt から隠しファイルの URL リストを作成する
StreamCopy.vbs
ストリームをファイル(NTFS 標準ストリーム)にコピーするスクリプトです
ServerHeader.vbs
リストを元にサーバへ問い合わせをするスクリプトです
Bunkatu.vbs
リストを指定された件数ごとに分割するスクリプトです
DirIndexChk2
バッチファイル (WSH の処理を補佐)
CreateList.bat
GetList.vbs → CreateList.vbs (→ StreamCopy.vbs)まで一括処理
CheckHeader.bat
ヘッダのチェック、ディレクトリ一覧、拡張子マッピングのチェックを一括処理
CheckBunkatu.bat
Bunkatu.vbs で分割されたリストをパラレルで一括チェック
CheckBunkatu2.bat
CheckBunkatu.bat から呼び出される
インクリメントしながら複数のリストをチェック
DirIndexChk3
基本的コンセプトは、DirIndexChk.vbs/DirIndex2 と同じです。
しかし、DirIndexChk2 では、小規模サイトでもリスト作成だけに一日以上かかる(ファイル/ディレクトリ・リストとして約900)など速度的な問題のため SQLite を使って、データベース化(SQL化)しました。
DirIndexChk3
ファイル紹介
Bunkatu.vbs
DirIndexChk2 時代のまま
ServerHeader.vbs
DirIndexChk2 時代のまま
CheckBunkatu.bat
DirIndexChk2 時代のまま
CheckBunkatu2.bat
DirIndexChk2 時代のまま
filename.dat
検査用ファイル名のリスト
filenameFotter.dat
検査用ファイル名フッタのリスト
filenameHeader.dat
検査用ファイル名ヘッダのリスト
extension.dat
検査用ファイル拡張子のリスト
exception.dat
検査対象外のファイル拡張子のリスト
db.sqlite3.master
extension.dat
filename.dat
filenameFotter.dat
filenameFotter.dat
exception.dat
をデータベース化した SQLite3 のデータベースファイル
db.sqlite3.master.bak
db.sqlite3.master と同一のバックアップファイル
GetList.vbs
GetHTML.exe/GetHTMLw.exe から既存のURLリストを作成する。出力は、SQLite へ書き出すSQLスクリプト
GetList.bat
GetList.vbs → SQLite3.exe へと一連の処理をするバッチファイル
WSH/バッチなので、処理自体が遅いです。
ちなみに、本当の Web 監査はこの程度 + XSS 程度ではないので、ご注意をば...
DirIndexChk3 と SQLite
SQLite3.exe が必要です。
本家
などからダウンロードしておきましょう。
私は、SQLite 3.2.7 (Windows EXE Binary) でテストしました。
DirIndexChk3
基本的な流れ
GetHTML.exe/GetHTMLw.exe で、対象をまるごとダウンロード
ローカルの対象に対して、GetList.vbs で、ファイルリスト(URLリスト)を作成
SQLite.exe でデータベース化し、SQL によって、検査用URLリストを抽出
(Bunkatu.vbs) で検査URLリストを複数ファイルへ分割
ServerHeader.vbs で検査
という流れなので、DirIndexChk.vbs/DirIndexChk2 と基本的な流れは変わっていないです。
DirIndexChk3
SQL 文
db.sqlite3.master にすでに作成されているテーブルは以下です。
filename.name ← (filename.dat の内容)
extention.name ← (extension.dat の内容)
extention.source ← (元になる情報)
fotter.name ← (filenameFotter.dat の内容)
header.name ← (filenameHeader.dat の内容)
exception.name ← (exception.dat の内容)
GetList.vbs によって吐き出される SQL スクリプトを実行すると作成されるテーブル
dirlist.name ← (既存のディレクトリ一覧)
filelist.pathnameextention , pathname , path , filenoextention , fileextention ← (既存のファイル一覧)
existurltbl.name ← (dirlist.name + filelist.name) (一時テーブル)
testtbl.name ← (検査予定の URL 一覧) (一時テーブル)
tesurltbl.name ← (testtbl.name - existurltbl.name の差分) (一時テーブル)
結局...
tesurltbl.name を最終的に検査してみればよい
ってことだ。
拡張子マッピングテスト
select dirlist.name||'NoFile'||extention.name from dirlist,extention;
/PATH/iiii.jjjj
select dirlist.name||filename.name||extention.name from dirlist,extention,filename;
/PATH/FILE.EXTENTION.jjj
select filelist.pathnameextention||extention.name from filelist,extention;
/PATH/FILE.jjj
select filelist.pathname||extention.name from filelist,extention;
/PATH/iiiFILE.EXTENTIONjjj
select filelist.path||header.name||filelist.fileextention||fotter.name from filelist,fotter,header;
DirIndexChk3
リスト作成の速度
PentiumM 1GHz, Mem=1GB, 2,5in-HDD
cache_size=2000, 1分, fileCount=32
cache_size=20000, 1分, fileCount=32
cache_size=200000, 5分, fileCount=1178
cache_size=200000, 11分, fileCount=2324
cache_size=200000, 16分, fileCount=3470
RAM ドライブにするとかすると、もっと速くなる可能性あり(かなりの部分は、ディスクアクセスの可能性あり)
うーーん、やっぱり、こういうのは自作より他人のモジュール使ったほうが速いって事ですねー(やっぱりヘタレだ..俺orz)
だいたい、線形かなぁ〜....ただ、3000 以上もファイルのあるサイトとなると ....検査 URL がものすごい量になるよ〜
4第一版
2000 ファイルぐらいで、SQL 文を作るのと、DB に登録したり条件抽出したりが、半々ぐらいの時間(8分+8分=16分)
(PentiumM 900MHz + 2.5in-HDD)
これを ERAM という RAM ディスクにすると、DB に登録したり条件抽出したりが、ほぼ瞬間的に処理される
高速化のために
当たり前の事ばかり...orz
RAM ディスク上で作業する
環境変数 TEMP/TMP も RAM ディスクを指定する
CPU の速いマシンでどうぞ
メモリも多いほうがよい
ソースの説明
省略
実行環境
WSH が実行できる
GetHTML/GetHTMLw で Web サイトのデータをダウンロード済み
sComHTTP をインストール済
Moji_Chk.dll をインストール済
SQLite3.exe をインストール済
SORT.EXE (Windows 標準) (4第一版〜)
CMD.EXE (Windows 標準) (4第一版〜)
nc.exe をインストール済
DirIndexChk2
使い方
ダウンロードしたファイルを解凍しします。
(LHAは、吉崎栄泰氏が、著作権を所有)
DirIndexChkCom.dll は COM なので、レジストリに登録する
適当なところに DirIndexChkCom.dll と RegSvr32.bat をコピーして、バッチファイルを起動する
解凍して出来た各種ファイルがスクリプトファイルや、拡張子リスト、バッチファイルなどです。
使い方:
CSCRIPT.EXE GetList.vbs (GetHTML/GetHTMLw のデータディレクトリ) 出力ファイル
(「出力ファイル:DirList」 にディレクトリ・リスト)
(「出力ファイル:FileList」 にファイル・リスト)
使い方:
CSCRIPT.EXE CreateList.vbs (GetList.vbs で出力したファイル)
(「GetList.vbs で出力したファイル:ExtenTionsMapping」 に拡張子マッピングテスト用リスト)
(「GetList.vbs で出力したファイル:hiddenFileOrFolder」 に隠しファイル用リスト)
使い方:
CSCRIPT.EXE CreateList.vbs (ストリームのあるファイル) (保存ファイル)
「ストリームのあるファイル:DirList」→「保存ファイル.DirList.txt」
「ストリームのあるファイル:FileList」→「保存ファイル.FileList.txt」
「ストリームのあるファイル:ExtenTionsMapping」→「保存ファイル.ExtenTionsMapping.txt」
「ストリームのあるファイル:hiddenFileOrFolder」→「保存ファイル.hiddenFileOrFolder.txt」
使い方:
CSCRIPT.EXE ServerHeader.vbs (リストのあるファイルとストリーム) (HTTPメソッド) (取得ヘッダ名)
取得ヘッダ名:「-」で HTTP レスポンスのステータス・コード
取得ヘッダ名:「=」で HTTP レスポンス・ボディ(BodyKaiseki() メソッドは内容が空なので自作してください)
バッチファイルは、コード見てくれ
DirIndexChk2
DirIndexChk3
削除方法
レジストリや、システムフォルダはいじっていないので、
解凍してできたファイルを削除すればOKです
DirIndexChkCom.dll をレジストリに登録した場合、DirIndexChkCom.dll 自体の削除、また regsvr32.exe によるレジストリの削除を行えばよいです。
使用上の注意
WSH の GUI 版の WSCRIPT.exe で起動すると大変な目に遭いますよ。多分...;-P
(一応、動かないようにしてはいるけど....)
かならず、コマンド・プロンプトから CScript.exe を使って呼び出しましょう
レジューム機能について
「スクリプト名」+「.log」 というファイルがチェック済な URL リストとして保存されているものです。
フォーマットは、
ステージレベル(改行)
チェック済な URL(改行)
チェック済な URL(改行)
....
です
免責など
著作権は保持します(一応)。
このソフトを使用したことによって生じた、
いかなる損害についても責任は持ちません。
ソースコードについても、各自の責任において、
自由にいじってくれてもいいです。
to do list
gethtml.hif 内の null 文字対応
もう少しスマートにできないかなぁ...
レジューム機能
レジゅーム機能はないので、自分でリストをあらかじめ分割するなどしてください
そろそろ、VisualBASIC 化(スクリプトから exe にした方がいいかなぁ〜)
DownLoad
(DirIndexChk3.lzh as 40,836byte)
mail to active@window.goukaku.com