2.3 漏洞验证辅助
不管是借助代码审计工具还是读PHP文件发现的漏洞,我们都需要验证漏洞是否真实可用。这就需要借助一些工具来帮助我们快速测试漏洞,或者在某些情况下,比如部分代码不可读时,我们可以在不继续往下读代码的情况下测试漏洞,做基于模糊测试的漏洞验证。主要的辅助工具分为数据包请求工具类、暴力枚举类、编码转换及加解密类。当然,还有一些正则调试和SQL执行监控等软件。下面只列举一些常用的,根据不同的漏洞和环境需要搭配不同的工具来测试。
2.3.1 Burp Suite
Burp Suite是一款基于Java语言开发的安全测试工具,使用它需要安装Java运行环境。这款软件只有不到10MB的大小,但是其强大的功能受到几乎所有安全人员的青睐。Burp Suite主要分为Proxy、Spider、Scanner、Intruder、Repeater、Sequencer、Decoder和Comparer几个大模块。下面简单介绍下各个模块:
·Proxy(代理)Burp Suite的代理抓包功能是这款软件的核心功能,当然也是使用最多的功能。使用这个代理,可以截获并修改从客户端到Web服务器的HTTP/HTTPS数据包。
·Spider(蜘蛛)用来分析网站目录结构,爬行速度非常不错,爬行结果会显示在Target模块中,支持自定义登录表单,让它自动提交数据包进行登录验证。
·Scanner(扫描器)用于发现Web程序漏洞,它能扫描出SQL注入、XSS跨站、文件包含、HTTP头注入、源码泄露等多种漏洞。
·Intruder(入侵)用来进行暴力破解和模糊测试。它最强大的地方在于高度兼容的自定义测试用例,通过Proxy功能抓取的数据包可以直接发送到Intruder,设置好测试参数和字典、线程等,即可开始漏洞测试。
·Repeater(中继器)用于数据修改测试,通常在测试一些像支付等逻辑漏洞的时候经常需要用到它,只需要设置好代理拦截数据包,然后发送到Repeater模块即可对数据随意修改之后再发送。
·Sequencer(会话)用于统计、分析会话中随机字符串的出现概率,从而分析Session、Token等存在的安全风险。
·Decoder(解码)用于对字符串进行编码和解码,支持百分号、Base64、ASCII等多种编码转换,还支持Md5、sha等Hash算法。
·Comparer(比较器)用于比较两个对象之间的差异性,支持text和hex形式的对比,通常用来比较两个request或者response数据包之间不同的地方,功能类似于网上常见的文本或者文件对比软件。
以上是Burp Suite的几乎所有功能。当然,不同的使用者有不同的需求,很少会用到上面介绍的所有功能。笔者再详细介绍一下常用的几个功能。
1.Proxy功能
这是使用最多的功能,因为其他的几个常用功能也依赖于代理功能抓到的数据包。
它的使用非常简单,打开Burp Suite后,点击菜单栏的Proxy即可看到Proxy功能界面。首先需要设置监听IP和端口,在Proxy Listeners区域选中代理项,然后点击左边的Edit按钮。它有三种监听模式,如图2-17所示。
如果你只需要监听本地的数据,绑定地址的地方设置Loopback only即可。如果需要监听到本机的所有HTTPS/HTTP流量,则选中All interfaces。默认监听8080端口,在这里可以自行修改,点击OK按钮完成设置。
接下来的设置要在需要被代理的客户端完成。这里的设置如图2-18所示。
由于这里要监听本地浏览器的数据,所以设置代理服务器地址为127.0.0.1,端口为8080,也就是Burp Suite中之前设置的监听端口。
图 2-17
图 2-18
现在就可以开始抓包测试了。如图2-19所示,已经可以成功抓到浏览器的Request和Response数据。
2.Intruder功能
该功能主要用于模糊测试。在模糊测试分类里,用得最多的是暴力破解登录用户密码,笔者非常喜欢这个功能,因为它有非常强大的兼容性来支持各种数据格式爆破。下面让我们来见识下Intruder到底是有多强大。这里演示用它来爆破Discuz后台登录密码。注意,Discuz登录是有登录验证限制的,每个IP只有5次登录失败的尝试机会。我们利用Burp Suite绕过这个登录限制进行密码爆破,绕过原理是,由于Discuz采用的是HTTP_CLIENT_IP的方式来获取IP,而这个值可以在发送请求时伪造,于是我们可以利用Burp Suite来伪造这个登录IP绕过错误次数限制。
图 2-19
首先,按上面的介绍设置好代理抓包,在浏览器中打开Discuz后台登录页面,在账号及密码输入框输入任意字符,点击“提交”按钮,回到Burp Suite,将抓到的数据项发送到Intruder。接下来,就需要对登录数据包进行修改。
在Intruder的Positions中需要设置攻击类型为Pitchfork,并且全选数据包,点击Clear$按钮清除全部标识。然后在HTTP头中添加“client-ip:1.2.3.4”,并且将1234这个四个数字单独打上$标识,为Post数据里面的admin_password字段的值也打上$标识。最后修改效果如图2-20所示。
接下来就需要设置payload了,点击菜单栏的Payloads,为Payload set下拉框里面的第1、2、3、4个选项设置一样的Numbers payload,包括其他参数设置的最终界面如图2-21所示。
设置Payload set为5的Payload type为simple list,并且点击下面的Load按钮载入你的密码字典,然后我们的所有配置就完成了。点击菜单栏的“Intruder”里的“Start Attack”按钮即可开始爆破。爆破成功的效果如图2-22所示。
图 2-20
图 2-21
图 2-22
3.Repeater功能
这个功能经常用于修改数据包以及重放请求,测试漏洞的时候经常需要使用到Repeater。下面来详细看看它的使用方法。
首先设置好proxy,然后通过浏览器触发请求查看Burp Suite捕捉到的数据包,在“http history”里选中监听到的数据包项,右键发送到Repeater。接着我们就可以对请求数据做任意修改了,修改完成后点击Go按钮即可发送数据包,如图2-23所示。
2.3.2 浏览器扩展
说到浏览器扩展,肯定要先说一下浏览器。通常优先选择的是Firefox,再就是Chrome浏览器,原因很简单,Firefox的扩展是目前浏览器里面最多的,也许是因为Firefox开源的原因,喜欢鼓捣它的人也就多了,自然而然各种插件和扩展也多了。另外不少扩展是专门做安全测试使用的,常用的像HackBar、FireBug、Live HTTP Headers、Modify以及Tamper Data,等等,稍后会详细介绍这几款扩展。同时,Chrome浏览器的扩展也非常多,不过方便用来做安全测试的比Firefox少,常用的有Http Headers、EditThisCookie、ModHeader等。其次就是一些扩展更少的浏览器,这里就不详细列举,不过建议常见内核的浏览器都应该安装一款,笔者电脑上就一直装着4款浏览器。
图 2-23
在下面的浏览器扩展介绍里,笔者会着重介绍Firefox的扩展。通常不涉及浏览器特性的漏洞测试,在Firefox下测试会比较方便;涉及浏览器特性的漏洞测试,则需要安装不同的浏览器。这里推荐一个浏览器测试软件IEtester,利用它可以切换IE浏览器内核版本,而不用安装所有版本的IE浏览器。接下来介绍常用的一些扩展的功能和使用方法。
1.HackBar
Hackbar是安全测试最常用的一款Firefox扩展,主要作用是非常方便安全人员对漏洞进行手工测试。它有三个输入框,分别是URL、Post数据以及Referer的参数设置,在输入框上部还提供了一个菜单栏,有各种各样编码、解码的小功能。Hackbar的整体界面如图2-24所示,箭头所指的标注框里面就是Hackbar了。
点击Load URL即可从Firefox地址栏获取当前URL,点击Execute之后即可发送我们设置好的请求数据。
图 2-24
2.Firebug
Firebug是一款开发者工具,功能与火狐自带的开发者工具差不多,支持直接对网页HTML、CSS等元素进行编辑,其中的“网络”功能可以直接嗅探Request和Response数据包。通常在利用一些支付漏洞或者SQL注入漏洞的时候,我们只需要把鼠标指针定位到要修改的网页区域,右键点击“使用Firebug查看元素”即可对网页进行修改测试漏洞,Firebug的界面图如图2-25所示。
图 2-25
3.Live HTTP Headers
Live HTTP Headers主要的功能是抓取浏览器Request和Response数据包,也支持对Request数据进行修改后再次请求。不好的一点在于它只能抓取到HTTP的数据,对HTTPS无效,不过用来分析简单页面数据它已经足够。Live HTTP Headers的界面如图2-26所示。
图 2-26
首先勾选Capture复选框,然后开始在浏览器中请求页面即可,选中抓到的数据包,点击Replay按钮可对数据进行编辑和重新发送。
4.Modify
Modify是一款火狐扩展工具,顾名思义,这是一款用来修改的扩展,Modify仅支持添加和修改Request中HTTP Header的字段,而且它是做全局修改,即开启Modify之后,它会把浏览器对任何网站的所有请求中对应字段进行修改。下面就介绍它的使用方法,图2-27就是Modify的主界面。
图 2-27
使用非常简单,在图中Modify的下拉框中选择要执行的模式,有Modify、Add以及Filter,然后在后面的两个输入框输入参数名以及参数值,点击Save再点击左上角的Start按钮即可启动Modify。
通过抓包可以看到以及将访问百度的请求中cookie的值修改成了“seay”,如图2-28所示。
图 2-28
2.3.3 编码转换及加解密工具
代码审计必然要接触到编码相关的知识,历史上很多高危的漏洞是由编码问题导致的,比如在XSS漏洞中可以利用浏览器对不同编码的支持来绕过过滤触发漏洞,另外我们也经常需要用到不同的编码转码来进行模糊测试漏洞。另外是加解密以及Hash算法,在代码审计中,我们经常遇到程序对特定字符进行加密或者Hash后用作Cookie和Session,或者是用户密码的保存通常也会加密,所以我们必须要了解常用的加解密方式,在后面会详细列举常见加解密方式及原理,这里就不详细介绍。下面笔者推荐几款编码转换和加解密的工具。
1.Seay代码审计系统自带的编码功能
主界面菜单栏点击“正则编码”即可打开该功能,目前支持Md5算法、URL、Base64、Hex、ASCII、Unicode多种常用编码方式转换。另外还针对MySQL与MSSQL注入等做利用格式做针对性处理,主界面如图2-29所示。
图 2-29
2.Burp Suite上有一个Decoder功能
这个功能可对字符串进行编码和解码,支持百分号、Base64、ASCII等多种编码转换,还支持Md2、Md5、Sha系列等Hash算法。它的使用也非常简单,只需要输入要转换要的字符,选择需要转换成的编码即可,如图2-30所示。
图 2-30
3.超级加解密转换工具
另外介绍一个专门用来加解密的国产小工具,支持的算法比较多,独立的exe文件轻巧干净,在百度搜索“超级加解密转换工具”即可找到这款小软件,使用界面如图2-31所示。
图 2-31
加密: 使用的时候只要在软件右侧的“方法分类选择”中选择加密方式,在“明文”输入框中输入需要“加密”的字符串,点击“加密”即可在“密文”框中看到加密后的结果。
解密: 使用的时候只要在软件右侧的“方法分类选择”中选择解密方式,在“密文”输入框中输入需要解密的字符串,点击“解密”即可在“明文”框中看到解密后的结果。
2.3.4 正则调试工具
正则表达式是用自定义好的特定字符组合,在正则解析引擎内进行字符匹配。正则表达式有非常强的灵活性,在很多不同的场景都会用到正则表达式,比如验证注册用户名、邮箱等格式是否合格,再比如用来搜索文件内容,很大一部分的WAF(Web应用防火墙)的规则也是基于正则表达式,等等,可谓无处不在,然而如果正则表达式写得不严谨,就经常会导致各种bug出现,像防火墙被绕过,等等。
首先要熟悉正则表达式的用法,熟悉各个符号的含义,这样我们才能写出严谨的正则表达式,才能在代码审计中发现别人正则表达式的问题所在。
笔者就不在这里详细的介绍正则表达式的详细用法,网上可以找到很多关于正则表达式的详细教程,这里仅介绍几个常用的正则表达式调试工具。
1.Seay代码审计系统中自带的正则调试功能
在Seay代码审计系统的菜单栏点击“正则编码”项,即可看到正则调试功能的主界面,它支持正则实时预览,即你在输入框修改正则表达式或者要匹配的源字符的时候,调试的结果会实时显示在下方的信息栏中,非常的直观和方便。效果图如图2-32所示。
图 2-32
除了实时调试,它还支持实时解码调试,一些特殊字符我们无法在输入框输入,但是可以利用编码处理后输入,只要设置解码选项,程序在用正则匹配前会先将源字符进行指定的编码转换后在进入正则引擎匹配,目前支持URL编码、Base64编码以及Hex编码,使用效果如图2-33所示。
图 2-33
2.灵者正则调试
这是一款从RenGod(灵者更名)中提取出来的绿色版正则调试工具,单文件的大小只有400多K,支持正则搜索、正则替换,也同样支持实时预览,在正则性能上也做的相当不错。如图2-34所示是它的主界面。
这款工具使用起来也非常简单,比如正则搜索功能的使用,将要搜索的文本放入到“要搜索的文本”输入框中,在“正则表达式”输入框中输入正则表达式,即可实时的在下方看到匹配上的结果。
2.3.5 SQL执行监控工具
SQL执行监控可以非常高效地帮助我们发现一些SQL注入和XSS等问题,帮助我们非常方便地观察到数据在Web程序与数据库中的交互过程,在做模糊测试时,只需利用模拟测试工具爬取页面的URL及表单,提交特定的参数如带单引号(‘)等,通过分析SQL执行日志则可以非常准确地判断出SQL注入漏洞是否存在,同样的注入<>”等符合也可以用来测试XSS漏洞。
图 2-34
这里分别针对MySQL和MSSQL列举SQL执行监控的工具和使用方法,其中着重介绍MySQL的监控,因为PHP大多都是使用的MySQL作为存储。
针对MySQL的执行监控,笔者没有找到比较好的工具,于是在自己的代码审计系统上加入了这么一个插件,主要原理是开启MySQL的general_log来记录MySQL的历史执行语句,它有两种记录方式,默认是通过记录到文件方式,另外一种是通过直接记录到MySQL库的general_log表中,为了更方便地查询,我选择的是记录到MySQL数据库的方式。另外这个功能的开启方式也有两种,一种是直接用MySQL的SQL语句开启,SQL语句如下:
set global general_log=on ;
SET GLOBAL log_output='table' ;
执行结果如图2-35所示。
不过这些步骤在笔者的工具中都自动完成了,同时它还支持快速过滤实时预览。只要点击下断,操作完之后点击更新即可看到这段时间内在MySQL执行过的所有SQL语句,主界面如图2-36所示。
图 2-35
图 2-36
另外一种开启方法是在MySQL配置文件中修改,在[mysqld]配置中加入如下代码:
general_log=ON
general_log_file={ 日志路径 }/query.log
重启MySQL后可以看到所有的SQL查询语句都会记录在设置的这个文件中。
SQL Server执行监控也很简单,在SQL Server上自带有一个性能监控的工具SQL Server Profiler,在开始菜单里可以找到它,使用SQL Server Profiler可以将SQL执行过程保存到文件和数据库表,同时它还支持实时查看和搜索。
下面我们来看看怎么使用它,打开SQL Server Profiler后,在左上角的菜单栏里选择“文件→新建跟踪”,在常规栏输入跟踪名(随意)后,点击“事件选择”标签,我们只需要SQL执行过程,所以要过滤掉一些干扰的东西,比如登录、退出等,在事件选择里只保留TSQL下面的SQL:BatchCompleted事件,然后点击“运行”,如图2-37所示。
图 2-37
运行后监控的到SQL语句如图2-38所示。
图 2-38
从图中监控结果可以非常清楚第看到之前执行的SQL语句以及开始执行时间、结束时间。