
高機能Webディレクトリスキャンツール。DirBuster、Dirsearch、cansina、御劍よりも強力です。

広範な調査の結果、優れたWebディレクトリスキャンツールには少なくとも以下の機能が必要であることがわかりました。
それでは、Dirmapの特徴を見てみましょう。
git clone https://github.com/H4ckForJob/dirmap.git && cd dirmap && python3 -m pip install -r requirement.txt
単一ターゲット、デフォルトはhttp
python3 dirmap.py -i https://target.com -lcf
python3 dirmap.py -i 192.168.1.1 -lcf
サブネット(CIDR形式)
python3 dirmap.py -i 192.168.1.0/24 -lcf
ネットワーク範囲
python3 dirmap.py -i 192.168.1.1-192.168.1.100 -lcf
python3 dirmap.py -iF targets.txt -lcf
targets.txt内では上記の形式がサポートされています。
outputフォルダに自動保存されます。ターゲットドメイン.txtです。カスタムDirmap設定を行い、Dirmapの高度な機能を探索します。
当面は設定ファイルを読み込んで詳細設定を行います。コマンドライン引数による詳細設定はサポートしていません!
プロジェクトルートのdirmap.confを編集して設定します。
dirmap.conf設定の詳細
#再帰スキャン処理設定
[RecursiveScan]
#再帰スキャンを有効にするか: 無効:0; 有効:1
conf.recursive_scan = 0
#これらのステータスコードに遭遇したら再帰スキャンを開始。デフォルト設定 [301,403]
conf.recursive_status_code = [301,403]
#URLがこの長さを超えたらスキャンを終了
conf.recursive_scan_max_url_length = 60
#これらの拡張子は再帰スキャンしない
conf.recursive_blacklist_exts = ["html",'htm','shtml','png','jpg','webp','bmp','js','css','pdf','ini','mp3','mp4']
#スキャン対象外のディレクトリを設定。デフォルト設定は空。その他設定例: ['/test1','/test2']
#conf.exclude_subdirs = ['/test1','/test2']
conf.exclude_subdirs = ""
#スキャンモード処理設定(4つのモード、1回に1つだけ選択可能)
[ScanModeHandler]
#辞書モード: 無効:0; 単一辞書:1; 複数辞書:2
conf.dict_mode = 1
#単一辞書モードのパス
conf.dict_mode_load_single_dict = "dict_mode_dict.txt"
#複数辞書モードのパス、デフォルト設定 dictmult
conf.dict_mode_load_mult_dict = "dictmult"
#ブルートフォースモード: 無効:0; 有効:1
conf.blast_mode = 0
#辞書生成の最小長さ。デフォルト設定 3
conf.blast_mode_min = 3
#辞書生成の最大長さ。デフォルト設定 3
conf.blast_mode_max = 3
#デフォルト文字セット: a-z。未使用。
conf.blast_mode_az = "abcdefghijklmnopqrstuvwxyz"
#デフォルト文字セット: 0-9。未使用。
conf.blast_mode_num = "0123456789"
#カスタム文字セット。デフォルト設定 "abc"。abcを使用して辞書を構築
conf.blast_mode_custom_charset = "abc"
#カスタム継続文字セット。デフォルト設定は空。
conf.blast_mode_resume_charset = ""
#クローラモード: 無効:0; 有効:1
conf.crawl_mode = 0
#動的機密ファイルペイロード生成に使用する拡張子辞書
conf.crawl_mode_dynamic_fuzz_suffix = "crawl_mode_suffix.txt"
#robots.txtファイルの解析。未実装。
conf.crawl_mode_parse_robots = 0
#HTMLページを解析するxpath式
conf.crawl_mode_parse_html = "//*/@href | //*/@src | //form/@action"
#動的クローラ辞書生成を行うか。デフォルト設定 1、クローラ動的辞書生成を有効。その他設定例: 無効:0; 有効:1
conf.crawl_mode_dynamic_fuzz = 1
#Fuzzモード: 無効:0; 単一辞書:1; 複数辞書:2
conf.fuzz_mode = 0
#単一辞書モードのパス。
conf.fuzz_mode_load_single_dict = "fuzz_mode_dir.txt"
#複数辞書モードのパス。デフォルト設定: fuzzmult
conf.fuzz_mode_load_mult_dict = "fuzzmult"
#Fuzzタグの設定。デフォルト設定 {dir}。{dir}タグを辞書の挿入ポイントとして使用し、http://target.com/{dir}.php を http://target.com/辞書の各行.php に置き換えます。その他設定例: {dir};{ext}
#conf.fuzz_mode_label = "{ext}"
conf.fuzz_mode_label = "{dir}"
#ペイロード処理設定。未実装。
[PayloadHandler]
#リクエスト処理設定
[RequestHandler]
#カスタムリクエストヘッダー。デフォルト設定は空。その他設定例: test1=test1,test2=test2
#conf.request_headers = "test1=test1,test2=test2"
conf.request_headers = ""
#カスタムリクエストUser-Agent。デフォルト設定はchromeのUA。
conf.request_header_ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
#カスタムリクエストCookie。デフォルト設定は空、Cookieは設定しません。その他設定例: cookie1=cookie1; cookie2=cookie2;
#conf.request_header_cookie = "cookie1=cookie1; cookie2=cookie2"
conf.request_header_cookie = ""
#カスタム401認証。未実装。カスタムリクエストヘッダー機能でニーズを満たせるため(めんどくさいXD)
conf.request_header_401_auth = ""
#カスタムリクエストメソッド。デフォルト設定はgetメソッド。その他設定例: get;head
#conf.request_method = "head"
conf.request_method = "get"
#各リクエストのタイムアウト時間。デフォルト設定 3秒。
conf.request_timeout = 3
#ランダム遅延(0-x)秒でリクエストを送信。引数は整数である必要があります。デフォルト設定 0秒、遅延なし。
conf.request_delay = 0
#単一ターゲットあたりのリクエストコルーチンスレッド数。デフォルト設定 30スレッド
conf.request_limit = 30
#最大リトライ回数。未実装。
conf.request_max_retries = 1
#永続接続の設定。session()を使用するか。未実装。
conf.request_persistent_connect = 0
#302リダイレクト。デフォルト False、リダイレクトしません。その他設定例: True;False
conf.redirection_302 = False
#ペイロードに追加する拡張子。デフォルトは空、スキャン時に拡張子を追加しません。その他設定例: txt;php;asp;jsp
#conf.file_extension = "txt"
conf.file_extension = ""
#レスポンス処理設定
[ResponseHandler]
#記録するレスポンスステータスを設定。デフォルト設定 [200]、200ステータスコードを記録。その他設定例: [200,403,301]
#conf.response_status_code = [200,403,301]
conf.response_status_code = [200]
#Content-Typeレスポンスヘッダーを記録するか。デフォルト設定 1 記録
#conf.response_header_content_type = 0
conf.response_header_content_type = 1
#ページサイズを記録するか。デフォルト設定 1 記録
#conf.response_size = 0
conf.response_size = 1
#404ページを自動検出するか。デフォルト設定 True、自動検出を有効。その他設定例参照: True;False
#conf.auto_check_404_page = False
conf.auto_check_404_page = True
#503ページをマッチするカスタム正規表現。未実装。使う必要がなさそうで、非推奨になるかもしれません。
#conf.custom_503_page = "page 503"
conf.custom_503_page = ""
#ページ内容をマッチするカスタム正規表現
#conf.custom_response_page = "([0-9]){3}([a-z]){3}test"
conf.custom_response_page = ""
#サイズがxのページをスキップして表示しない。設定しない場合は"None"に設定、デフォルト設定"None"。その他サイズ設定例: None;0b;1k;1m
#conf.skip_size = "0b"
conf.skip_size = "None"
#プロキシオプション
[ProxyHandler]
#プロキシ設定。デフォルト設定"None"、プロキシを有効にしません。その他設定例: {"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
#conf.proxy_server = {"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
conf.proxy_server = None
#デバッグオプション
[DebugMode]
#ペイロードを出力して終了
conf.debug = 0
#アップデートオプション
[CheckUpdate]
#githubからアップデートを取得。未実装。
conf.update = 0
辞書ファイルはプロジェクトルートのdataフォルダに格納されています。
bar.log.start()でエラーが発生する場合。解決策:progressbar2をインストールしてください。progressbarをアンインストールし、同名モジュールのインポートを防ぎます。ある先輩からのアドバイスに感謝します。実行コマンド:
python3 -m pip uninstall progressbar
python3 -m pip install progressbar2
dirmapの開発にあたり、多数の優れたオープンソースプロジェクトのパターンやアイデアを参考にしました。ここに特記して感謝の意を表します。
mail: [email protected]
