🔥 Multi_Traversal.py
とは?
Multi_Traversal.py
は、ターゲットサイトのディレクトリを探索し、有効なパスを自動で検出するツール
一般的な ディレクトリブルートフォースツール のように、wordlist を使って特定のパスを試し、レスポンスコードを確認する ことで、アクセス可能なエンドポイントを特定できる。
-
目的:
HTTP 200/301/302
などのレスポンスを返すパスを発見 -
特徴:
-
multiprocessing
によるマルチスレッド処理 -
socket
を直接操作し、軽量&高速 -
SSL
対応(HTTPSでも動作) -
JSON
形式で結果を保存可能 -
エラーハンドリング & ログ機能
でデバッグしやすい
-
🚀 インストール & 使い方
1. 環境構築
このツールは Python 3.x
で動作する。
必要なモジュールは標準ライブラリに含まれているため、追加インストールは不要。
# クローンして実行
$ git clone https://github.com/Alecto-Fsociety/Multi_Traversal.git
$ cd Multi_Traversal
$ python3 multi_traversal.py -h
2. 基本的な使い方
$ python3 multi_traversal.py -url https://example.com -w wordlist.txt
-
-url
: 対象のサイトURL -
-w
: 使用する単語リスト
例:
$ python3 multi_traversal.py -url https://target.com -w common_paths.txt -p 443 -t 10
-
-p 443
: ポート番号を指定(デフォルトは80
/443
) -
-t 10
: 10スレッドで並列処理
例:
$ python3 multi_traversal.py -url https://target.com -w common_path.txt -s 401 403
-
-s 401 402
: ステータスコードを複数追加(デフォルトは200
/301
/302
)
🛠️ コード解説
1. Multi_Traversal
クラスの構造
このツールのメイン部分は Multi_Traversal
クラスにある。
class Multi_Traversal:
def __init__(self,target_url,path_name,port,add_status):
self.target_url = target_url
self.path_name = path_name
self.base_url = urlparse(self.target_url)
self.scheme = (self.base_url).scheme
self.domain = (self.base_url).netloc
self.port = port if port is not None else (443 if self.scheme == "https" else 80)
-
target_url
: スキャン対象のURL -
path_name
: 使用するワードリストのパス -
port
: 指定がなければ80
or443
に自動設定
2. リクエストの作成 (get_headers
)
def get_headers(self,path):
return f"GET /{path} HTTP/1.1\r\nHost:{self.domain}\r\nUser-Agent:{random.choice(self.ua_list)}\r\nAccept:*/*\r\n\r\n"
GETリクエストを作成するメソッド だ。
-
User-Agent
をランダムに選択 - ペイロードを直接埋め込むことで、リクエストをカスタマイズ可能
3. ディレクトリ探索 (requests
)
def requests(self):
pathlib.Path(self.out_dir_name).mkdir(exist_ok=True)
lines = len(self.path_list)
for point, path in enumerate(self.path_list, start=1):
try:
with socket.create_connection((self.domain, self.port)) as sock:
sock.settimeout(1.5)
sock.sendall(bytes(self.get_headers(path), "utf-8"))
response = sock.recv(1024*10)
status_match = re.search(r"HTTP/\d\.\d (\d+)", response.decode("utf-8", errors="ignore"))
status = status_match.group(1) if status_match else "000"
- ワードリストの各パスに対してリクエストを送信
-
socket.create_connection
で 軽量なHTTPリクエストを実行 - レスポンスのステータスコードを解析
4. スレッド処理 (multiprocessing
)
def main():
instance_traversal = Multi_Traversal(parse.url,parse.w,parse.p,parse.s)
with Pool(parse.t) as pool:
pool.starmap(instance_works, [(instance_traversal,)] * parse.t, chunksize=1)
-
multiprocessing.Pool
を使い、並列処理で高速化 - スキャンの時間を大幅に短縮できる
📌 まとめ
-
Multi_Traversal.py
は 高速・軽量なディレクトリ探索ツール -
socket
を使い、HTTPリクエストを最小限の負荷で送信 -
multiprocessing
による並列処理で 大規模スキャンを効率化 - エラーハンドリング・ログ管理がしっかりしている ので、実用的
使い方はシンプルだけど、カスタマイズ次第で強力なツールに進化できるという設計
Github
- ここにソースコード載せているので良ければ参考までに
Alecto_Fsociety/Multi_Traversal
質問先
- 何か不明な点などがありましたらこちらのメールアドレスに
お願いします。
Mail :goodbye_friend1111@proton.me