实现一个Web版的类Metasploit的攻击框架



这是我现在结题的一个专业实训中的一部分内容,小心翼翼地拿出来分享。

在项目中,攻击模块不仅提供自动化攻击功能,也提供了用户扩展的平台,通过规定编写规则来进行有效的扩展。

(1)攻击模块设计

该攻击模块采用命令行模式,设计功能示意图如下:

(a)指定exp名称攻击:

l全域名扫描

即针对现有的域名全部进行攻击。

python safecatcli.py -m exp_name -n [exploit_file_name] -o all

l单个目标扫描

即对输入的url或者ip地址载入攻击脚本进行攻击。

python safecatcli.py -m exp_name -n [exploit_file_name] -o single -u [url or IP addr]

lIP段扫描

对一个IP段的主机进行攻击。

python safecatcli.py -m exp_name -n [exploit_file_name] -o range -start [your-start-ip-addr] -end [your-end-ip-addr]

(b)指定关键词进行扫描:

you_class_name填你要攻击的flag,比如项目中整合了discuz,ftp,ecshop等,这里要填信息

l指定查询语句攻击

对提交的查询语句进行解析,从es中找出符合条件的域名列表,然后载入一个模块的全部攻击脚本进行攻击。

python safecatcli.py -c [your class name] -q "[your query string]"

比如:攻击台湾的discuz主机

python safecatcli.py -c discuz -q "discuz country:Taiwan"

l指定一个域名攻击

即对提交的一个domain进行攻击,从模块中载入全部脚本进行攻击。

python safecatcli.py -c discuz -u [domain]

(2)攻击模块实现

整个攻击模块的包结构如下:

Safecatcli.py是入口文件,对于如何构建一个命令行解析体系,我们选择使用了Python中的一个库optparse模块完成。使用OptionParser类中的add_option方法就可以轻松添加一条命令行参数,如添加模块选择参数“-m”,实现如下:

对于设计中出现的两个模块(指定攻击脚本模块、指定关键字模块),分别用两个类(EXPModule、KEYModule)来实现。类中的成员变量、类方法名称以及功能如下:

lEXPModule类:


名称


功能


self.es


Elasticsearch客户端


self.exp


载入的exp攻击代码


self.file


扫描完毕之后生成的报告文件


self.httptools


http操作类


scanAll()


全库域名扫描功能实现


scanOneHost(target)


单目标扫描功能实现


scanOneRange(startip,endip)


IP段扫描功能实现

不论是哪种模式,扫描模式都是如下模式:

全库域名扫描是通过获取现有数据中所有的域名来构成扫描域名列表,这需要与Elasticsearch的服务端进行交互,通过Query DSL查询就可以实现。每次任务执行完成之后,会将任务执行的结果进行保存,以“.cat”后缀的文件作为报告文件,通过web层的views函数提供给用户下载。最后,将这次任务记录到数据库(Mysql)中即可。

单目标扫描是通过用户通过命令行参数给定的URL或者IP地址作为扫描域名列表。由于是单词扫描,所以不会生成报告供下载,只是将结果通过Web层打印,并向数据库中进行记录。

IP段扫描是同样是根据用户提供的一个IP地址段(由起始地址、终止地址构成)作为扫描的域名列表。一次任务所经过的流程与全库域名扫描一致。

lKEYModule


名称


功能


self.es


Elasticsearch客户端


self.flag


用户提供的设备或者网络组件关键字(如discuz)


self.file


扫描完毕之后生成的报告文件


self.httptools


http操作类


loadExploit()


载入相应模块的全部exp攻击代码


queryParser(query)


解析用户的查询语句


scanByQuery(query)


根据用户搜索进行攻击


scanByDomain(domain)


攻击一个域名或IP

KEYModule主要是用于根据关键字(key)进行攻击。Key的定义是目前收录的网络组件或者网络设备的名称,如Discuz、Dedecms等。这个模块还有一个特点就是会载入Key下面的所有攻击脚本进行轮询攻击。

scanByQuery主要根据用户提交的查询字符串从Elasticsearch中拉取域名列表进行扫描。

scanByDomain根据用户提交的单个域名目标进行攻击。

攻击框架的本质就是动态将攻击类进行加载运行,这里使用了Python的imp模块完成类的动态加载,如果碰到路径问题导致类加载不成功,还可以直接将相应模块的工作目录统一添加至sys.path列表中。

(3)攻击类的编写规则定义与实现

为了追求框架的可扩展性,必须将编写规则进行限制,并将一些统一的方法抽象出来放在父类ExploitCore中,这里主要在父类中实现扫描规则验证等功能,但是由于时间紧迫,我只是将框架搭出,没有实现父类中的方法。

攻击类的编写规则定义如下:

1)类名SafecatExploit

2)必须将攻击代码放入类方法exploit中,规则必填参数为攻击URL或者IP,可选参数不做限制。成功则返回攻击结果(string类型),失败返回None。

遵从上述规定的exploit攻击脚本就可以直接从框架入口处进行调用并生成攻击结果报告。

此外,补充信息与公用数据放在构造方法中的info字典中,包括exploit的作者、漏洞相关的信息、漏洞所用payload等。如discuz的faq.php注入攻击类中,info可以写成如下形式:

时间: 2024-08-06 10:19:01

实现一个Web版的类Metasploit的攻击框架的相关文章

Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误——SHH框架

SHH框架工程,Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误 1.查看配置文件web.xml中是否配置.org.springframework.web.context.ContextLoaderListener在web.xml配置文件中已经配置 2.查看工程是否添加此jar包,org.springframework.web.context.ContextLoaderListener的jar包为spring

Node学习笔记(三):基于socket.io web版你画我猜(一)

经过惨淡的面试,也是知道了自己的不足,刚好最近在学习node,心中便有了做一个web版的你画我猜的想法 首先说下思路,在做准备工作的时候,有两个大概的思路: 1.规定一块div,捕捉鼠标事件,动态生成position absolute,长宽1px的红色小div,这样可以模拟出划线的轨迹,做一个long polling,不断获取DOM结构,推送到socket端口,然后再广播给所有客户端 2.利用canvas作图,将canvas的数据推送到socket端口,广播所有客户端 其实之所以有两种想法,无非

1——自我实现一个简洁版的String类

在C++中有C没有的string字符串类型,string类型的数据其实是一个指向字符串首地址的指针变量,因此在string类的默认成员函数拷贝构造和赋值运算符的重载就会涉及到深浅拷贝的问题,一不小心要么就是内存泄露要么就是多次释放同一块空间导致程序崩溃,下面就来模拟实现一个简洁版的String类: 既然是指向一个字符串的指针,因此类的成员变量就需要有一个char*类型的指针: #include <iostream> #include <string.h> using namespa

Python+Selenium进阶版(八)- Python自定义封装一个简单的Log类

目标:如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里. 练习场景: 我们需要封装一个简单的日志类,主要有以下内容: 1.生成的日志文件格式是 年月日分秒.log 2.生成的XXX.log文件存储在项目根目录下Logs文件夹下 3.这个日志类,支持INFO,ERROR两种日志级别 4.日志里,每行日志输出,时间日期+执行类名称+日志级别+日志描述 解决思路: 1.在根目录下新建一个Logs的文件夹,获取这个Log的相对路径: 2.日志的保存命名,需要系统时间:

如何设计和实现一个web app

web app简介 web app其实不算是什么新鲜的东西,相比于传统的web和传统的app,web app这种web和app相结合的产物有的优点如下: 1. 开发上web app更有便捷性,ios开发一上来需要安装一堆东西,android开发也差不多,另外web app的学习成本要比平台客户端开发要低些,至少你不用去招聘ios和android程序员.只要具备基础web开发能力的人都可以比较快上手. 2. 部署方便,在很多情况下,部署一个单页web app只需要一个index.html页面文件作

Web版的各种聊天工具

直到近期为止,我们经常使用的即时聊天工具(QQ.msn等)了Web版,大家不用下载庞大软件,直接打开网页就能够与自己的好友聊天,非常方便.在此将时汇总 ?????? 便于大家查找 ?????? 节约大家一点时间 此都是官方站点 ?????? 请大家放心使用: 1.先说我们最经常使用的QQ 在线聊天Web版地址: http://webqq.qq.com/ (刚建的 ?????? 现正在測试 ?????? 须要申请 ?????? 日前还不太稳定 ?????? 有待完好) 2.msn在线聊天Web版地

一个Web 持续集成工作实践

一个web的持续基础实践: https://mp.weixin.qq.com/src=3&timestamp=1494325174&ver=1&signature=wFVC0E6YlKsNsCYnhs8XlMdRTmtwBU8qMW4YCsNoryvcIAGD8hPCnOCaXb5WisyGrmEOVUJVd1n2FRjV3ohyUWuTDUGMGhkDPXAlvd6t0RtNSivqrMRgof1KJcnZrAvzTYkjURSzDPjk8wR5vq8ASUOarm9mFlUad

Python之路,Day18 - 开发一个WEB聊天来撩妹吧

Python之路,Day18 - 开发一个WEB聊天来撩妹吧 本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加.禁言群友 可以与聊天室里的人进行临时会话(与qq群一样) 可以在群中发图片 可以与好友一对一发文件 知识必备: django html\css\js bootstrap jquery, ajax 前景介绍 首先我们知道http

eclipse下配置安装ssm图文教程(web版)

eclipse下配置安装ssm图文教程(web版) 一.安装所需jar包 1.1  mybatis安装包 可以进入GitHub的https://github.com/mybatis/mybatis-3/releases下载所需版本,本文版本是mybatis-3.4.2 Mybatis实现缓存的jar包: 1.2  spring安装包 补充:spring配置aop的aspect包 可以进入spring官网的http://projects.spring.io/spring-framework/ 下载