21.3 测试客户端控件

img611

图21-4 测试客户端控件

21.3.1 通过客户端传送数据

(1)在应用程序中,确定隐藏表单字段、cookie和URL参数明显用于通过客户端传送数据的所有情况。

(2)根据以上数据出现的位置及其名称与值,尝试确定它在应用程序逻辑中发挥的作用。

(3)修改数据在应用程序相关功能中的值。确定应用程序是否处理字段中提交的任意值,以及是否可以通过这样做干扰应用程序的逻辑或破坏任何安全控件。

(4)如果应用程序通过客户端传送模糊数据,渗透测试员可以以各种方式攻击这种传输机制。如果数据被模糊处理,渗透测试员可以破译所使用的模糊算法,从而在模糊数据中提交任意数据。即使它进行了安全加密,仍然可以在其他情况下重新提交这个数据,干扰应用程序的逻辑。请参阅第5章了解有关这些和其他攻击的更多详情。

(5)如果应用程序使用ASP.NET ViewState,对其进行测试,确定是否可以破坏它,或者其中是否包含任何敏感信息。请注意,不同应用程序页面使用ViewState的方式可能有所不同。

(a)使用Burp Suite中的ViewState分析器确定EnableViewStateMac选项是否被激活,该选项表示ViewState的内容不能被修改。

(b)审查解码后的ViewState,确定它包含的所有敏感数据。

(c)修改一个被解码的参数值,重新对其编码,然后将它提交给ViewState。如果应用程序接受修改后的参数值,那么应当把ViewState当做在应用程序中引入任意数据的一个输入渠道,并对它包含的数据执行与其他请求参数相同的测试。

21.3.2 客户端输入控件

(1)在将用户输入提交给服务器之前,确定使用长度限制和JavaScript检查等客户端控件对其进行确认的任何情况。当然,这些客户端控件可被轻易避开,因为渗透测试员可以向服务器发送任意请求。例如:

img612a

(2)通过提交通常被客户端控件阻止的输入,轮流测试每一个受影响的字段,确定服务器是否使用相同的输入确认。

(3)能够避开客户端确认并不表示存在任何漏洞。因此,应该仔细审查应用程序实施的确认机制,弄清应用程序是否依赖客户端控件保护自身,阻止畸形输入,以及这些输入是否可触发任何可被利用的条件。

(4)检查每一个HTML表单,确定所有禁用的元素,如灰色提交按钮,例如:

img612b

如果发现任何禁用的元素,就与其他表单参数一起提交这些元素,确定该元素是否会对应用程序的处理逻辑造成影响,渗透测试员可在攻击过程中利用这些影响。或者使用自动化代理服务器规则,自动启用禁用的字段,如Burp Proxy的“HTML修改”规则。

21.3.3 测试浏览器扩展组件

1.了解客户端应用程序的操作

(1)为正在测试的客户端技术设置一个本地拦截代理服务器,并监视客户端与服务器之间的所有流量。如果数据被序列化,可以使用某种去序列化工具,如Burp的内置AMF支持工具或用于Java的DSer Burp插件。

(2)浏览在客户端中呈现的所有功能。使用拦截代理服务器中的标准工具重新提出关键请求或修改服务器响应,以确定任何可能的敏感功能或强大功能。

2.反编译客户端

(1)确定应用程序使用的任何applet。通过拦截代理服务器查找以下请求的任何文件类型:

img613a

还可以在应用程序页面的HTML源代码中查找applet标签。例如:

img613b

(2)分析HTML源代码对applet方法的全部调用情况,并确定applet返回的数据是否被提交到服务器。如果这个数据为模糊数据(即经过模糊处理或加密),那么要想对其进行修改,可能需要反编译applet,获得它的源代码。

(3)在浏览器中输入URL,下载applet字节码,并将文件保存在本地计算机中。字节码文件的名称在applet标签的code属性中指定,该文件将位于codebase属性(如果此属性存在)指定的目录中;否则,它将保存在applet标签出现的页面所在的目录中。

(4)使用适当的工具将字节码反编译成源代码。例如:

img613c

以下是一些适用于反编译不同浏览器扩展组件的工具:

img002 Java——Jad

img002 Flash——SWFScan,Flasm/Flare

img002 Silverlight——.NET Reflector

如果applet被压缩成JAR、XAP或SWF文件,可以使用WinRar或WinZip等标准档案读取工具将其解压。

(5)分析相关源代码(从执行返回模糊数据的方法的源代码开始),了解应用程序执行了何种 处理。

(6)确定applet中是否包含任何可用于对任意输入进行相关模糊处理的公共方法。

(7)如果其中没有这类方法,修改applet的源代码,以达到令其执行的任何确认失效或允许模糊处理任意输入的目的。然后可以使用供应商提供的编译工具将源代码重新编译成最初的文件格式。

3.附加调试器

(1)对于大型客户端应用程序,要反编译、修改并重新打包整个应用程序往往非常困难,这时会遇到各种错误。通常,对于这些应用程序,在处理时附加运行时调试器会更加容易。JavaSnoop可对Java应用程序执行上述操作。Silverlight Spy是一款免费工具,可对Silverlight客户端进行运行时监视。

(2)找到应用程序用于实现安全相关的业务逻辑的关键功能和值,并在调用目标功能时放置断点。根据需要修改参数或返回值,以破坏其安全防御。

4.测试ActiveX控件

(1)确定应用程序使用的所有ActiveX控件。寻找通过拦截代理服务器请求的所有.cab文件类型,或者在应用程序页面的HTML源代码中寻找对象标签。例如:

img614

(2)通常,可以通过在进程上附加调试器并直接修改被处理的数据,或者改变程序的执行路径,破坏ActiveX控件实施的所有输入确认。请参阅第5章了解这种攻击的更多详情。

(3)通常,可以根据ActiveX控件导出的各种方法的名称及提交给它们的参数,猜测这些方法的作用。使用COMRaider工具可枚举出ActiveX控件导出的各种方法。测试是否可以操纵这些方法,从而影响控件的行为并避开它执行的所有确认机制。

(4)如果控件的作用是收集或核实某些与客户端计算机有关的信息,就可以使用Filemon与Regmon工具监控控件收集到的信息。通常,可以在系统注册表和文件系统中创建适当的数据项,修改控件使用的输入,从而影响其行为。

(5)在任何ActiveX控件中探查可用于攻击应用程序其他用户的漏洞。渗透测试员可以修改用于调用控件的HTML代码,向它的方法提交任意数据,并监控处理结果;可以寻找看似危险的方法名称,如LaunchExe,还可以使用COMRaider对ActiveX控件进行基本的模糊测试,确定缓冲区溢出之类的漏洞。