基于Python的渗透测试辅助系统开发

2018-02-26 08:11吕汝勋龙华秋容振邦
网络安全技术与应用 2018年2期
关键词:有效载荷漏洞笔记

◆吕汝勋 龙华秋 容振邦



基于Python的渗透测试辅助系统开发

◆吕汝勋 龙华秋 容振邦

(五邑大学计算机学院 广东 529020)

近年来,网络安全事件频频爆出,安全问题成为整个社会关注的重点。渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。CToolkit是一款基于Python开发的渗透测试辅助系统,使用Flask框架构建web服务,由三大功能模块组成:资产整理、漏洞利用、笔记,主要实现了主机开放端口及服务信息的收集。已知web应用漏洞的利用,以及测试过程中的有用信息记录,涵盖了渗透测试的几个重要的步骤,能切实提高渗透测试的工作效率。

Python;渗透测试;辅助;Flask

0 引言

身处互联网+时代,互联网及IT产业发展速度空前,众多优秀的软件产品如雨后春笋般涌现,但是,高速发展的机遇往往伴随着巨大的挑战,近年来频频爆出的网络安全事件影响及危害极其重大,WannaCry的勒索病毒等一系列网络安全事件,彰显着当前社会的网络安全环境的不容乐观,网络安全问题已经成为了整个社会所关注的头等大事。

渗透测试是通过模拟攻击来评估网络系统安全的一种方法,能有效地预防大多数网络安全事件的发生。由于已知漏洞种类繁多,而未知漏洞还在逐日增长,为每个漏洞准备一个单独的工具,会严重影响渗透测试的工作效率,安全工作者亟需一个揉合多种渗透测试工具的系统,提高渗透测试的效率。

1 系统设计

一次渗透测试过程,根据目标的复杂性不同,需要多种方法进行尝试,为了方便渗透测试工作的进行,将为本系统设计以下三个重要的功能模块:资产整理、漏洞利用、随手笔记。

1.1资产整理

资产整理是针对目标网络主机的信息收集,探测并记录主机开放的端口及服务,信息收集作为渗透测试的第一步,端口及开放服务信息是渗透测试过程中的重要突破口,资产整理功能模块用以收集主机及其对应端口服务信息。

1.2漏洞利用

漏洞利用是利用已知的应用漏洞,对目标Web应用可能存在的利用点进行检测与利用,检测并成功利用漏洞,是渗透测试出报告的重要凭据,根据Web应用基于HTTP协议的通性,修改该协议的内容可达到对Web应用系统进行漏洞检测与利用的目的,漏洞利用功能模块用以利用已知漏洞对目标应用发起攻击利用。

1.3随手笔记

随手笔记是在记录渗透测试过程中有用信息的模块,针对手动测试过程中发现的多种潜在可利用线索进行记录(包括图片与文字),需要随时做好笔记,方便更深入检测工作的进行,随手笔记功能模块用以记录渗透测试过程中的零碎记忆。

测试工作开始,首先对目标主机进行端口扫描收集服务开放信息,再根据收集到的信息测试可能存在的漏洞,而整个测试过程中持续时间比较长,偶尔会有新的线索需要及时记录,则使用随手笔记模块记录零碎记忆。

2 具体实现

系统是基于Python3.5开发的,使用Flask的web应用框架,遵守RESTful的应用接口规范,以mongodb作为数据库,redis做消息队列结果存储及命令行标准输出的缓存,整个系统具有良好的稳定性与便利性。

2.1资产整理

对于不同的渗透测试项目,需为其新建一个新的以项目命名的Project,在每个项目中可以建立扫描任务Task,可以同时扫描多个网段、多个主机,每个Task的扫描强度也分为高中低三等(对应不同的详细程度),对每个Project和Task进行增删查操作时都是直接与对应的RESTFUL(ProjectAPI和TaskAPI)进行交互。

(1)应用接口

资产整理模块使用了两个API,ProjectAPI与TaskAPI。其中,ProjectAPI是创建、获取、删除项目的接口,TaskAPI是创建、获取、删除任务的接口,工作流程如下图1所示。

图1 资产整理

(2)异步任务处理

对目标网络主机进行扫描并收集信息需要持续一段相当长的时间,在这里使用了python的celery消息队列工具,可以将长时间的运行程序转移到Flask之外进行处理,使用redis作为中间人在celery与flask之间传递消息,工作流程如下图2。

图2 消息队列

在输入目标主机并提交之后,flask首先从post请求中提取出参数,并在给celery发送一个创建任务的指令,celery会在后台默默运行新的任务并返回任务创建成功的响应,前端每间隔一段时间会通过ajax向后台请求任务状态,任务完成或失败则会更新任务的状态。

(3)调用Nmap

Nmap是一款免费的、开源的网络探测和网络安全评估工具,在渗透测试中,通常用于扫描目标网络主机的端口服务开放信息。在本项目中,将通过python的subprocess模块创建子进程并运行Nmap,扫描过程的标准输出及时缓存到redis中,完成后返回扫描结果的文件路径:

@celery.task()

defrun_nmap(target, task_id, level):

if not os.path.exists('/tmp/nmap-output'):

os.makedirs('/tmp/nmap-output')

cmds = [

'nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 {} -oX {}',

'nmap -v --open --system-dns -Pn --script=banner,http-title --min-hostgroup 1024 --min-parallelism 1024 {} -oX {}',

'nmap -v -p 1-65535 --open --system-dns -P0 --script=banner,http-title --min-hostgroup 1024 --min-parallelism 1024 {} -oX {}',]

path = '/tmp/nmap-output/{}.xml'.format(task_id)

cmd = cmds[level].format(target, path)

stdout = ''

withPopen(cmd.split(' '), stdout=PIPE) as p:

for line in p.stdout:

stdout+=line.decode('utf-8')

redis_store.hset('task_stdout', task_id, stdout)

ifp.returncode != 0:

raiseCalledProcessError(p.returncode, p.args)

return {'path':path}

2.2 漏洞利用

根据不同种类、不同版本的Web应用进行分类,在每个分类(Vulnerability)里对应有保存的漏洞利用方式,通过修改HTTP协议的参数对存在漏洞的目标Web应用发起攻击利用,可以自行增加、修改、删除不同功能的Payload(有效载荷),并通过有效载荷对存在漏洞的目标Web应用进行测试与利用,所有操作直接与RESTful API(VulnAPI)进行交互。

(1)应用接口

漏洞利用模块使用的API是VulnAPI。VulnAPI是创建、获取、删除Web应用分类、漏洞利用方式的接口,工作流程如下图3所示。

图3 漏洞利用

在分类Vulnerability可以自定义添加,在每个分类里有对应的漏洞Payload(有效载荷),其中包括可自定义的目标URL、HTTP头部信息、Proxy代理选项,Payload(有效载荷)可以自行增加、修改、删除不同功能的Payload(有效载荷),可以对存在漏洞的目标Web应用进行测试与利用,所有操作直接与RESTful API(VulnAPI)进行交互。

(2)操作HTTP

在漏洞利用模块中,核心是实现对HTTP流量的高度自定义化,能够修改HTTP协议的可控参数并对目标发起请求,利用已知Web应用漏洞的利用方式,对有效载荷进行存储和测试,达到有效整合各种Web漏洞利用工具的效果[8]。其中,操作HTTP协议的部分,将使用Python的第三方模块Requests实现,通过自定义已知web漏洞的有效载荷,模拟一个浏览器客户端对服务端发起http请求,并将返回响应结果的原始数据,根据响应值判断是否存在漏洞:

from .parsers import vuln_put_parser

import requests

args = vuln_put_parser.parse_args()

# headers

headers = {

'user-agent': args.user_agent,

'cookie':args.cookie,

'Content-Type':args.content_type}

try:

ifargs.method == 'get': # get

r = requests.get(…)

ifargs.method == 'post': # post

r = requests.post(…)

ifargs.method == 'file': #fileupload

files = json.loads(args.payload)

data = [files[name], files['content']]

r = requests.post(…,files=data,…)

exceptBaseException as e:

return {'content':'request error: '+str(e)}

return {'content':r.content, 'headers':r.headers}

2.3 随手笔记

随手笔记Note使用Wysiwyg(所见即所得)编辑器作为每一篇文章(笔记)编辑和展示的核心,本项目采用Summernote在线编辑器,能直接迅速编辑各类格式的文字以及粘贴截图,保证记忆记录的及时性。并且,所有增删查改操作都与RESTful API(NoteAPI)交互完成。

(1)应用接口

随手笔记模块使用的API是NoteAPI。NoteAPI是创建、删除、获取、修改文章(笔记)的接口,工作流程如下图4所示。

图4 随手笔记

(2)递归操作

每一篇文章都可以拥有子节点(文章),可以实现无限递归添加子节点,每篇文章最多只能含有一个父节点,每个节点的文章都可以编辑删除和添加子节点,编辑文章时可以实现实时保存到数据库,所有增删查改操作都与RESTful API(NoteAPI)交互完成。递归操作大部分是前端Javascript完成的,结合使用Vue.js前端框架,以添加新文章节点为例,通过Vue.js的自定义组件递归添加节点:

varnoteList = {

name: 'note-list',

template: '{note_list_html_source}',

props: ['note'],

methods: {

add_new_note: function(){

...

$.ajax({

url: '/api/note/'+that.note.note_id,

type: 'post',

data: {title: app.newNote},

success: function(data){ that.note.children.push(data) },

});},}}

var app = new Vue({

el: '#panel',

components:{ 'note-list': noteList },

methods:{

add_new_note: function(){

var that = this;

$.ajax({

...

success: function(data){

that.notes.push(data)

that.newNote = ''; },

});}}})

3 功能测试

3.1创建扫描任务

在系统中创建新的项目,并在对应项目中输入主机名或IP地址创建扫描任务,创建的任务并发进行,可以看到对应任务的状态以及结果,如下图5所示。

图5 扫描任务

3.2 s2-016漏洞利用

输入必填与选填参数之后,可以对目标web应用发起http请求,并附上自定义的payload(有效载荷)进行漏洞测试,以存在s2-016反序列化漏洞的虚拟环境,测试有效载荷时选用了执行系统命令“cat /etc/passwd”,测试的返回结果如下图6所示。

图6 执行命令

3.3 编辑文章

根据标题创建文章之后,可以根据summernote提供的格式,编辑文字及图片,以添加超链接与直接粘贴图片为例,如下图7所示。

图7 编辑文章

4 结束语

本文详细介绍了一款基于Python的渗透测试辅助系统的设计与实现。其设计使用了Flask的Web应用框架,并结合了RESTful的设计,后期也可以轻松实现功能扩展。同时,创新地使用了Celery任务队列,实现了异步任务的稳定运行。项目总共实现了三大基本功能模块:资产整理、漏洞利用、随手笔记。资产整理,针对目标网络主机的信息收集,探测并记录主机开放的端口及服务;漏洞利用,利用已知的应用漏洞,对目标Web应用可能存在的利用点进行检测与利用;随手笔记,记录渗透测试过程中发现的有用信息(包括图片与文字)。通过在实际环境进行的大量扫描测试,与虚拟环境中Web应用漏洞的测试,以及实际渗透测试过程中的笔记记录,验证了以上三大模块功能的实用性与准确性。并在开发测试过程中总结出了以下几点问题:采用Nmap作为资产整理模块扫描器的核心,在扫描大量端口或主机时会因为防火墙的阻挡消耗大量的时间,而且会被混淆正确的端口开放信息;漏洞利用模块需要手动收集大量Payload(有效载荷),目前阶段还欠缺丰富性。针对以上项目实测中发现的问题,将会在日后的学习中寻找解决办法,争取将该项目完善成更加方便的渗透测试辅助系统。

[1]王世伟.论信息安全、网络安全、网络空间安全[J].中国图书馆学报,2015.

[2]梁娟.基于黑盒的渗透测试技术研究[J].科技展望,2016.

[3]练斌,刘永键.渗透测试的信息收集工具设计与开发[J].安徽电子信息职业技术学院学报,2017.

[4]裴兰珍,罗赟骞,景劼.网络安全漏洞渗透测试框架综述[J].电子信息对抗技术,2016.

[5]杨超,徐如志,杨峰.基于消息队列的多进程数据处理系统[J].计算机工程与设计,2010.

[6]尚广明.Nmap渗透测试指南[J].信息安全与通信保密,2015.

[7]李丹.网络攻击重放技术研究[D].北京邮电大学,2014.

[8]刘志凯.基于Web的Python编程环境研究[D].新疆农业大学,2015.

2016年国家级、省级高等学校大学生创新创业训练计划项目。

猜你喜欢
有效载荷漏洞笔记
漏洞
理念牵引 机制创新 人才驱动 做有效载荷创新发展领跑者
面向有效载荷数字化研制的标准化工作转型初探
卫星有效载荷研制流程的策划与推进
2020.3.21~2020.4.20中国运载火箭发射记录表
学写阅读笔记
学写阅读笔记
三明:“两票制”堵住加价漏洞
漏洞在哪儿
我的自然笔记(一)