📜  CyberCrowl – 基于Python的 Web 路径扫描工具(1)

📅  最后修改于: 2023-12-03 15:00:11.209000             🧑  作者: Mango

CyberCrowl – 基于Python的 Web 路径扫描工具

CyberCrowl 是一款基于 Python 编程语言的 Web 路径扫描工具。它旨在帮助安全测试人员和网络管理员快速扫描 Web 应用程序的内容,并发现网站的敏感目录、文件和隐藏目录等。

功能特点
  • 支持自定义字典和扫描范围
  • 支持多线程扫描
  • 支持代理和随机 User-Agent
  • 支持结果保存和输出到文件
安装环境
  • Python 3.x
安装方法
  1. 下载 CyberCrowl 工具源码:
git clone https://github.com/Wh0ale/CyberCrowl.git
  1. 安装依赖库:
pip install -r requirements.txt
使用方法
命令行参数
-h, --help            帮助信息
-u URL, --url URL     扫描目标 URL
-w WORDLIST, --wordlist WORDLIST
                      设置扫描字典文件路径
-t THREADS, --threads THREADS
                      设置扫描线程数量,默认为10
-x PROXY, --proxy PROXY
                      设置代理服务器
-U USER_AGENT, --user-agent USER_AGENT
                      设置 User-Agent
-o OUTPUT, --output OUTPUT
                      设置扫描结果保存路径
示例

以下是使用 CyberCrowl 工具对目标网址进行扫描的示例:

python CyberCrowl.py -u http://example.com -w dictionary.txt -t 20 -x http://127.0.0.1:8080 -U Mozilla/5.0 -o result.txt

这会扫描 http://example.com 网站,使用 dictionary.txt 字典,使用 20 个线程进行扫描,使用代理服务器 http://127.0.0.1:8080,使用 User-Agent Mozilla/5.0,扫描结果保存在 result.txt 文件中。

注意事项
  • 扫描字典应在 dictionaries 目录中设置,可以在 CyberCrowl.py 文件中修改字典路径。
  • 使用代理服务器和随机 User-Agent 可以提高扫描效率和匿名性。
  • 请勿在未授权的情况下使用 CyberCrowl 工具扫描他人网站,否则可能会导致法律责任。
完整代码

完整的 CyberCrowl 工具源码可以在 GitHub 上获取。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import argparse
import requests
import threading
import os

class CyberCrowl(object):
    def __init__(self, url, dictionary, threads, proxy, user_agent, output):
        self.url = url
        self.dictionary = dictionary
        self.threads = threads
        self.proxy = proxy
        self.user_agent = user_agent
        self.output = output
        self.lock = threading.Lock()
        self.paths = self._load_dictionary()

    def _load_dictionary(self):
        with open('./dictionaries/' + self.dictionary, 'r') as f:
            data = f.readlines()
        return [x.strip() for x in data]

    def scan(self):
        while True:
            try:
                path = self.paths.pop()
            except IndexError:
                break
            url = '{}{}'.format(self.url, path)
            try:
                headers = {
                    'User-Agent': self.user_agent
                }
                proxies = {
                    'http': self.proxy,
                    'https': self.proxy
                }
                if self.proxy:
                    r = requests.get(url, headers=headers, proxies=proxies)
                else:
                    r = requests.get(url, headers=headers)
                if r.status_code in [200, 301, 302, 303, 307]:
                    self.lock.acquire()
                    print('[+] Found: {}\n'.format(url))
                    self.lock.release()
                    if self.output:
                        with open(self.output, 'a') as f:
                            f.write('[+] Found: {}\n\n'.format(url))
            except requests.exceptions.ConnectionError:
                pass

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='CyberCrowl - A Web Path Scanner Tool in Python')
    parser.add_argument('-u', '--url', help='the scan target url', required=True)
    parser.add_argument('-w', '--wordlist', help='set the scan dictionary file path', default='common.txt')
    parser.add_argument('-t', '--threads', help='set the number of threads used for scanning', type=int, default=10)
    parser.add_argument('-x', '--proxy', help='set the proxy server', default=None)
    parser.add_argument('-U', '--user-agent', help='set the User-Agent', default='Mozilla/5.0')
    parser.add_argument('-o', '--output', help='set the scan result save path', default=None)
    args = parser.parse_args()

    print('[+] Scan start...\n')

    CyberCrowl(args.url, args.wordlist, args.threads, args.proxy, args.user_agent, args.output).scan()

    print('\n[+] Scan finished.')
参考链接