网络安全工程师分享的6大渗透测试必备工具
租用海外服务器,不可避免就是考虑使用安全问题,其中渗透测试可模仿网络黑客攻击,来评估海外服务器网络系统安全的一种方式。互联网中,渗透测试对网络安全体系有着重要意义。
通过渗透工具可提高渗透测试效率。快速云作为专业的IDC服务商,在本文中为大家分享了网络安全工程师推荐的6种必备渗透工具,使用这6种工具后用户可实现更高效的进行渗透测试。
一、NST网络安全工具
NST是基于Fedora的Linux发行版,属于免费的开源应用程序,在32、64平台运行。使用NST可启动LiveCD监视、分析、维护海外服务器网络安全性。可以用于入侵检测、网络浏览嗅探、网络数据包生成、扫描网络/海外服务器等等。
二、NMAP
可以用于发现企业网络种任意类型的弱点、漏洞,也可以用于审计。原理是通过获得原始数据包渠道哪些海外服务器在网络特定段中有效,使用的是什么操作系统,识别正在使用的特定海外服务器的数据包防火墙/过滤器的不同版本和类型。
三、BeEF工具
BeEF工具可以通过针对web浏览器查看单源上下文的漏洞。
四、AcunetixScanner
一款可以实现手动渗透工具和内置漏洞测试,可快速抓取数千个网页,可以大量提升工作效率,而且直接可以在本地或通过云解决方案运行,检测出网站中流行安全漏洞和带外漏洞,检测率高。
五、JohntheRipper
这款工具最常见,可简单迅速的破解密码。支持大部分系统架构类型如Unix、Linux、Windows、DOS模式等,常用于破解不牢固的Unix/Linux系统密码。
六、SamuraiWeb测试框架
SamuraiWeb测试框架预先配置成网络测试平台。内含多款免费、开源的黑客工具,能检测出网站漏洞,不用搭建环境装平台节省大部分时间很适合新手使用。
打造自己的渗透测试框架—溯光
TrackRay简介
溯光,英文名“TrackRay”,意为逆光而行,追溯光源。同时致敬安全圈前辈开发的“溯雪”,“流光”。
溯光是一个开源的插件化渗透测试框架,框架自身实现了漏洞扫描功能,集成了知名安全工具:Metasploit、Nmap、Sqlmap、AWVS等。
溯光使用 Java 编写,SpringBoot 作为基础框架,JPA + HSQLDB嵌入式数据库做持久化,Maven 管理依赖,Jython 实现 Python 插件调用,quartz 做任务调度,freemarker + thymeleaf 做视图层,Websocket 实现命令行式插件交互。
框架可扩展性高,支持 Java、Python、JSON 等方式编写插件,有“漏洞扫描插件”、“爬虫插件”、“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 JSON插件
kunpeng 是一个 go 语言编写的 poc 测试框架,这里我对 kunpeng 的 JSON 插件做了一个支持。
只需要按照 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.JSONPlugin
继承 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.smb.MS17010
但这样还需要再写 java 的代码,对于没有学过 java 的人来说很不友好。
2.通过jython实现
jython 是一个 Python 语言在 Java 中的完全实现。
我将它的调用过程写成了一个交互式插件。
你可以通过在 /resources/python/ 目录下安装如下规范去创建一个 python 文件。
在这个 python 文件中需要写两个方法。
关于注解
@Rule
一般用在“可交互插件”和“无交互插件”类上。
@Plugin
WEB指纹
这里顺便再说一下如何添加指纹库。
指纹库位于 base 模块,是一个枚举类。
可以在首部或尾部添加一条新的枚举,尽量使用 $ 开头。
第一个参数是 指纹的名称,如果第二个参数是 String 类型则是该指纹的说明。
FingerBean 类是指纹匹配对象。
如何进行Web渗透测试
什么是渗透测试?
渗透测试,是渗透测试工程师完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标网络、主机、应用的安全作深入的探测,发现系统最脆弱的环节。
如何进行Web渗透测试?
完整web渗透测试框架当需要测试的web应用数以千计,就有必要建立一套完整的安全测试框架,流程的最高目标是要保证交付给客户的安全测试服务质量。
1、立项:项目建立,时间安排,人力分配,目标制定,厂商接口人确定;
系统分析威胁分析:针对具体的web应用,分析系统架构、使用的组件、对外提供的接口等,以STRIDE为威胁模型进行对应的安全威胁分析,输出安全威胁分析表,重点关注top3威胁;
制定测试用例:根据威胁分析的结果制定对应的测试用例,测试用例按照模板输出,具备可执行性;
测试执行漏洞挖掘:测试用例执行发散测试,挖掘对应的安全问题or漏洞;
问题修复回归测试:指导客户应用开发方修复安全问题or漏洞,并进行回归测试,确保安全问题or漏洞得到修复,并且没有引入新的安全问题;
项目总结评审:项目过程总结,输出文档评审,相关文档归档。
2、Web应用的渗透测试流程
主要分为3个阶段,分别是:信息收集→漏洞发现→漏洞利用,下面仔细分析一下各个阶段流程:
一、信息收集
在信息收集阶段,我们需要尽量多的收集关于目标web应用的各种信息,比如:脚本语言的类型、服务器的类型、目录的结构、使用的开源软件、数据库类型、所有链接页面,用到的框架等
脚本语言的类型:常见的脚本语言的类型包括:php、asp、aspx、jsp等
测试方法:
1 爬取网站所有链接,查看后缀
2 直接访问一个不存在页面后面加不同的后缀测试
3 查看robots.txt,查看后缀
服务器的类型:常见的web服务器包括:apache、tomcat、IIS、ngnix等
测试方法:
1 查看header,判断服务器类型
2 根据报错信息判断
3 根据默认页面判断
目录的结构:了解更多的目录,可能发现更多的弱点,如:目录浏览、代码泄漏等。
测试方法
1 使用字典枚举目录
2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取
3 查看robots.txt是否泄漏
使用的开源软件:我们如果知道了目标使用的开源软件,我们可以查找相关的软件的漏洞直接对网站进行测试。
测试方法
指纹识别(网络上有很多开源的指纹识别工具)
数据库类型:对于不同的数据库有不同的测试方法。
测试方法
1 使应用程序报错,查看报错信息
2 扫描服务器的数据库端口(没做NAT且防火墙不过滤时有效)
所有链接页面:这个跟前面的获取目录结构类似,但是这个不只是获取网站的所有功能页面,有时候还可以获取到管理员备份的源码。
测试方法
1 使用字典枚举页面
2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取
3 查看robots.txt是否泄漏
用到的框架:很多网站都利用开源的框架来快速开发网站,所以收集网站的框架信息也是非常关键的。
测试方法
指纹识别(网络上有很多开源的指纹识别工具)
二、漏洞发现
在这个阶段我们在做测试的时候要对症下药,不能盲目的去扫描,首先要确定目标应用是否使用的是公开的开源软件,开源框架等、然后在做深一度的漏洞扫描。
关于开源软件的漏洞发现
开源的软件:常见的开源软件有wordpress、phpbb、dedecms等
开源的框架:常见的开源框架有Struts2、 Spring MVC、ThinkPHP等
中间件服务器:常见的中间件服务器有jboss、tomcat、Weblogic等
数据库服务:常见的数据库服务mssql、mysql、oracle、redis、sybase、MongoDB、DB2等
对于开源软件的测试方法
1 通过指纹识别软件判断开源软件的版本信息,针对不同的版本信息去开放的漏洞数据库查找相应版本的漏洞进行测试
2 对于默认的后台登录页、数据库服务端口认证等入口可以进行简单的暴力破解、默认口令尝试等操作
3 使用开源的漏洞发现工具对其进行漏洞扫描,如:WPScan
关于自主开发的应用
手动测试:这个阶段,我们需要手工测试所有与用户交互的功能,比如:留言、登入、下单、退出、退货、付款等操作
软件扫描:使用免费的软件扫描,如:appscan、wvs、netsparker,burp等
可能存在的漏洞
Owasp关键点
代码安全之上传文件
代码安全之文件包含
代码安全之SSRF
逻辑漏洞之密码重置
逻辑漏洞之支付漏洞
逻辑漏洞之越权访问
平台安全之中间件安全
三、漏洞利用
针对不同的弱点有不同的漏洞利用方式,需要的知识点也比较多。一般这个阶段包括两种方式,一种是手工测试,一种是工具测试
手工测试
手工测试是通过客户端或服务器访问目标服务,手工向目标程序发送特殊的数据,包括有效的和无效的输入,观察目标的状态、对各种输入的反应,根据结果来发现问题的漏洞检测技术。手工测试不需要额外的辅助工具,可由测试者独立完成,实现起来比较简单。但这种方法高度依赖于测试者,需要测试者对目标比较了解。手工测试可用于Web应用程序、浏览器及其他需要用户交互的程序。
这种方式对于有特殊过滤等操作,或者网络上没有成型的利用工具的时候可以使用。
工具测试
网络上有很多好用的免费利用工具,比如针对sql注入的sqlmap、针对软件漏洞的matesploit等。
0条大神的评论