PyxYuYu/MyBlog

DSScan(一)

PyxYuYu opened this issue · 0 comments

A day is a miniature of eternity.

0x01 DSScan

  • PyCharm 创建 DSScan 项目(Django
  • cmd 下创建 sqliscan 应用(app
   python manage.py startapp sqliscan
  • models.py 中添加数据模型(在数据库中创建一张数据表用于存储数据)
    • SqlmapApi 相关数据:
      • task_id : 任务id
      • target_url : 目标url
      • scan_status : 扫描状态
      • scan_data : 扫描结果数据
      • scan_log : 扫描日志
      • vulnerable : 是否存在漏洞(根据 scan_data 来判断)
    • 数据表就使用上面所列字段
       from django.db import models
       
       class SqlInjection(models.Model):
           task_id = models.CharField(max_length=1000, db_index=True)
      	 target_url = models.URLField(max_length=1000, unique=True)
      	 scan_status = models.CharField(max_length=1000)
      	 scan_data = models.CharField(max_length=1000)
      	 scan_log = models.CharField(max_length=1000)
      	 vulnerable = models.BooleanField(default=False, db_index=True)
      	 
      	 class Meta:
      	     ordering = ('-vulnerable', )
    • 默认排序方式: 存在漏洞的排列在前面
    • max_length 是必要参数
    • db_index 如果设置为 TrueDjango 会在创建数据表的时候对这一列创建数据库索引
    • unique 如果设置为 True , 这个字段的值在整个表中必须是唯一的
    • settings.py 文件中激活应用
       INSTALLED_APPS = [
          ...
      	'sqliscan',
          ]
    • 创建数据表(利用 migrations 命令)
       python manage.py makemigrations sqliscan
    • 如果出现以下错误
        ImportError: No module named psycopg2.extras
    * 说明没有安装 `psycopg2` ,利用 `PyCharm` 安装即可
    
    • 运行正常,返回
        Migrations for 'sqliscan':
          0001_initial.py:
            - Create model SqlInjection
    • 创建了一个迁移策略文件(即所有的数据模型中字段改动都会记录在这个文件中),没有作用到数据库中,需要继续运行以下命令,即可将其更新至数据库中(创建数据表)
      cmd python manage.py migrate
  • 创建后台管理员账户(admin/rootroot
   python manage.py createsuperuser
  • 后台虽然可以登录,但是数据模型没有显示,所以需要将数据模型(Models)添加到 Admin 后台中
    • sqliscan/admin.py
       from django.contrib import admin
       from .models import SqlInjection
       
       class SqlInjectionAdmin(admin.ModelAdmin):
           list_display = ('task_id', 'target_url', 'scan_data', 'vulnerability', )
      	 list_filter = ('scan_status', 'vulnerability', )
      	 search_fields = ('target_url', )
      	 ordering = ('-vulnerability', 'task_id', )
      
      admin.site.register(SqlInjection, SqlInjectionAdmin) 
    • 后台中显示 task_id 等字段的标签名一般都是字段名,除非在数据模型中用 verbose_name 参数重新定义在后台显示的标签名
       # -*- coding: utf-8 -*-
       
       task_id = models.CharField('任务id', max_length=1000, db_index=True)
    • 如果 verbose_name 参数在第一个位置,可以省略不写
    • list_display : 上边按列显示
    • search_fields : 上边的快速查询栏(搜索栏)
    • list_filter : 右边的按条件过滤
    • ordering : 类似数据模型中的 Meta 用于排序
  • 创建视图显示所有任务
    • sqliscan/views.py
     from django.shortcuts import render
     from .models import SqlInjection
     
     def sql_tasks(request):
         tasks = SqlInjection.objects.all()
         return render(request, 'sqliscan/task.html', {'tasks': tasks})
    • 所有视图函数都需要 request 参数,最后返回的是一个 HttpResponse 对象(这里用 render 渲染)
    • render() 中第二个参数是渲染模板 -- templates 模板
  • templates 模板
    • 模板文件一般都会放置在 templates 文件夹内,在 sqliscan 应用文件夹下创建 templates 文件夹
    • templates 文件夹中,创建 sqliscan 文件夹
       templates/
           sqliscan/
      	     task.html
      		 base.html
    • 模板文件夹中,一般会存在一个 base.html
    • base.html 就如同父类,其他的模板文件可以利用 {% extends "sqliscan/base.html" %} 继承这个模板
    • base.html 中会导入 静态文件,利用 {% load staticfiles %} (行首)
      • 成功导入 静态文件,可以在模板中使用 {% static %} 标签
      • static 静态文件夹,创建在 manage.py 同级目录,需要在 settings.py 中添加
         STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"), )
      • {% block %} 标签用于定义 block (块),此后继承的模板文件只需要书写 block 块中的内容即可
         {% load staticfiles %}
         <!DOCTYPE html>
         <html>
         <head>
             <title>{% block title %}{% endblock %}</title>
      	   <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css">
      	   <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
      	   <script src="http://cdn.bootcss.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
         </head>
         <body>
             <div class="container">
      	       <div class="row-fluid">
      		       <!-- 顶部导航栏 -->
      		       <div class="col-lg-3">
      			   <!-- 侧边导航栏 -->
      			   </div>
      			   <div class="col-lg-9">
      			       {% block content %}
      				   
      				   {% endblock %}
      			   </div>
      		   </div>
      	   </div>
         </body>
         </html>
    • task.html 继承 base.html
       {% extends "sqliscan/base.html" %}
       
       {% block title %}DSScan{% endblock %}
       
       {% block content %}
       <!-- 所有task内容 -->
       {% endblock %}
  • 需要在浏览器中显示的话,需要 url,编辑 DSScan/urls.py 进行一一映射(利用正则表示 URL
   from django.conf.urls import url
   from django.contrib import admin
   
   urlpatterns = [
       url(r'^admin/', admin.site.urls),
	   url(r'^$', 'sqliscan.views.sql_tasks', name='sql_tasks'),
   ]
0x02 Life

  • 离新年越来越近了,附近的鞭炮声此起彼伏,小镇上的气氛也渐渐的浓烈了起来,新年真的来了!