目录
简介:
1、在对浏览器扩展组件实施攻击时,最彻底的方法, 是反编译对象、对源代码进行全面分析、修改源代码以改变对象的行为, 然后重新编译源代码。
2、浏览器扩展被编译成字节码。字节码是一种由相关解释器(如Java虚拟机或Flash播放器)执行的、不依赖于特定平台的高级二进制表示形式,每种浏览器扩展技术都使用它们自己的字节码格式(浏览器扩展能够在解释器本身可运行的任何平台上运行)
3、最终可以将字节码反编译成类似于最初的源代码的内容,字节码可能采用了各种防御机制, 以防止反编译, 或者输出非常难以理解或解释的反编译代码。
4、尽管字节码采取了防御机制,在理解和攻击浏览器扩展组件时,反编译字节码仍然是首选方法。通过反编译字节码, 可以查看客户端应用程序的业务逻辑、访问它的全部功能,以及有针对性地修改其行为。
1.1、下载字节码
第一步是下载要处理的可执行字节码
字节码会从HTML源代码(运行浏览器扩展的应用程序页面)中指定的URL加载到单独的文件中
1.2、反编译字节码
反编译成可读的格式, 而不是将其完全反编译成源代码
要反编译和反汇编Flash可以使用以下工具
Flasm、Flare、SWFScan
Silvcrlight工具,Silvcrlight字节码可以使用一种称为.NET Roflector的工具反编译成源代码
1.3、分析源代码
简介:
获得组件的源代码或类似代码后, 就可以采取各种方法对其实施攻击。
查看源代码, 以了解组件的工作机制及其包含或引用的功能
分析对象:
1、确认逻辑:(客户端)输入确认或其他安全相关逻辑和事件
2、处理程序:(向服务器传送数据之前)包装用户提交的数据的模糊或加密程序
3、隐藏功能:(用户界面不可见)可以通过修改组件进行解锁的"隐藏的"客户端功能
4、引用功能:对以前未通过解析应用程序确定的服务器端功能的引用
修改组件:
查看源代码可以揭示组件中的一些功能,希望修改或操纵这些功能,以确定潜在的安全漏洞,希望执行的操作包括删除客户端输入确认、向服务器提交未标准化的数据、操纵客户端状态或事件,或者直接调用组件中的功能
1、在浏览器中重新编译并执行
要改变组件的行为, 可以对反编译得到的源代码进行修改, 重新将其编译成字节码, 然后在浏览器中执行修改后的组件。需要操纵关键的客户端事件(如在du博程序中摇骰子时)
重新编译源代码,需要使用的技术和工具
Java , 可以使用JDK中的Java程序重新编译修改后的源代码
Flash, 可以使用flasm重新汇编修改后的字节码, 或使用Adobe的某个Flash开发套件重新编译修改后的ActionScript源代码
Silverlight,可以使用Visual Studio重新编译修改后的源代码
①将源代码重新编译成一个或多个字节码文件后,可能需要重新打包可分配的文件。对于Java和Silverlight, 需要用修改后的字节码文件替换已解压的档案中的文件, 使用zip实用程度重新压缩文件, 然后根据需要将文件扩展名更改为.jar或.xap
将修改后的组件加载到浏览器中,使所做的更改在测试的应用程序中生效(方法很多)
②如果可以在浏览器的磁盘缓存中找到包含原始可执行文件的物理文件, 可以用修改后的版本替换该文件, 然后重新启动浏览器(如果浏览器并不对每个缓存的资源使用不同的文件,或者浏览器只是将扩展组件缓存在内存中, 这种方法可能无法生效)
③可以使用拦截代理服务器修改加载组件页面的源代码, 并指定另一个指向本地文件系统或受控的Web服务器的URL。一般不能成功, 更改加载组件的域可能会违反浏览器的同源策略,需要重新配置浏览器, 或采用其他方法弱化同源策略
④可以使浏览器从原始服务器重新加载组件, 使用代理服务器拦截包含可执行文件的响应, 并用修改后的版本替换消息主体。在bp中, 可以使用“从文件中粘贴”上下文菜单项达到这个目的。这是最简单的方法, 也是最不容易遇到上述问题的方法
2、在浏览器以外重新编译并执行
有时并不需要在执行组件的过程中修改组件的行为
一些浏览器扩展组件会确认用户提交的输入, 对这些输人进行模糊处理或加密, 然后将其传送至服务器。在这种情况下,可以对组件进行修改, 使其对任何未经确认的输入执行必要的模糊处理或加密, 并在本地输出结果。然后, 可以使用代理服务器在原始组件提交经过确认的输入时拦截相关请求, 并用修改后的组件输出的值替换这些请求
要实施这种攻击, 需要对在相关浏览器扩展中运行的原始可执行文件进行修改, 将其更改为可以在命令行中运行的独立程序。进行修改的方式因所采用的编程语言而异(在Java中,只需要实施main方法)
3、使用JavaScript操纵原始组件
有时并不需要修改组件的字节码。可以通过修改HTML页面中与组件交互的JavaScrip来达到目的
通过查看组件的源代码, 可以确定组件的所有可直接从JavaSccrpt调用的公共方法, 以及组件处理这些方法的参数的方式。除了可以从应用程序页面调用的方法外, 还存在其他一些方法,能够了解有关这些方法的参数的用途及处理方式的详细信息
组件可能会公开这样的方法:调用该方法可以启用或禁用部分可见的用户界面。使用拦截代理服务器可以编辑加载该组件的HTML页面, 修改其中的JavaScript或在其中添加一些JavaScript, 以解锁被隐藏的部分界面
流程:
1、下载源码:下载组件的字节码, 解压字节码, 然后将其反编译成源代码
2、执行逻辑:查看相关源代码, 了解组件的执行过程
3、调用方法:如果组件包含任何可进行操纵以实现目的的公共方法, 可以拦截与该组件交互的HTML响应, 并在其中添加一些JavaScript, 以使用输入调用相应的方法
4、修改组件:如果组件中不包含公共方法, 可以通过修改组件的源代码, 重新编译修改后的代码,然后在浏览器中或作为独立的程序执行这些代码, 从而达到目的。
5、处理原理:如果组件用于向服务器提交模糊或加密数据,则可以使用修改后的组件向服务器提交各种经过适当模糊处理的攻击字符串, 以探查其中的漏洞, 就像针对任何其他参数实施攻击一样