Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DSScan(一) #72

Open
PyxYuYu opened this issue Jan 2, 2017 · 0 comments
Open

DSScan(一) #72

PyxYuYu opened this issue Jan 2, 2017 · 0 comments

Comments

@PyxYuYu
Copy link
Owner

PyxYuYu commented Jan 2, 2017

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

  • 离新年越来越近了,附近的鞭炮声此起彼伏,小镇上的气氛也渐渐的浓烈了起来,新年真的来了!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant