浅谈Web调试工具Fiddler
提到调试器,大家可能会在第一时间想到诸如windbg或ollydbg之类的比较出名的调试工具。在分析应用程序时,可以通过它们对应用程序的执行过程、寄存器状态信息以及内存数据信息进行分析和展现,方便分析人员对应用程序调试和分析。同样,在针对Web应用程序时,也有很多Web调试工具可以方便我们对Web应用程序的流程进行分析和调试,尤其是针对Web应用程序漏洞挖掘与分析的过程,Web调试工具更是发挥着重要的作用。
正如在前几期关于Web应用程序漏洞的介绍,在分析漏洞过程中主要是针对变量和处理过程的分析,而在黑盒测试过程中,最主要的就是针对变量的分析。通过分析用户可控的数据变量内容,将变量内容提交为可能构成安全威胁的数据信息,然后提交至服务端观察服务端处理情况,进而判断Web应用程序是否存在安全漏洞。然而,通过纯手工对提交数据变量内容进行分析很难找到所有可控的数据变量内容,因为有很多的变量数据内容都通过脚本代码、Flash程序或通过AJAX异步提交的方式进行处理,手工处理不仅有一定的难度,而且工作效率也很低。利用Web调试器则可以有效解决这一问题,Web调试工具将页面的元素信息或提交的HTTP数据报文请求信息进行获取,并将相应的数据信息显示给分析人员,分析人员可以通过调试器对数据内容进行修改然后再继续提交到服务端进行测试。同时,对于一些隐藏的或者是存在于脚本代码中的变量内容,Web调试工具一样可以快速获取其内容信息,并提供给分析人员查看和处理,从而有效提高了针对Web应用程序安全性分析的效率。
目前,互联网环境中Web调试工具的种类比较多,比较出名的工具如fiddler、firebug、httpwatch和wireshark等。本文对fiddler进行介绍,简单描述其使用方法及如何在Web应用程序安全性分析上使用fiddler快速发现可能存在的安全漏洞情况。
Fiddler是目前功能最为完善的Web调试工具之一,在分析过程中它可以记录客户端和服务端通信过程中所有http和https交互信息,同时也允许分析人员通过监控、设置断点以及修改数据信息的方式对数据报文进行处理。读者可以通过Fiddler的官方站点(http://www.fiddler2.com/)下载并安装Fiddler的最新版本进行测试。在工作过程中,Fiddler是以代理服务器的方式实现的,代理地址为127.0.0.1,端口为8888。工作过程中,客户端提交的数据请求信息首先会经过Fiddler,然后再通过Fiddler提交至远程服务端;服务端的响应报文信息返回时也会先经过Fiddler,然后在通过Fiddler返回给客户端浏览器环境中。工作原理如下图1所示。
图1
从图中我们可以了解到,用户和远程服务器交互的所有请求与响应报文信息都会经过Fiddler进行中转处理,所以也就了解了为什么Fiddler可以获取到所有的交互信息并修改处理。
Fiddler基本功能
目前最新版本的Fiddler的界面如下图2所示。
图2
Fiddler运行以后,会自动在浏览器环境中添加相应的代理地址信息,当用户在浏览器中访问网站时,访问信息就会在会话列表中进行显示,用户可以通过点击相应的会话信息在右侧窗口中查看与该会话相关的详细数据信息。当关闭Fiddler时,会自动注销代理地址,以防止出现因代理不存在而导致无法访问网络的情况发生。
在右侧Inspectors属性页中包含了我们关注的HTTP请求与响应的信息内容,其中一条访问百度并搜索Fiddler的信息如下图3所示。
图3
其中我们应用比较多的内容包括以下几部分:
Headers用于查看HTTP请求和响应数据报文头部信息
WebForm用于查看HTTP请求数据报文中提交的表单及表单中包含具体字段名称和内容的信息
Cookies用于查看HTTP数据报文中Cookie部分的详细信息
Raw用于查看完整的HTTP数据报文信息
很多调试器中都提供了命令执行的功能,可以在调试过程中实现快速执行的功能。Fiddler也不例外,在软件的左下角,Fiddler提供了一个命令执行工具QuickExec,通过该工具可以直接输入命令实现快速执行,如下图4所示。
图4
在QuickExec中常用主要有以下一些命令:
Help用于帮助打开Fiddler官方对QuickExec的帮助页面
?sometext用于搜索URL中包含有的文本信息,Fiddler会在URL中搜索特征关键字,并将包含有关键字的会话信息高亮显示
Cls用于对会话列表信息进行清空的操作,同样也可以使用快捷键Ctrl+X实现该功能
>size或<size用于帮助查找会话信息响应数据报文大于或小于指定大小的数据报文,并将符合条件的会话信息高亮显示。
更多的命令信息可以通过输入help指令或直接打开Fiddler关于QuickExec的帮助页面进行查看。
调试器最主要的功能就是设置断点了,通过设置断点可以查看执行到断点位置时关键数据信息,然后对数据信息进行处理以后选择继续执行即可。Fiddler作为比较出色的Web调试工具,其最强大的功能也是对设置断点功能的实现。分析人员设置好断点以后,提交HTTP请求数据信息时,分析人员可以修改HTTP请求数据包中任何信息,包括HTTP头信息或提交表单中的字段内容信息等。在Fiddler中设置断点的方法包括两种,一种是通过菜单选项进行设置,设置时选择Rules选项,然后选择Automatic Breakpoints并进一步选择Befor Request就可以实现在发出HTTP请求之前实现断点的功能,该方式会对所有的HTTP数据请求下断点,如下图5所示。
图5
取消该方式的断点还是通过菜单选择相应的Disabled就可以了。另外一种设置断点的方式是通过QuickExec命令行实现的,具体的命令是bpu,而且该命令可以针对指定的域名实现断点。当需要针对www.baidu.com的数据请求进行断点时,输入命令bpu www.baidu.com就可以了,并且这个断点只是针对www.baidu.com才有效,其他域名无效。取消该方式定义的断点的命令是直接执行bpu命令即可实现。
以上是针对HTTP请求进行断点的设置,针对HTTP响应进行断点也是类似的,可以通过选择After Responses实现,命令方式可以通过bpuafter实现对响应包的断点设置。下面我们来看一下应用断点对提交的HTTP请求报文信息进行修改的方法。
我们通过百度搜索页面进行演示,首先我们在Fiddler中通过执行命令的方式对所有www.baidu.com的请求数据报文设置断点,执行的命令是bpu www.baidu.com。然后我们在浏览器中百度页面中输入搜索关键字test,点击提交时,发现Fiddler给予提示,并在右侧Inspectors属性页中查看到了Fiddler拦截到的HTTP数据请求信息,如下图6所示。
图6
从图中我们可以看到在执行搜索过程中提交的表单信息以及我们搜索的关键字test。接下来我们在Fiddler中修改test为Fiddler,并点击下面的绿色按钮发送数据请求报文,此时浏览器会继续执行,而返回的结果是搜索Fiddler的结果信息,如下图7所示。
图7
至此,我们完成了使用Fiddler实现对HTTP请求数据报文下断点,并修改数据提交获取返回结果的整个过程。
利用Fiddler分析Web安全漏洞
利用Web调试工具分析安全漏洞最大的好处就是它可以帮助我们捕获所有我们能看到和我们看不到的请求信息,同时也可以对提交的数据信息进行展现,那么对于那些通过AJAX进行异步提交以及页面中标签属性被设置为Hidden的变量信息,我们就可以很方便地在Web调试工具中查看和修改测试。所以在分析Web安全漏洞时,调试器给我们带来了很大的方便,下面我们就应用Fiddler来对Web安全漏洞进行黑盒测试。
我们的测试对象是针对一款Web应用程序,检查该程序中是否存在SQL注入漏洞。Web应用程序提供文章搜索功能,该功能支持输入搜索关键字和选择搜索类型和栏目的选项,用户可以完全控制关键字内容的输入,而类型和栏目只能通过下拉列表框进行选择,如下图8所示。
图8
提交测试过程中,我们首先在Fiddler中设置断点,然后选择搜索选项为搜索文章标题,栏目为经济,搜索关键字为test,进行提交,Fiddler会对提交的数据请求进行拦截,并给出相应的字段内容信息,如下图9所示。
图9
从Fiddler捕获到的信息可以发现,搜索类型对应的字段名称是Field,栏目对应的字段名称是ClassID,搜索关键字对应的名称是keyword。我们不做任何修改将数据包发送出去,查看正常情况下返回的数据报文如下图10所示。
图10
我们将这个正常页面作为判断标准,然后我们将ClassID的值修改为2 and 1=1,并提交,如下图11所示。
图11
再次提交发现返回的页面信息与正常页面相同,然后再将ClassID的值修改为2 and 1=2,并提交,如下图12所示
图12
提交以后发现页面返回信息为找不到指定关键字的文章内容,说明Web应用程序对参数ClassID处理过程存在SQL注入漏洞,如下图13所示。
图13
通过使用Fiddler我们就可以很方便地实现对Web应用程序存在的漏洞进行测试,验证存在注入漏洞以后,就可以对漏洞进行进一步的利用来获取敏感信息。当然,在测试过程中,分析人员也可以通过手工构造表单或抓包修改并提交的方式对可能存在的漏洞进行测试,但是这些方法相对于使用Web调试工具来说就有些繁琐了