项目简介
1.此扫描器基于Python3.8.0和Django2.2开发,是一款漏洞扫描器,借助Celery插件实现了异步的端口扫描和后台扫描,而漏洞扫描则使用了著名漏洞扫描工具AWVS的API实现。
2.本项目的前端界面在项目H+的基础上开发
项目前置工作
1.项目下载https://download.csdn.net/download/yanglamei1962/89933375
2.激活虚拟环境
venv\Scripts\activate
3.安装项目依赖
pip install -r requirements.txt
4.数据库同步以及配置
项目需要使用mysql和redis数据库,所以请在部署本项目前先安装mysql和redis
在部署向目前,先在webscanner/settings.py文件中进行数据库配置
# 数据库配置用mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'webscan',
'USER': 'root',
'PASSWORD': '', # 在这里输入密码
'HOST': 'localhost',
'PORT': '3306',
}
}数据库配置完毕后,请在本地数据库新建一个名为webscan的数据库,用于存放本项目的相关数据,数据库建好后在项目根目录用以下命令来迁移和同步项目文件
python manage.py makemigrations
python manage.py migrate
项目的数据库文件已经导出在根目录下的webscan.sql,导入方法请自行百度
项目部署
1.开启redis服务
安装了redis服务后,进入到项目里的Redis-x64-5.0.14.1文件夹,使用如下命令开启redis服务
redis-server.exe redis.windows.conf
2.开启celery服务
redis服务开启后新开一个控制台窗口,输入如下命令开启celery服务。开启celery服务前,请确定虚拟环境中已经安装了celery库,且命令中的"-P eventlet"选项只在windows环境中加入,如果是linux环境部署则不需要此选项
celery -A celery_tasks.main worker -l info -P eventlet --pool=solo
切记redis和celery的开启顺序不能改变,先开启redis再开启celery,因为celery的正常工作需要redis来作为缓存数据库。成功开启celery应该如下图所示(左celery 右redis数据库)
3.启动服务
一切就绪后使用以下命令启动服务
python manage.py runserver
启动后进入浏览器访问以下网址
127.0.0.1:8000
当看到如下登陆界面时,说明项目部署成功
4.漏洞扫描
如果想使用漏洞扫描功能,则需要下载AWVS13.0漏洞扫描工具,并在settings.py中的第130行配置AWVS的密钥信息
# 1.5配置awvs的密钥信息
AWVS_API_KEY = "1986ad8c0a5b3df4d7028d5f3c06e936c4441913fd2af4ef3942a8ef539e98df9"密钥在AWVS的个人设置里生成,如下图所示
示例和演示
1.登陆进入到主界面后,会通过echarts显示一些图标信息以及通过网络爬虫获取的安全资讯和漏洞扫描历史数据等信息
2.漏洞扫描界面会显示历史扫描记录
3.对于扫描完成的目标,通过点击域名,会进入到详情页,这里可以查看目标更详细的信息,且通过点击中间的漏洞,在右边则会实时的显示出此漏洞的详细信息
4.在端口扫描和后台扫描中,输入合法的url地址后点击开始扫描,就会通过celery在后台实时进行扫描任务,并会在扫描结束后,实时的将数据放在表格中
5.扫描完成后结果
6.信息收集和工具等功能都是通过网络爬虫,进行数据的收集和汇总,对收集到的数据进行整理和分析后放在页面上,如图所示
常见问题
1.漏洞扫描功能无法使用
请确保您已经下载了AWVS工具(工具的下载请自行搜索),并在settings.py中配置好了密钥信息
2.端口扫描或后台扫描功能无法使用
如果遇到这种情况,请尝试调整celery_tasks文件夹中的任务对应的tasks.py文件,更尝试更改ports_per_thread参数,这是因为由于项目运行的环境不同,扫描能力也不同,请结合实际情况更改此参数来正常运行项目
def __init__(self, host,ports_per_thread=140): # 如果无法正常允许请尝试更改这个参数
"""
初始化函数,设置要扫描的目标主机和每个线程内允许扫描的端口数量。我的奠奈最多就是140,65535个端口就开差不多500个线程,多了就要报错了
参数:
host (str): 要扫描的目标主机的IP地址或主机名。
ports_per_thread (int, optional): 每个线程内允许扫描的端口数量。默认为140。
"""
self.i = 0
self.host = host
self.open_ports = []
self.ports_per_thread = ports_per_thread
3.首页无法加载
如果遇到首页无法加载的情况,请检查数据库是否配置正常。如果数据库连接正常,请检查AWVS配置是否正确,因为首页会显示部分AWVS得信息
4.信息收集无法正常使用
如遇此问题,大概率是网络问题,此功能所使用得爬虫为requests+bs4单线程爬虫,受网络影响、目标网站以及环境配置等因素影响较大,如果信息获取失败请多尝试几次。同时也欢迎各位能多提建议,能将项目fork过去对项目进行更进一步的优化
完整代码下载地址:基于Django+Celery+Acunetix的漏洞扫描器
https://download.csdn.net/download/yanglamei1962/89933375