Django初次尝试编写Web漏洞扫描器挖坑记录
字数 1343 2025-08-15 21:31:05
Django构建Web漏洞扫描器开发指南
1. 技术栈选择
1.1 核心框架
- Python 3.8+: 提供高级特性支持,编写灵活
- Django 3+: 文档全面,适合新手,集成方便
- MySQL: 经典关系型数据库,可替换为其他Django支持的数据库
1.2 前端技术
- H+ 4.1框架: 基于Bootstrap 3.3.6的开源收费框架
- ECharts: 百度开源的数据可视化JS图表插件
2. 漏洞检测模块实现
2.1 设计思路
- 整合现有工具(AWVS 13 + xray)提高效率
- AWVS负责爬取目标资产信息
- xray负责漏洞检测
2.2 WebHook接口实现
import json
from django.shortcuts import render
from django.views.generic.base import View
from django.views.decorators.csrf import csrf_exempt
class WebHook(View):
@csrf_exempt # 禁用CSRF验证
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
def post(self, request):
vul_data = json.loads(request.body)
if 'detail' in str(request.body):
print('漏洞插件:', vul_data['plugin'])
print('漏洞位置:', vul_data['target']['url'])
print('漏洞分类:', vul_data['vuln_class'])
return render(request, 'test.html', {})
2.3 功能展示
- 资产名称跳转到漏洞细节
- 点击漏洞URL展开详细漏洞信息
3. 端口扫描模块
3.1 扫描策略
- 使用masscan进行网段粗略扫描
- 使用nmap进行详细扫描
3.2 IP归属地查询
ip_api_url = f'http://freeapi.ipip.net/{ip_addr}'
r = requests.get(url=ip_api_url)
addr_list = literal_eval(r.text)
addr = ' '.join(addr_list[:3])
3.3 可视化展示
- 端口和服务类别的饼状图
- 资产列表展示
4. 指纹识别模块
4.1 技术组合
- 基础探测: wappalyzer
- 传统指纹识别: TideFinger指纹库
4.2 数据库模型
from django.db import models
from django.utils.html import format_html
class Component(models.Model):
name = models.CharField(max_length=200, verbose_name='组件名称')
desc = models.CharField(max_length=200, verbose_name='组件描述')
icon = models.FileField(upload_to='icons/', verbose_name='组件logo', max_length=100)
category = models.CharField(max_length=100, verbose_name='组件类别', blank=True)
def icon_data(self):
return format_html(
'',
self.icon,
)
icon_data.short_description = 'Logo'
4.3 Admin配置
from django.contrib import admin
from django.forms import TextInput
from django.db import models
@admin.register(Component)
class ComponentAdmin(admin.ModelAdmin):
list_display = ('name', 'desc', 'category', 'icon_data')
search_fields = ('name', 'desc')
readonly_fields = ('icon_data',)
list_per_page = 20
fieldsets = (
('编辑组件', {
'fields': ('name', 'desc', 'category', 'icon', 'icon_data')
}),
)
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size': '59'})},
}
5. 域名探测模块
5.1 接口列表
- 爱站:
https://baidurank.aizhan.com/baidu/{domain}/ - 百度云观测:
http://ce.baidu.com/index/getRelatedSites?site_address={domain} - hackertarget:
https://api.hackertarget.com/hostsearch/?q={domain} - IP138:
https://site.ip138.com/{domain}/domain.htm - crt.sh SSL证书反查:
https://crt.sh/?q=%25.{domain} - 千寻:
url = 'https://www.dnsscan.cn/dns.html' datas = {"ecmsfrom": '8.8.8.8', "show": 'none', "keywords": domain}
5.2 功能特点
- 超时域名自动丢弃
- 获取网页标题
- 域名监控功能(统计新增域名)
6. 目录扫描模块
6.1 实现方式
- 集成Dirsearch工具
- 计划集成top 1000字典并统计命中率
7. 实用小工具模块
7.1 功能列表
- IP提取
- 文本对比
- 批量获取网页标题
- SSH批量爆破验证
7.2 SSH批量爆破验证示例
import os
import pexpect
import progressbar
with open('22.txt') as f:
lines = f.readlines()
attack_ips = []
p = progressbar.ProgressBar()
for line in p(lines):
ssh = pexpect.spawn('ssh root@{ip}'.format(ip=line))
try:
flag = ssh.expect(['continue', 'password:'], timeout=3)
if str(flag).isnumeric():
attack_ips.append(line)
except pexpect.EOF:
ssh.close()
except pexpect.TIMEOUT:
ssh.close()
for ip in attack_ips:
with open('ssh.txt','a') as f:
f.write(ip)
8. 优化方向
8.1 待实现功能
- Redis缓存加速: 提高系统响应速度
- WebSocket通信: 实现实时数据更新
- 前后端分离: 结合React/Vue等现代前端框架
- 代码优化: 变量命名、数据库结构调整
- 功能完善: 增加更多实用功能
9. 开发建议
- 合理使用轮子: 整合现有工具提高开发效率
- 注重可视化: 使用ECharts等工具提升数据展示效果
- 模块化开发: 各功能模块保持独立,便于维护
- 安全考虑: 处理好用户输入,防止注入攻击
- 性能优化: 大数据量时考虑异步处理和分页
10. 资源链接
通过以上技术方案,可以构建一个功能全面、扩展性强的Web漏洞扫描系统。开发过程中应注重模块化设计和代码可维护性,为后续功能扩展打下良好基础。