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 扫描策略

  1. 使用masscan进行网段粗略扫描
  2. 使用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 接口列表

  1. 爱站: https://baidurank.aizhan.com/baidu/{domain}/
  2. 百度云观测: http://ce.baidu.com/index/getRelatedSites?site_address={domain}
  3. hackertarget: https://api.hackertarget.com/hostsearch/?q={domain}
  4. IP138: https://site.ip138.com/{domain}/domain.htm
  5. crt.sh SSL证书反查: https://crt.sh/?q=%25.{domain}
  6. 千寻:
    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 待实现功能

  1. Redis缓存加速: 提高系统响应速度
  2. WebSocket通信: 实现实时数据更新
  3. 前后端分离: 结合React/Vue等现代前端框架
  4. 代码优化: 变量命名、数据库结构调整
  5. 功能完善: 增加更多实用功能

9. 开发建议

  1. 合理使用轮子: 整合现有工具提高开发效率
  2. 注重可视化: 使用ECharts等工具提升数据展示效果
  3. 模块化开发: 各功能模块保持独立,便于维护
  4. 安全考虑: 处理好用户输入,防止注入攻击
  5. 性能优化: 大数据量时考虑异步处理和分页

10. 资源链接

  1. H+框架
  2. ECharts官网
  3. TideFinger指纹库
  4. CMS组件描述及图标

通过以上技术方案,可以构建一个功能全面、扩展性强的Web漏洞扫描系统。开发过程中应注重模块化设计和代码可维护性,为后续功能扩展打下良好基础。

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接口实现 2.3 功能展示 资产名称跳转到漏洞细节 点击漏洞URL展开详细漏洞信息 3. 端口扫描模块 3.1 扫描策略 使用masscan进行网段粗略扫描 使用nmap进行详细扫描 3.2 IP归属地查询 3.3 可视化展示 端口和服务类别的饼状图 资产列表展示 4. 指纹识别模块 4.1 技术组合 基础探测 : wappalyzer 传统指纹识别 : TideFinger指纹库 4.2 数据库模型 4.3 Admin配置 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} 千寻: 5.2 功能特点 超时域名自动丢弃 获取网页标题 域名监控功能(统计新增域名) 6. 目录扫描模块 6.1 实现方式 集成Dirsearch工具 计划集成top 1000字典并统计命中率 7. 实用小工具模块 7.1 功能列表 IP提取 文本对比 批量获取网页标题 SSH批量爆破验证 7.2 SSH批量爆破验证示例 8. 优化方向 8.1 待实现功能 Redis缓存加速 : 提高系统响应速度 WebSocket通信 : 实现实时数据更新 前后端分离 : 结合React/Vue等现代前端框架 代码优化 : 变量命名、数据库结构调整 功能完善 : 增加更多实用功能 9. 开发建议 合理使用轮子 : 整合现有工具提高开发效率 注重可视化 : 使用ECharts等工具提升数据展示效果 模块化开发 : 各功能模块保持独立,便于维护 安全考虑 : 处理好用户输入,防止注入攻击 性能优化 : 大数据量时考虑异步处理和分页 10. 资源链接 H+框架 ECharts官网 TideFinger指纹库 CMS组件描述及图标 通过以上技术方案,可以构建一个功能全面、扩展性强的Web漏洞扫描系统。开发过程中应注重模块化设计和代码可维护性,为后续功能扩展打下良好基础。