系统概述
本系统是一款基于Python语言开发的Web资产发现与基础漏洞检测工具,专为网络安全教学、课程设计及毕业设计场景打造。系统采用分层模块化架构,通过自动化扫描技术,帮助用户快速发现目标网站的资产信息(如子域名、开放端口、敏感目录等),识别Web应用指纹(如CMS类型、服务器信息),并检测常见的基础安全问题(如信息泄露、配置缺陷、弱口令等)。系统提供直观的图形化界面(GUI),支持扫描结果的可视化展示与风险分级,同时具备报告导出功能,满足教学实验与基础安全评估的需求。
系统架构设计
系统采用三层模块化架构,各层职责明确,模块间解耦,便于维护与扩展。
表现层(GUI):基于PyQt5框架开发,提供用户交互界面,包括目标输入、参数配置、扫描控制、结果展示(资产信息与风险分级)、日志输出及报告导出等功能。界面分为顶部配置区、摘要区、结果展示区和日志区,布局清晰,操作便捷。
业务逻辑层(ScannerEngine):作为系统的核心调度器,负责协调各功能模块的执行顺序,控制扫描流程(如子域名扫描→端口扫描→CMS识别→目录扫描→漏洞检测),汇总扫描结果并生成统计摘要,同时处理多线程调度与任务中断逻辑,确保扫描过程的高效性与稳定性。
功能模块层:包含五个独立的功能模块,各模块通过统一接口与业务逻辑层交互,具体功能如下:
- 子域名发现模块:通过内置字典(
data/subdomains.txt)进行DNS爆破,多线程并发解析,过滤无效域名,输出子域名及其对应IP地址。 - 端口扫描模块:基于Socket连接探测目标主机的开放端口,结合常见端口服务映射(如80→HTTP、3306→MySQL),快速识别服务类型。
- CMS指纹识别模块:通过HTML关键字匹配(如
/wp-content/识别WordPress)、HTTP Header分析及特征路径探测(如/favicon.ico的MD5值),精准识别网站使用的CMS类型(如WordPress、DedeCMS、Discuz等)。 - 敏感目录扫描模块:使用字典(
data/dir_dict.txt)对目标网站进行路径爆破,结合状态码过滤(如200、301)与基线对比,发现敏感路径(如/admin、/phpinfo.php、/.git/)。 - 漏洞检测模块:检测常见基础安全问题,包括敏感信息泄露(如
.git/config、phpinfo.php)、安全头缺失(如CSP、X-Frame-Options)及HTTP Basic Auth弱口令等。
系统工作流程
系统的扫描流程遵循“资产发现→指纹识别→漏洞检测”的逻辑,具体步骤如下:
- 输入目标:用户在GUI界面输入目标URL(如
example.com),系统自动解析URL并获取目标IP地址。 - 子域名扫描(可选):启用子域名发现模块,通过字典爆破与DNS解析,收集目标域名的子域名信息。
- 端口扫描:对目标IP进行端口扫描,识别开放端口及对应服务(如80端口→HTTP服务)。
- 构建Web入口:根据开放的HTTP/HTTPS端口(如80、443、8080),构建可访问的Web入口URL(如
http://example.com:80)。 - CMS指纹识别:对Web入口URL进行指纹分析,识别网站使用的CMS类型及版本信息。
- 敏感目录扫描:基于构建的Web入口,使用字典扫描敏感目录,发现潜在的管理后台、备份文件等路径。
- 漏洞检测:对发现的资产(如Web入口、敏感目录)进行基础漏洞检测,识别信息泄露、配置缺陷等安全问题。
- 结果汇总与风险分级:业务逻辑层汇总各模块的扫描结果,按风险等级(高危、中危、低危、信息)分类展示,生成扫描摘要(如端口数量、子域名数量、漏洞数量)。
- 输出报告:支持将扫描结果导出为HTML或JSON格式的报告,便于后续分析与存档。
核心功能模块详解
- 子域名发现模块:支持多线程DNS解析,内置常用子域名字典(如
admin、www、mail),可快速发现目标域名的子域名资产,输出格式为子域名→IP地址,帮助用户扩大资产收集范围。 - 端口扫描模块:采用Socket连接探测技术,优先扫描Top 1000常用端口(如80、443、22、3306),支持服务横幅抓取(如获取Nginx版本信息),为后续CMS识别与漏洞检测提供基础数据。
- CMS指纹识别模块:内置JSON格式的指纹库(
data/cms_fingerprints.json),包含主流CMS的关键字、Header及文件MD5特征,识别准确率高,可快速确定网站的技术栈,为针对性漏洞检测提供依据。 - 敏感目录扫描模块:支持“快速扫描”(Top 50字典)与“深度扫描”(完整字典)两种模式,结合状态码过滤与基线对比,有效减少误报,发现潜在的管理后台、备份文件、配置文件等敏感路径。
- 漏洞检测模块:聚焦基础安全问题,检测内容包括:
- 敏感信息泄露:如
.git目录泄露、phpinfo.php信息泄露、robots.txt敏感路径暴露。 - 安全头检测:检查HTTP响应头是否包含CSP(内容安全策略)、X-Frame-Options(防止点击劫持)、HSTS(强制HTTPS)等安全头。
- 弱口令检测:对HTTP Basic Auth进行简单弱口令爆破(如
admin:admin),识别默认凭证风险。
风险分级与结果展示
系统采用四级风险分级机制,帮助用户快速识别安全问题的严重程度:
- 高危:可直接利用的漏洞(如弱口令、敏感信息泄露导致代码执行)。
- 中危:存在安全隐患的配置问题(如安全头缺失、目录列表开启)。
- 低危:配置不规范但风险较低的问题(如服务器版本信息泄露)。
- 信息:普通资产信息(如开放的端口、识别的CMS类型)。
扫描结果在GUI界面的结果展示区分为左右两栏:左栏展示资产信息(子域名、端口、目录),右栏按风险等级展示安全检测结果,不同风险等级使用不同颜色标识(如高危红色、中危橙色、低危黄色、信息蓝色),直观清晰。
系统测试与性能表现
系统经过功能测试、性能测试与异常测试,确保稳定性与可靠性:
- 功能测试:覆盖URL解析、端口扫描、CMS识别、目录扫描、漏洞检测等核心功能,测试用例包括非法URL输入、常见端口识别、主流CMS指纹匹配、敏感目录发现及基础漏洞检测,结果均符合预期。
- 性能测试:在8核CPU、16GB内存环境下,扫描单个目标(含子域名、端口、目录、漏洞检测)平均耗时约5-10分钟(取决于目标规模与网络状况),多线程并发(默认30线程)下UI响应流畅,无卡顿现象。
- 异常测试:模拟网络超时、DNS解析失败、无开放端口、用户中断扫描等场景,系统均能正常处理异常,不会出现崩溃或数据丢失,日志区会实时输出错误信息,便于排查问题。
应用场景与适用对象
- 教学实验:适用于网络安全、信息安全相关课程的教学实验,帮助学生理解Web资产发现与漏洞检测的基本原理与流程。
- 课程设计/毕业设计:作为计算机、网络安全专业的课程设计或毕业设计项目,代码结构清晰,模块解耦,便于二次开发与功能扩展。
- 基础安全评估:可用于小型网站的基础安全自查,快速发现常见安全问题,提升网站安全性。
总结
本系统通过模块化设计与自动化扫描技术,实现了Web资产发现与基础漏洞检测的核心功能,界面友好,操作便捷,结果可视化程度高,满足教学实验与基础安全评估的需求。代码结构清晰,注释完善,便于学习与扩展,是一款实用的网络安全工具。
项目程序目录如下:
最终程序运行效果:
开发原理:
Web资产发现与基础漏洞检测系统开发原理
技术选型与架构原理
系统以Python为核心开发语言,充分利用其丰富的第三方库生态与跨平台特性,结合分层架构思想实现功能解耦。技术栈包括:
- GUI框架:PyQt5,提供跨平台的图形界面支持,通过信号与槽机制实现界面与业务逻辑的异步通信,确保扫描过程中界面不卡顿。
- 网络通信:
requests库处理HTTP/HTTPS请求,socket库实现底层端口探测,结合多线程(threading模块)提升扫描效率。 - 数据处理:
json模块管理配置文件与指纹规则,BeautifulSoup解析HTML内容以提取CMS特征,queue模块实现线程安全的任务调度。
架构上采用“生产者-消费者”模式:业务逻辑层作为生产者,将扫描任务(如子域名爆破、端口探测)拆分为独立线程任务,功能模块层作为消费者执行具体操作,结果通过队列回传至业务层汇总,最终由表现层渲染展示。
核心模块开发原理
子域名发现模块
- 原理:基于DNS查询的字典爆破技术。系统内置常见子域名字典(如
admin、www、mail),通过多线程并发调用socket.gethostbyname()解析域名,若解析成功则判定子域名存在。 - 优化:采用线程池控制并发数(默认30线程),避免DNS查询过载;通过正则表达式过滤无效域名(如包含特殊字符的记录),并缓存已解析的IP以减少重复查询。
端口扫描模块
- 原理:基于TCP连接探测的端口状态检测。对目标IP的指定端口发起TCP连接请求,若连接成功(返回
0)则判定端口开放,结合预定义的端口-服务映射表(如{80: "HTTP", 443: "HTTPS"})识别服务类型。 - 优化:使用
select模块实现非阻塞IO,避免单端口超时导致整体扫描停滞;支持自定义端口范围(如Top 1000常用端口),平衡扫描速度与覆盖率。
CMS指纹识别模块
- 原理:多特征融合识别技术。通过以下方式匹配CMS特征:
- HTML关键字:下载目标页面源码,搜索特定字符串(如WordPress的
/wp-content/、DedeCMS的Powered by DedeCMS)。 - HTTP Header:分析响应头中的
X-Powered-By、Server等字段(如X-Powered-By: PHP)。 - 特征文件:请求特定路径(如
/favicon.ico),计算其MD5值并与指纹库(data/cms_fingerprints.json)比对。
- 优化:采用优先级匹配策略(先Header后HTML),减少不必要的请求;指纹库支持动态扩展,用户可自定义添加新CMS规则。
敏感目录扫描模块
- 原理:基于HTTP状态码的字典爆破。使用内置字典(
data/dir_dict.txt)生成待探测路径,向目标网站发送HEAD请求(减少带宽消耗),根据响应状态码判断路径有效性(200→存在,301→重定向,403→禁止访问,404→不存在)。 - 优化:引入“基线对比”机制,先请求随机不存在的路径获取基准状态码,过滤误报;支持深度扫描(递归探测子目录)与快速扫描(仅Top 50常见路径)模式切换。
漏洞检测模块
- 原理:基于规则匹配的静态检测。针对常见安全问题设计检测规则:
- 信息泄露:探测敏感文件(如
.git/config、phpinfo.php),若存在则判定为高危漏洞。 - 安全头缺失:检查响应头是否包含
X-Frame-Options、Content-Security-Policy等字段,缺失则标记为中危风险。 - 弱口令检测:对HTTP Basic Auth接口使用默认凭据(如
admin:admin)进行爆破,成功则判定为高危。
- 优化:采用分级检测策略,先执行低风险规则(如安全头检查),再执行高风险规则(如文件探测),避免触发目标网站的防御机制。
系统交互与数据处理原理
- GUI与业务层通信:通过PyQt5的信号(
Signal)机制实现异步交互。例如,用户点击“开始扫描”按钮时,界面发送start_scan信号,业务层接收后启动扫描线程,同时通过update_log信号实时更新日志区内容,避免界面冻结。 - 结果存储与展示:扫描结果以JSON格式存储(包含类型、URL、风险等级、详情等字段),业务层汇总后生成统计摘要(如端口数量、漏洞数量),表现层通过表格(
QTableWidget)与树形控件(QTreeWidget)分级展示,高危漏洞以红色高亮标识。 - 报告导出:支持导出为HTML与JSON格式,HTML报告通过模板引擎(如
Jinja2)生成可视化页面,包含扫描目标、时间、风险分布图表及详细结果,便于教学演示与文档提交。
异常处理与稳定性设计
- 超时与重试:所有网络请求均设置超时时间(默认3秒),超时后自动重试1次,避免单点故障导致扫描中断。
- 线程安全:使用
queue.Queue管理任务队列与结果队列,确保多线程环境下的数据一致性;关键操作(如文件读写)加锁(threading.Lock)防止资源竞争。 - 用户中断:提供“停止扫描”按钮,通过设置全局标志位(
self.stop_flag = True)通知各线程优雅退出,避免强制终止导致资源泄漏。
通过以上原理设计,系统在保证功能完整性的同时,兼顾了扫描效率、稳定性与易用性,能够满足教学场景下对Web资产发现与基础漏洞检测的实践需求。