Django 初次尝试编写 Web 漏洞扫描器挖坑记录
字数 1291 2025-08-20 18:18:23

Django Web漏洞扫描器开发指南

技术栈选择

  • Python 3.8.0: 支持高级特性,编写Web漏扫灵活
  • Django 3: 文档全面,适合新手
  • MySQL: 经典关系型数据库,Django支持良好
  • H+ 4.1框架: 基于Bootstrap 3.3.6的开源前端框架
  • ECharts: 百度开源的数据可视化JS图表插件

核心功能模块实现

漏洞检测模块

实现思路

  • 使用AWVS 13 API进行目标资产爬取
  • 将获取的信息转发给xray进行漏洞检测
  • 利用xray的webhook功能获取漏洞信息

Django 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
    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', {})

注意事项

  • 使用@csrf_exempt装饰器关闭CSRF检测
  • 解析xray的POST请求中的漏洞数据

端口扫描模块

扫描策略

  1. 使用masscan进行网段粗略扫描
  2. 使用nmap进行详细扫描

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])

指纹识别模块

技术组合

数据库模型设计

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'

Admin配置

from django.contrib import admin
from django.forms import TextInput

@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'})},
    }

域名探测模块

使用API接口

  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=%.{domain}
  6. 千寻: POST请求到https://www.dnsscan.cn/dns.html,数据为{"ecmsfrom": "8.8.8.8", "show": "none", "keywords": domain}

功能特点

  • 自动过滤访问超时的域名
  • 获取网页标题
  • 支持域名监控,统计新增域名数量

目录扫描模块

  • 集成Dirsearch工具
  • 计划实现top 1000字典计数功能,记录高命中字典

小工具模块

包含功能

  1. IP提取
  2. 文本对比
  3. 批量获取网页标题
  4. SSH批量爆破验证

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)

优化方向

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

资源链接

  1. H+ 4.1框架
  2. TideFinger指纹库
  3. CMS组件描述及图标
  4. 指纹JSON数据

开发建议

  1. 充分利用Django Admin简化后台管理
  2. 使用Simple UI美化Admin界面
  3. 合理设计数据库模型,便于扩展
  4. 优先集成成熟工具,再考虑自主开发
  5. 注重前端用户体验,合理使用ECharts等可视化工具
Django Web漏洞扫描器开发指南 技术栈选择 Python 3.8.0 : 支持高级特性,编写Web漏扫灵活 Django 3 : 文档全面,适合新手 MySQL : 经典关系型数据库,Django支持良好 H+ 4.1框架 : 基于Bootstrap 3.3.6的开源前端框架 ECharts : 百度开源的数据可视化JS图表插件 核心功能模块实现 漏洞检测模块 实现思路 使用AWVS 13 API进行目标资产爬取 将获取的信息转发给xray进行漏洞检测 利用xray的webhook功能获取漏洞信息 Django Webhook接口代码 注意事项 使用 @csrf_exempt 装饰器关闭CSRF检测 解析xray的POST请求中的漏洞数据 端口扫描模块 扫描策略 使用masscan进行网段粗略扫描 使用nmap进行详细扫描 IP归属地查询 指纹识别模块 技术组合 Wappalyzer : 基本指纹探测 TideFinger : 传统指纹识别(基于 TideSec/TideFinger ) 数据库模型设计 Admin配置 域名探测模块 使用API接口 爱站: 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=%.{domain} 千寻: POST请求到 https://www.dnsscan.cn/dns.html ,数据为 {"ecmsfrom": "8.8.8.8", "show": "none", "keywords": domain} 功能特点 自动过滤访问超时的域名 获取网页标题 支持域名监控,统计新增域名数量 目录扫描模块 集成Dirsearch工具 计划实现top 1000字典计数功能,记录高命中字典 小工具模块 包含功能 IP提取 文本对比 批量获取网页标题 SSH批量爆破验证 SSH批量爆破验证实现 优化方向 Redis缓存加速 : 提高系统响应速度 WebSocket通信 : 实现实时任务状态更新 前后端分离 : 使用React/Vue等框架重构前端 代码优化 : 重构变量命名和数据库结构 功能完善 : 增加更多实用功能 资源链接 H+ 4.1框架 TideFinger指纹库 CMS组件描述及图标 指纹JSON数据 开发建议 充分利用Django Admin简化后台管理 使用Simple UI美化Admin界面 合理设计数据库模型,便于扩展 优先集成成熟工具,再考虑自主开发 注重前端用户体验,合理使用ECharts等可视化工具