abhyyyy0990/vulnerability-scanner

GitHub: abhyyyy0990/vulnerability-scanner

一个基于 Python 标准库的迷你漏洞扫描器,通过端口扫描、banner 抓取和弱配置检查生成安全报告,适合网络安全学习入门。

Stars: 0 | Forks: 0

# 漏洞扫描器(迷你项目) 一款简单的 Python 工具,用于扫描目标主机的开放端口、抓取服务 banner、标记潜在过时的软件版本或脆弱的配置,并生成可读的漏洞报告。 ## ⚠️ 仅限授权使用 仅扫描您拥有或**获得明确书面授权**进行测试的主机。 在大多数司法管辖区,未经授权扫描系统是非法的(例如,根据美国《计算机欺诈和滥用法》)。适合学习的练习目标: - `127.0.0.1`(您自己的机器) - 您控制的虚拟机(例如 Metasploitable2、DVWA) - `scanme.nmap.org`(由 Nmap 作者明确提供用于扫描练习) ## 文件 | 文件 | 用途 | |-------------------------|-------------------------------------------------------| | `scanner.py` | 主入口点:端口扫描、banner 抓取、配置检查 | | `outdated_versions.py` | 包含已知过时软件版本的小型参考表 | | `report.py` | 将扫描结果转换为格式化的文本报告 | ## 环境要求 Python 3.7+。无外部依赖 —— 仅使用标准库 (`socket`、`ssl`、`concurrent.futures`、`argparse`)。 ## 用法 ``` # 扫描 localhost 的默认范围(端口 1-1024) python3 scanner.py 127.0.0.1 # 扫描特定范围 python3 scanner.py 192.168.1.10 --ports 1-500 # 扫描特定端口 python3 scanner.py example.com --ports 22,80,443,3306,8080 # 调整 timeout / concurrency / output file python3 scanner.py 127.0.0.1 --ports 1-1024 --timeout 0.3 --workers 300 --out my_report.txt ``` ## 检查内容 1. **开放端口** —— 尝试与范围内的每个端口建立 TCP 连接, 使用线程池以提高速度。 2. **Banner 抓取** —— 对于每个开放端口,尝试读取服务的 问候/响应(适用于 SSH、FTP、SMTP 等),如果失败则回退到 HTTP HEAD 请求,然后对类似 HTTPS 的端口尝试 TLS 握手。 3. **过时软件检测** —— 将 banner 与一个小型 本地表(`outdated_versions.py`)进行匹配,该表包含已知的旧版软件 (例如 `vsftpd 2.3.4`,旧版的 OpenSSH/Apache/nginx)。 4. **弱配置检查** —— 标记一些常见的风险设置, 例如开放 Telnet、无认证提示的 Redis/MongoDB,或者 在没有 NLA 上下文的情况下暴露的 RDP。 5. **报告生成** —— 撰写一份纯文本报告,按严重程度总结风险 发现结果,并提供按端口划分的详细明细。 ## 局限性(请正视这些问题 —— 这也是学习的一部分!) - 过时软件表仅用于说明,并非真正的 CVE 数据源。生产级 扫描器会查询类似 NVD(国家漏洞数据库)API 这样的服务,而不是使用硬编码的 dict。 - Banner 抓取是被动的/尽力而为的 —— 某些服务根本不会透露 版本信息,而且这不像 Nmap 的服务版本检测(`-sV`)那样进行深度的协议指纹识别。 - 不进行任何漏洞利用尝试 —— 这仅用于检测和报告, 不验证可利用性。 - 使用 TCP connect 扫描(而非 SYN/隐身扫描),因此与 专业扫描器相比,它的速度较慢,且更容易被日志/IDS 发现。 ## 扩展本项目 如果您想在此基础上进行开发,建议的后续步骤: - 添加 `--json` 输出格式以生成机器可读的报告 - 从 NVD API 获取真实的 CVE 数据,而不是使用本地 dict - 添加 UDP 端口扫描 - 通过 TTL/window 大小分析添加基本的 OS 指纹识别 - 添加 HTML 报告模板,而不是纯文本
标签:Banner抓取, Python, 加密, 插件系统, 数据统计, 无后门, 漏洞扫描器, 端口扫描, 逆向工具