DSScan(一)
PyxYuYu opened this issue · 0 comments
PyxYuYu commented
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
如果设置为True
,Django
会在创建数据表的时候对这一列创建数据库索引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
- 离新年越来越近了,附近的鞭炮声此起彼伏,小镇上的气氛也渐渐的浓烈了起来,新年真的来了!