推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

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

更新时间:2019-12-24 14:13:45 大小:1M 上传用户:songhuahua查看TA发布的资源 标签:python渗透测试辅助系统 下载积分:1分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

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


部分文件列表

文件名 大小
基于Python的渗透测试辅助系统开发.pdf 1M

部分页面预览

(完整内容请下载后查看)
安全模型、算法与编程  
基于 Python 的渗透测试辅助系统开发  
◆吕汝勋 龙华秋 容振邦  
(五邑大学计算机学院 广东 529020)  
摘要:近年来,网络安全事件频频爆出,安全问题成为整个社会关注的重点。渗透测试是通过模拟恶意黑客的攻击方法,来评估计算  
机网络系统安全的一种评估方法。CToolkit 是一款基于 Python 开发的渗透测试辅助系统,使用 Flask 框架构建 web 服务,由三大功能  
模块组成:资产整理、漏洞利用、笔记,主要实现了主机开放端口及服务信息的收集。已知 web 应用漏洞的利用,以及测试过程中的  
有用信息记录,涵盖了渗透测试的几个重要的步骤,能切实提高渗透测试的工作效率。  
关键词:Python;渗透测试;辅助;Flask  
2.1 资产整理  
0
引言  
对于不同的渗透测试项目为其新建一个新的以项目命名  
的Project,在每个项目中可以建立扫描任务Task,可以同时扫描  
多个网段个主机个Task的扫描强度也分为高中低三对  
应不同的详细程度每个Project和Task进行增删查操作时都是  
直接与对应的RESTFUL(ProjectAPI和TaskAPI)进行交互。  
(1)应用接口  
身处互联网+时代,互联网及IT产业发展速度空前,众多优  
秀的软件产品如雨后春笋般涌现速发展的机遇往往伴  
随着巨大的挑战年来频频爆出的网络安全事件影响及危害极  
其重大WannaCry的勒索病毒等一系列网络安全事件显着当  
前社会的网络安全环境的不容乐观络安全问题已经成为了整  
个社会所关注的头等大事。  
资产整理模块使用了两个API,ProjectAPI与TaskAPI。其中,  
ProjectAPI是创建、获取、删除项目的接口,TaskAPI是创建、获  
取、删除任务的接口,工作流程如下图1所示。  
渗透测试是通过模拟攻击来评估网络系统安全的一种方法,  
能有效地预防大多数网络安全事件的发生于已知漏洞种类繁  
未知漏洞还在逐日增长每个漏洞准备一个单独的工具,  
会严重影响渗透测试的工作效率全工作者亟需一个揉合多种  
渗透测试工具的系统,提高渗透测试的效率。  
资产整理  
1
系统设计  
请求  
响应  
Project Api  
Project  
Task  
一次渗透测试过程据目标的复杂性不同要多种方法  
进行尝试了方便渗透测试工作的进行为本系统设计以下  
三个重要的功能模块:资产整理、漏洞利用、随手笔记。  
1.1资产整理  
请求  
响应  
Task Api  
资产整理是针对目标网络主机的信息收集测并记录主机  
开放的端口及服务息收集作为渗透测试的第一步口及开  
放服务信息是渗透测试过程中的重要突破口产整理功能模块  
用以收集主机及其对应端口服务信息。  
MongoDB  
stdout  
Redis  
任务队列  
1.2漏洞利用  
图1 资产整理  
漏洞利用是利用已知的应用漏洞,对目标Web应用可能存在  
的利用点进行检测与利用测并成功利用漏洞渗透测试出  
报告的重要凭据据Web应用基于HTTP协议的通性改该协  
议的内容可达到对Web应用系统进行漏洞检测与利用的目的,漏  
洞利用功能模块用以利用已知漏洞对目标应用发起攻击利用。  
1.3随手笔记  
(2)异步任务处理  
对目标网络主机进行扫描并收集信息需要持续一段相当长  
的时间这里使用了python的celery消息队列工具以将长时  
间的运行程序转移到Flask之外进行处理使用redis作为中间人在  
celery与flask之间传递消息,工作流程如下图2。  
Message Queue  
Redis  
随手笔记是在记录渗透测试过程中有用信息的模块对手  
动测试过程中发现的多种潜在可利用线索进行记包括图片与  
文字需要随时做好笔记,方便更深入检测工作的进行,随手  
笔记功能模块用以记录渗透测试过程中的零碎记忆。  
测试工作开始先对目标主机进行端口扫描收集服务开放  
信息根据收集到的信息测试可能存在的漏洞整个测试过  
程中持续时间比较长尔会有新的线索需要及时记录使用  
随手笔记模块记录零碎记忆。  
Message  
Task Request  
Task Request  
Flask Server  
Message  
Message  
Celery Server  
Task Response  
Task Response  
图2 消息队列  
在输入目标主机并提交之后,flask首先从post请求中提取出  
参数,并在给celery发送一个创建任务的指令,celery会在后台默  
默运行新的任务并返回任务创建成功的响应端每间隔一段时  
间会通过ajax向后台请求任务状态,任务完成或失败则会更新任  
务的状态。  
2
具体实现  
系统是基于Python3.5开发的,使用Flask的web应用框架,遵  
守RESTful的应用接口规范,以mongodb作为数据库,redis做消息  
队列结果存储及命令行标准输出的缓存个系统具有良好的稳  
定性与便利性。  
(3)调用Nmap  
Nmap是一款免费的、开源的网络探测和网络安全评估工具,  
58‖  
安全模型、算法与编程  
在渗透测试中,通常用于扫描目标网络主机的端口服务开放信  
息。在本项目中,将通过python的subprocess模块创建子进程并运  
行Nmap描过程的标准输出及时缓存到redis中成后返回扫  
描结果的文件路径:  
知Web应用漏洞的利用方式,对有效载荷进行存储和测试,达到  
有效整合各种Web漏洞利用工具的效果[8]作HTTP协议  
的部分,将使用Python的第三方模块Requests实现,通过自定义  
已知web漏洞的有效载荷,模拟一个浏览器客户端对服务端发起  
http请求,并将返回响应结果的原始数据,根据响应值判断是否  
存在漏洞:  
@celery.task()  
defrun_nmap(target, task_id, level):  
if not os.path.exists('/tmp/nmap-output'):  
os.makedirs('/tmp/nmap-output')  
from .parsers import vuln_put_parser  
import requests  
cmds = [  
args = vuln_put_parser.parse_args()  
# headers  
'nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism  
1024 {} -oX {}',  
headers = {  
'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 {}',]  
'user-agent': args.user_agent,  
'cookie':args.cookie,  
'Content-Type':args.content_type}  
try:  
ifargs.method == 'get': # get  
path = '/tmp/nmap-output/{}.xml'.format(task_id)  
cmd = cmds[level].format(target, path)  
r = requests.get(…)  
ifargs.method == 'post': # post  
stdout = ''  
r = requests.post(…)  
withPopen(cmd.split(' '), stdout=PIPE) as p:  
for line in p.stdout:  
ifargs.method == 'file': #fileupload  
files = json.loads(args.payload)  
stdout+=line.decode('utf-8')  
data = [files[name], files['content']]  
redis_store.hset('task_stdout', task_id, stdout)  
ifp.returncode != 0:  
r = requests.post(…,files=data,…)  
exceptBaseException as e:  
raiseCalledProcessError(p.returncode, p.args)  
return {'path':path}  
return {'content':'request error: '+str(e)}  
return {'content':r.content, 'headers':r.headers}  
2.3 随手笔记  
2.2 漏洞利用  
根据不同种类、不同版本的Web应用进行分类,在每个分类  
(Vulnerability)里对应有保存的漏洞利用方式,通过修改HTTP  
协议的参数对存在漏洞的目标Web应用发起攻击利用,可以自行  
增加、修改、删除不同功能的Payload(有效载荷并通过有效  
载荷对存在漏洞的目标Web应用进行测试与利用,所有操作直接  
与RESTful API(VulnAPI)进行交互。  
(1)应用接口  
随手笔记Note使用Wysiwyg(所见即所得)编辑器作为每一  
篇文章(笔记)编辑和展示的核心,本项目采用Summernote在线  
编辑器直接迅速编辑各类格式的文字以及粘贴截图证记  
忆记录的及时性。并且,所有增删查改操作都与RESTful API  
(NoteAPI)交互完成。  
(1)应用接口  
随手笔记模块使用的API是NoteAPI。NoteAPI是创建、删除、  
获取、修改文章(笔记)的接口,工作流程如下图4所示。  
随手笔记  
漏洞利用模块使用的API是VulnAPIVulnAPI是创建取、  
删除Web应用分类、漏洞利用方式的接口,工作流程如下图3所  
示。  
Note  
漏洞利用  
Javascript实现  
编辑文章结点  
Vulnerability  
MongoDB  
Payload  
(有效载荷)  
NoteAPI  
请求  
VulnAPI  
响应  
图4 随手笔记  
MongoDB  
数据存取  
(2)递归操作  
每一篇文章都可以拥有子节点(文章可以实现无限递归  
添加子节点篇文章最多只能含有一个父节点个节点的文  
章都可以编辑删除和添加子节点辑文章时可以实现实时保存  
到数据库,所有增删查改操作都与RESTful API(NoteAPI)交互  
完成。递归操作大部分是前端Javascript完成的,结合使用Vue.js  
前端框架,以添加新文章节点为例,通过Vue.js的自定义组件递  
归添加节点:  
图3 漏洞利用  
在分类Vulnerability可以自定义添加每个分类里有对应的  
漏洞Payload(有效载荷其中包括可自定义的目标URL、HTTP  
头部信息、Proxy代理选项,Payload(有效载荷)可以自行增加、  
修改、删除不同功能的Payload(有效载荷可以对存在漏洞的  
目标Web应用进行测试与利用,所有操作直接与RESTful API  
(VulnAPI)进行交互。  
varnoteList = {  
(2)操作HTTP  
name: 'note-list',  
在漏洞利用模块中,核心是实现对HTTP流量的高度自定义  
化,能够修改HTTP协议的可控参数并对目标发起请求,利用已  
template: '{note_list_html_source}',  
59‖  

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载