内容导读:导航目录:1、Python渗透测试工具都有哪些2、渗透测试报告自动生成工具3、打造自己的渗透测试框架—溯光Python渗透测试工具都有哪些***Scapy,Scapy3k:发送,嗅探,分析和伪造***数据包。...……
导航目录:
Python渗透测试工具都有哪些
***
Scapy, Scapy3k: 发送,嗅探,分析和伪造 *** 数据包。可用作交互式包处理程序或单独作为一个库
pypcap, Pcapy, pylibpcap: 几个不同 libpcap 捆绑的python库
libdnet: 低级 *** 路由,包括端口查看和以太网帧的转发
dpkt: 快速,轻量数据包创建和分析,面向基本的 TCP/IP 协议
Impacket: 伪造和解码 *** 数据包,支持高级协议如 NMB 和 *** B
pynids: libnids 封装提供 *** 嗅探,IP 包碎片重组,TCP 流重组和端口扫描侦查
Dirtbags py-pcap: 无需 libpcap 库支持读取 pcap 文件
flowgrep: 通过正则表达式查找数据包中的 Payloads
Knock Subdomain Scan: 通过字典枚举目标子域名
SubBrute: 快速的子域名枚举工具
Mallory: 可扩展的 TCP/UDP 中间人 *** 工具,可以实时修改非标准协议
Pytbull: 灵活的 IDS/IPS 测试框架(附带超过300个测试样例)
调试和逆向工程
Paimei: 逆向工程框架,包含PyDBG, PIDA , pGRAPH
Immunity Debugger: 脚本 GUI 和命令行调试器
mona.py: Immunity Debugger 中的扩展,用于代替 pvefindaddr
IDAPython: IDA pro 中的插件,集成 Python 编程语言,允许脚本在 IDA Pro 中执行
PyEMU: 全脚本实现的英特尔32位仿真器,用于恶意软件分析
pefile: 读取并处理 PE 文件
pyda *** : Python 封装的libda ***
PyDbgEng: Python 封装的微软 Windows 调试引擎
uhooker: 截获 DLL 或内存中任意地址可执行文件的 API 调用
diStorm: AMD64 下的反汇编库
python-ptrace: Python 写的使用 ptrace 的调试器
vdb/vtrace: vtrace 是用 Python 实现的跨平台调试 API, vdb 是使用它的调试器
Androguard: 安卓应用程序的逆向分析工具
Capstone: 一个轻量级的多平台多架构支持的反汇编框架。支持包括ARM,ARM64,MIPS和x86/x64平台
PyBFD: GNU 二进制文件描述(BFD)库的 Python 接口
Fuzzing
Sulley: 一个模糊器开发和模糊测试的框架,由多个可扩展的构件组成的
Peach Fuzzing Platform: 可扩展的模糊测试框架(v2版本 是用 Python 语言编写的)
antiparser: 模糊测试和故障注入的 API
TAOF: (The Art of Fuzzing, 模糊的艺术)包含 ProxyFuzz, 一个中间人 *** 模糊测试工具
untidy: 针对 XML 模糊测试工具
Powerfuzzer: 高度自动化和可完全定制的 Web 模糊测试工具
*** UDGE: 纯 Python 实现的 *** 协议模糊测试
Mistress: 基于预设模式,侦测实时文件格式和侦测畸形数据中的协议
Fuzzbox: 媒体多编码器的模糊测试
Forensic Fuzzing Tools: 通过生成模糊测试用的文件,文件系统和包含模糊测试文件的文件系统,来测试取证工具的鲁棒性
Windows IPC Fuzzing Tools: 使用 Windows 进程间通信机制进行模糊测试的工具
WSBang: 基于 Web 服务自动化测试 SOAP 安全性
Construct: 用于解析和构建数据格式(二进制或文本)的库
fuzzer.py(feliam): 由 Felipe Andres Manzano 编写的简单模糊测试工具
Fusil: 用于编写模糊测试程序的 Python 库
Web
Requests: 优雅,简单,人性化的 HTTP 库
HTTPie: 人性化的类似 cURL 命令行的 HTTP 客户端
ProxMon: 处理 *** 日志和报告发现的问题
W *** ap: 寻找 Web 服务器和发现文件
Twill: 从命令行界面浏览网页。支持自动化 *** 测试
Ghost.py: Python 写的 WebKit Web 客户端
Windmill: Web 测试工具帮助你轻松实现自动化调试 Web 应用
FunkLoad: Web 功能和负载测试
spynner: Python 写的 Web浏览模块支持 Javascript/AJAX
python-spidermonkey: 是 Mozilla *** 引擎在 Python 上的移植,允许调用 Javascript 脚本和函数
mitmproxy: 支持 SSL 的 HTTP *** 。可以在控制台接口实时检查和编辑 *** 流量
pathod/pathoc: 变态的 HTTP/S 守护进程,用于测试和折磨 HTTP 客户端
渗透测试报告自动生成工具
公众号:白帽子左一
领取配套练手靶场、安全 *** 课程及工具...
在安服仔的日子里,发现其他人输出的渗透测试报告结果不规范,主要在报告质量、内容、字体、及修复方案中存在诸多问题,而且 大部分安服仔需要对每次的项目结果进行统计整理,方便后续跟踪复测。
因此研发了 Savior—渗透测试报告辅助生成系统 , 起这个名字也是为了拯救大多数渗透测试工程师,
告别繁琐的渗透测试报告编写过程及漏洞统计过程。
前端 : Ant Design Pro
后端 : Django REST Framework
数据库 : Mysql
用户管理 : 主要是方便统计漏洞的发现者,后续可能大概也许会添加漏洞统计模块,根据提交数据、漏洞类型、时间等进行统计报表,当前用户管理模块仅允许通过Django后台进行修改,前端只负责展示,主要是我太懒了。
项目管理 : 根据项目的不同可上传项目的专属渗透测报告模板,并可以根据需要进行模板自定义模板(/Demo/demo.docx);
模板自定义 : 不用修改源代码,仅需修改word即可进行模板自定义;
整改建议管理 : 此平台主要就是为了体现标准化输出,因此可通过内置漏洞描述及修复建议进行快速输出,并支持自定义修改(/Demo/常规WEB渗透测试漏洞描述及修复 *** .docx);
一键生成: 通过提交报告模块,内联项目模板,快速生成渗透测试报告,真正达到了一键生成,并确保报告内数据准确、字体统一、格式标准;
自动邮件: 在生成报告后可通过用户管理配置的自动邮件发送功能进行邮件通知,可自定义邮件模板,这样再报告给客户的时候就可以直接转发了(暖男功能);
漏洞统计: 每次渗透过后,需要挨个查找报告进行统计整理,现在只要提交报告后,后台会自动联动;
漏洞报表一键导出
漏洞跟踪: 增加了漏洞状态字段,创建报告后,漏洞状态默认为新增,漏洞管理模块可进行复测,包括已整改、未整改两种状态;
Demo :
演示账号 :admin
演示密码 : Savior@404
首先将代码clone到本地:
Docker部署
我们推荐使用Docker进行部署,相对于源码部署更为简单和快速。
部署前请务必先安装 Docker 及 docker-compose 。
修改配置文件
首先复制根目录的 .env.docker 并重命名为 .env , 修改其中的Email Settings和initial Administrator配置。
这两个配置分别控制邮件提醒,以及初始管理帐号密码及邮箱。
同时需要注意以下两点:
1. 务必把邮箱修改为自己邮箱,不然可能会出现非预期错误!
2. 如果使用阿里云、腾讯云服务器,请使用 *** tp的ssl协议,两家云厂商默认封禁了25端口。
一键启动
访问 即可看到页面。
修改启动端口
如果想修改启动端口,可以修改docker-compose.yaml文件中web容器的ports。
默认为8000:8000,比如要修改为8080端口可改为8080:8000。
所需环境:
前端环境
环境变量设置 创建字符集为utf-8编码的数据库。
复制**.env.docker为.env**,并配置数据库、邮箱、管理员等信息。
后端环境
源码部署环境:
前台页面 :
Django管理后台:
其中Savior平台包含两个后台页面。考虑到安全性,目前用户管理、项目管理托管于Django管理后台(主要是这两个模块不会写),其余功能均可通过前台页面实现。
前台页面 :
Django管理后台 :
访问Django管理后台: ,
请完善API用户的Name、Avatar、Autosentmail三个字段,分别控制报告的作者、头像(图片Url)、生成报告后自动发送渗透测试报告到邮箱。
访问Django管理后台:
请通过APIProjects进行添加项目,可根据不通项目选择不通的渗透测试报告模板。
参数说明:Project logo(项目Logo)、Project center(项目名称)、Project description(项目描述)、Project template(渗透测试报告模板,目前标准模板可使用Demo/demo.docx,如需自定义模板,请参考模版自定义部分)
访问 可进入Savior平台,通过个人设置整改设置添加漏洞模板可进行设置漏洞类型、漏洞描述、修复建议从而达到标准化。
目前整理了一些通用的修复建议模板,请参考Demo/常规WEB渗透测试漏洞描述及修复 *** .docx。
目前根据我经常使用的渗透测试报告模板生成了一个demo版本(请参考/Demo/demo.docx)。
当然您也可以根据自己的需求进行模板自定义,其中仅需在WORD模板中进行参数替换,目前Savior中具体参数如下:
以下漏洞详情请利用{%tr for vuls in vuls %}{%tr endfor %}进行循环遍历。
如想列出所有漏洞URL,则使用参数{%tr for vuls in vuls %}{{item.vul_url}}{%tr endfor %}
注: Savior平台渗透测试模板遵循Jinja2语法,更多内容请参考
如果我们完善了用户信息、项目管理、整改设置后,就可以通过前端页面进行创建报告,其大概流程如下:首先完善报告的基本信息。
选择漏洞管理的添加漏洞功能。选择漏洞类型后,漏洞名称、漏洞描述、修复建议会根据整改设置进行自动联动,并可根据需求进行自定义修改。
需要注意的是漏洞详情处如果需要插入XSS语句,请进行url编码后进行输入!
注: 未提交前请勿刷新页面,此时漏洞详情保存为前端。提交后会自动生成渗透测试报告并进行下载。
打开报告会提示更新域,更新请选择是,再选择更新整个目录,此问题主要是为了更新目录,不然渗透测试报告中目录无法自动更新。
如果在用户管理打开了Autosentmail功能,渗透测试报告会自动发送至我们邮箱,方便转给甲方爸爸。
访问Savior平台,选择漏洞列表可进行漏洞统计并进行漏洞复测。
其中漏洞包含三个状态(新发现、已修复、未修复)。
通过选择导出数据功能,可将漏洞列表导出为Excle。
用户管理、项目管理迁移至前端
大数据看板
感谢 echo503 提供的项目帮助
感谢 lp0int 提供的项目帮助
项目框架及 Docker 部署参考 Github-Monitor:( )
原文地址:
打造自己的渗透测试框架—溯光
TrackRay简介
溯光,英文名“TrackRay”,意为逆光而行,追溯光源。同时致敬安全圈前辈开发的“溯雪”,“流光”。
溯光是一个开源的插件化渗透测试框架,框架自身实现了漏洞扫描功能,集成了知名安全工具:Metasploit、Nmap、Sqlmap、AWVS等。
溯光使用 Java 编写,SpringBoot 作为基础框架,JPA + HSQLDB嵌入式数据库做持久化,Maven 管理依赖,Jython 实现 Python 插件调用,quartz 做任务调度,freemarker + thymeleaf 做视图层,Websocket 实现命令行式插件交互。
框架可扩展性高,支持 Java、Python、 *** ON 等方式编写插件,有“漏洞扫描插件”、“爬虫插件”、“MVC插件”、“内部插件”、“无交互插件”和“可交互插件” 等插件类型。
功能展示
主页
登录
任务创建
任务列表
任务详情
无交互接口插件调用
MVC插件示例
交互式插件控制台
MSF 控制台
依赖环境
JDK 1.8
Python 2.7
Maven
Git
Metasploit
Nmap(建议安装)
SQLMAP(建议安装)
AWVS
**加粗为必须环境,没有安装程序则无法正常编译运行
不论是 Windows 还是 linux 一定需要先安装 JDK1.8 和 Maven。安装过程这里不做演示。保证 JDK 和 Maven 都在系统环境变量,能执行java -version 和 mvn --version即可。
安装过程
之一步
手动启动 AWVS 服务
登录后台,生成一个API密匙。
复制密匙和 AWVS 的地址。
找到web/src/main/resources/application.properties配置文件。
修改如下部分
第二步
找到你 python 的第三方库目录。
Windows 的一般在 python 安装目录下的/Lib/site-packages
Linux 下可以通过输出 sys.path 来找第三方包路径
我的是 D:/Python2/Lib/site-packages
同样找到web/src/main/resources/application.properties配置文件。
修改python.package.path参数
第三步
安装 Maven 后找到仓库位置。
如果没有在 settings.xml 里配置指定仓库目录,默认会在当前用户目录中生成一个 .m2的目录
找到仓库目录后修改 application.properties 的 maven.repository.path参数
第四步
这个是 DNSLOG 回显检测漏洞时需要的。
去 ceye.io 注册一个账号,拿到给你分配的域名和 TOKEN。
修改配置文件
第五步
启动 msf 和 sqlmapapi。
如果你是 kali 操作系统,可以直接运行startdep.sh。
如果是其他系统,则要找到 metasploit 和 sqlmap 的目录分别执行
启动成功后修改配置文件
第六步
编译打包程序
等待依赖下载完成和编译完成,如果以上操作都没有出现问题则会提示 BUILD SUCCESS
编译成功后会在当前目录打包一个trackray.jar就是溯光的主程序。
然后直接执行startup.bat或startup.sh溯光就会启动服务。
没有抛出异常或ERROR日志,访问 8080 端口正常。
服务启动正常后,登录 iZone 社区账号。
**开发插件建议使用 Intellij IDEA IDE,需要安装 lombok 插件。
目录结构
插件
AbstractPlugin
这是交互式插件和非交互式插件的父类。
BASE常量
其中的静态常量 BASE 是 /resources/include/ 的所在目录。
如果你的插件需要额外的静态资源,那么你可以在 /resources/include 目录里创建一个和插件 KEY 相同的文件夹,便于识别,如果没有在 @Plugin 注解中设置 value 则默认的插件 KEY 就是当前类名首字母小写。
如 Typecho001 = typecho001
check(Map param)
这是用于检验是否合规的 *** ,需要被强制重写,当返回 true 时才会调用 start() ***
param 参数是从前台传过来的参数键值对。
常被用于检验参数格式是否正确或漏洞是否存在。
after()
在 start() *** 之前调用
before()
在 start() *** 之后调用
start()
这是一个抽象 *** ,所有继承了该类的子类都需要重写这个 *** 。
在 check *** 通过后会调用 start() ***
start() *** 返回值最终会会当做插件结果,响应给前台。
shell()
调用当前系统 shell 来辅助完成插件功能。
executor()
插件执行的主 ***
crawlerPage
http请求对象(不推荐使用)
fetcher
执行 http 请求对象(不推荐使用)
errorMsg
当校验不通过时,返回给前台的信息。
param
前台传过来的参数键值对
requests
HTTP 发包工具(推荐使用)
hackKit
hack 常用工具包
无交互插件
无交互插件需要你填写好所有要填写的参数,直接请求接口来执行插件。
默认需要去继承 CommonPlugin类。
这是一个抽象类,继承了 AbstractPlugin
主要多出来两个属性:request 和 response。
继承了 CommonPlugin 的类可以通过调用这两个属性来控制请求和响应内容。
无交互插件同时也需要使用 @Rule 和 @Plugin 插件,这两个注解后面会讲到。
在 ,找到相应的插件填写好参数提交即可完成调用。
或直接调用接口。
交互式插件
交互式插件一般在命令行控制台中调用,可以允许你通过命令行交互来完成插件的调用。
交互式插件由 Websocket 实现,想要写一个交互式插件,首先要继承 WebSocketPlugin 类。
同时设置 @Rule 注解的 websocket 参数为 true ,如果需要异步交互需要将 sync 也设置为 true。
内部插件
内部插件是不可以通过外部去调用的,需要继承 InnerPlugin 并使用 @Plugin 注解,通常在漏洞扫描时时会调用。
例如 “网页爬虫”,“指纹识别”,“端口扫描” 等,都是通过调用内部插件实现的。
还有用于检测 SSRF 等漏洞用的 FuckCeye 插件也属于内部插件。
通过 spring 的自动注入,来注入内部插件到当前对象。
例子可参考 WebLogicWLSRCE.java
爬虫插件
爬虫插件会在扫描任务被勾选“网页爬虫”时调用,每爬取一条请求就会调用一次爬虫插件。
爬虫插件需要继承 CrawlerPlugin,继承该类必须重写 check 和 process *** 。
check *** 用于检验请求是否符合插件规则,以免产生多余请求。
当 check *** 返回为 true 时会调用 process *** 。
process *** 里写插件主要检测代码。
addVulnerable()
当插件检测出漏洞时,可以通过调用 addVulnerable() *** 来向数据库插入一条漏洞。
requests
requests 属性为请求工具包,处理 https 和 http 都很方便。
response
response 属性为当前爬虫得到的 HTTP 响应。
task
task 属性为当前任务对象,如果你的爬虫插件不是检测漏洞而希望是检测一些敏感信息的话可以修改 task.getResult() 里的属性。
参考 FingerProbe.java 或 InfoProbe.java。
target
爬虫爬取到的 URL 对象。
fetcher crawlerPage
http 请求对象(不建议使用)。
漏洞扫描插件
漏洞扫描插件会在,扫描任务中勾选“漏洞攻击模块”时调用。
漏洞扫描插件分为三种
1.独立插件
独立的漏洞扫描插件需要继承 AbstractExploit 并使用 @Plugin 或 @Exploit
AbstractExploit 中有以下需要了解的 *** 和属性。
requests
http / https 发包工具
target 当前扫描任务的地址。
task
当前扫描任务对象。
check()
check 是一个抽象 *** ,需要被子类强制重写。
该 *** 一般用于检验是否符合当前漏洞扫描插件的规则,以免产生多与请求。
attack()
attack 也是一个抽象 *** ,需要被子类强制重写。
该 *** 是检测漏洞的主 *** 。
before()
在 attack *** 前执行
after()
在 attack *** 后执行
addVulnerable()
当插件检测出漏洞时,可以通过调用 addVulnerable() *** 来向数据库插入一条漏洞。
fetcher crawlerPage
http 请求对象(不建议使用)。
2.漏洞规则
位于
实际上这是一个“内部插件”,会在勾选漏洞模块攻击时调用。
有一些漏洞检测 *** 很简单,只通过简单的判断响应体就能识别出来,也就没有必要再去写一个独立的插件而占用空间了。
在 doSwitch() *** 中会先去根据当前任务的指纹识别结果走一遍 switch 流程。
swtich 的每一个 case 都是 WEB 指纹的枚举对象。
当 switch 找到当前任务 WEB 指纹对应的 case 后,case 内的代码会通过构建一个漏洞规则添加到 loaders *** 里。
如果规则是通用的,可以写在 switch 的外面。
3.kunpeng *** ON插件
kunpeng 是一个 go 语言编写的 poc 测试框架,这里我对 kunpeng 的 *** ON 插件做了一个支持。
只需要按照 kunpeng json 插件的格式规范创建一个 json 文件到 /resources/json 目录。
在扫描任务勾选“漏洞攻击模块”时会被调用,或通过 MVC 插件调用 。
MVC 插件
位于
MVC 插件的特点在于,他可以像是在写一个功能一样,而非简单的接口式调用。
MVC 插件需要继承 MVCPlugin 类,并使用 @Rule,@Plugin 注解。
MVCPlugin 内置了一个 ModelAndView 对象, 是 SpringMVC 提供的。
可以通过 setViewName() 来指定视图层的网页模板。
通过 addObject(key,value) 向视图层网页模板注入参数。
这里的视图层是使用 thymeleaf 实现的,需要懂 thymeleaf 的语法。
例子可以参考:com.trackray.module.inner. *** ONPlugin
继承 MVCPlugin 必须要重写一个 index *** ,这是插件的入口。
如果需要写其他的功能,就得再创建一个 public 返回值为 void 的无参 *** 。
并且要在该 *** 上使用 @Function 注解,该注解的 value 参数如果不填写的话则默认的 requestMapping 地址为 *** 名。
例如
最后还需要在 /module/src/main/resources/templates 创建一个目录名为插件 KEY 的目录。
里面存放扩展名为 .html 的模板文件。
Python 插件
python 插件有两种实现方式。
1.通过命令行实现
这种方式最为简单,通过在 include 里写一个 python 脚本。
然后在插件里调用 shell() *** 来执行系统命令。
案例可参考 com.trackray.module.plugin.windows. *** b.MS17010
但这样还需要再写 java 的代码,对于没有学过 java 的人来说很不友好。
2.通过jython实现
jython 是一个 Python 语言在 Java 中的完全实现。
我将它的调用过程写成了一个交互式插件。
你可以通过在 /resources/python/ 目录下安装如下规范去创建一个 python 文件。
在这个 python 文件中需要写两个 *** 。
关于注解
@Rule
一般用在“可交互插件”和“无交互插件”类上。
@Plugin
WEB指纹
这里顺便再说一下如何添加指纹库。
指纹库位于 base 模块,是一个枚举类。
可以在首部或尾部添加一条新的枚举,尽量使用 $ 开头。
之一个参数是 指纹的名称,如果第二个参数是 String 类型则是该指纹的说明。
FingerBean 类是指纹匹配对象。