大数跨境
0
0

用DJango调戏WEB漏洞验证

用DJango调戏WEB漏洞验证 点融黑帮
2018-04-23
1
导读:使用Django完成Web上的POC批量验证系统

本文旨在提供一种线上POC批量验证的思路

   简介

Mafia·叶云齐

Django,python优秀开源Web框架中的“重量级”选手,模式为MTV(模型M,模板T和视图V)。它拥有强大的数据库功能、模板系统以及缓存系统等等,功能强大且稳定。最重要的是,Django 中提供了开发常用到的模块,减少了重复代码,开发者可以愉快地进行快速开发。

POC(Proof of Concept)即漏洞证明,信息安全圈子里的老司机都明白它的“分量”。


Mafia·叶云齐

目标  

对于安全从业者来说,POC在漏洞验证中必不可缺。新的旧的POC都应当收集管理,等企业有新项目上线前集中验证。目前POC验证框架已经有不少了,大多依赖一些环境运行在本地。

今天,我们就来聊聊使用Django来搭建一个非常简易的POC集中验证系统的思路,搭建完毕后可供小伙伴们使用。对于使用者来说,不需要安装任何环境,也不需要自己run什么脚本,仅仅需要线上丢一条url,就可以实现POC群的集中验证。


   设计流程

Mafia·叶云齐

环境:

Python 2.7   Django 1.11   Windows 10

设计流程:

使用Django命令建立一个project并且在项目中新建一个app

D:\django_test>django-admin startproject mypoc


D:\django_test>cd mypoc


D:\django_test\mypoc>python manage.py startapp poc(新建立的app需要加到settings.py的INSTALL_APPS)


需要时可以启动Django自带的测试用服务


D:\django_test\mypoc>python manage.py runserver 0.0.0.0:8000

首先简单介绍下,views.py(视图相关) urls.py(URL路由)文件之间有密切的关系,举个例子:

urls.py:

from poc import views as p_v

urlpatterns = [

    url(r'^index$',p_v.index), #正则URL路由,访问该URL对应的是views里的index函数

]

views.py:

from django.http import HttpResponse

def index(request):

    return HttpResponse("hello django")

此时启动Django,访问/index,就会返回“hello django”,在views.py中,还可以渲染模板Html文件,实现数据的前端显示

访问某正则匹配的url,对应执行视图中的某函数并且渲染模板前端显示,验证系统就是利用了这个逻辑,在views.py中引入第三方POC脚本并在函数中调用,POC验证结果传入渲染的模板html显示。


Mafia·叶云齐

动手实践   

首先写一条URL正则路由

urls.py

from poc import views as p_v

urlpatterns = [

    url(r'^poc_confirm$',p_v.conf), #正则路由,对应views里的conf函数

]

views.py里引入收集的POC,接收到使用者输入的参数URL后调用POC执行,并将验证结果传入html

views.py

from poc import wp as p_w        #引入POC-wp

 

def conf(request):

    u = request.GET.get('urlval', '')  #从前端接收URL参数urlval

    result = p_w.restapi(u)        #调用POC,执行验证函数(restapi),返回POC验证结果

    return render(request, 'conf.html', locals()) #验证结果传入模板渲染

模板Html(用于验证结果的展示,以及传递参数URL)

这样,我们就可以在线上验证我们引入的POC文件了。

外部链接:Github上的一些公开POC


   添加POC群集中验证

Mafia·叶云齐

我们可以将一些收集到的poc都集中在线上,想使用的人仅仅需要丢一条url,就可以进行POC批量验证。

想在我们做的Django验证系统中添加POC步骤也很简单:

1.准备POC,函数封装,将结果return,这个格式也是POC最流行的格式。举个例子,从github拿到了下面一份POC,拷贝到app目录下。

wp2.py:

import requests

def poc(url):

    url = url if '://' else 'http://' + url

    payload = '/wp-json/wp/v2/users'

    url = url.rstrip('/') + payload

    try:

        r = requests.get(url)

        if r.status_code == 200 and '[{"id":1,"name":"' in r.content:

            return 'YES [WordPress 4.7 REST API信息泄露]'

    except Exception:

        return 'NO [WordPress 4.7 REST API信息泄露]'

2.在views.py导入该POC:

from poc import wp2 as p_w2

在views.py的conf函数中调用POC脚本中的验证方法,将验证结果传参并渲染html

def conf(request):

        ......

result3 = p_w2.poc(u)

return render(request, 'conf.html', locals())

3.在conf.html模板文件中加入从views.py中传来的结果参数

<div>

{{result3}}

</div>

OK,现在就添加进去了一条POC,当然我们可以逐步收集并添加大量的POC集中验证


Mafia·叶云齐

结语   

本文仅仅是介绍个简易的demo,用的也是Django自带的测试服务器,主要是提供一种线上POC批量验证的思路。要想真正的投入生产环境使用,效率和稳定性等等很多问题都是需要纳入考虑的(Django + Uwsgi + Nginx的部署方式是个可用的选择方案)。


【声明】内容源于网络
0
0
点融黑帮
点融黑帮——一个充满激情和梦想的技术团队,吸引了来自金融及信息科技领域的顶尖人才。我们正在用技术创新改变传统金融。
内容 374
粉丝 0
点融黑帮 点融黑帮——一个充满激情和梦想的技术团队,吸引了来自金融及信息科技领域的顶尖人才。我们正在用技术创新改变传统金融。
总阅读599
粉丝0
内容374