CH5 避开客户端控件

(1) 隐藏表单字段

保存HTML页面的源代码,编辑字段的值,然后将源代码重新载入浏览器或者在burp proxy中直接提交

(2)HTTP cookie

(3)URL参数

(4)Referer消息头

(5)模糊数据

破译

用同样处理过的数据替换

提交畸形字符串

(6)ASP.NET ViewState

ASP.NET ViewState是一种通过客户端传送模糊数据的常用机制。它是一个由所有ASP.NET WEB应用程序默认创建的隐藏字段,其中包含关于当前页面状态的序列化信息。

攻击步骤:

确定是否对ViewState启用了MAC保护,如果ViewState结构末尾存在一个20B的散列,则启用了MAC保护,burp中的解析器可以确定散列是否存在

即使受到保护,还可以解码各种不同应用程序页面中的ViewState参数,了解应用程序是否使用ViewState通过客户端传送任何敏感数据

尝试修改其中某个特殊参数的值,但不破坏它的结构,看是否会导致错误消息

如果能修改且不会导致错误,则应该分析其中每个参数的功能,以及应用程序是否使用这些参数保存任何定制数据,尝试修改每个参数

不同页面可能启用或禁用MAC保护,有必要测试每个重要页面,burp 被动扫描可以自动 报告

(7)长度限制

在客户端查看,删除长度限制的属性,提交超长数据,确认机制中是否有缓冲区溢出等漏洞

(8)基于脚本的确认

通过burp拦截

(9)禁用的元素

在每个表单中寻找被禁用的元素,disabled=true,尝试提交这些元素的名称,但是burp中要同时拦截响应,或使用proxy中的HTML修改功能。

(10)浏览器扩展技术

均编译为中间字节码

在提供沙盒执行环境的虚拟机中运行

可能会使用远程框架,这类框架采用序列化来传输复杂数据结构,或通过HTTP传送对象

Java/Flash/Silverlight(C#)

攻击浏览器扩展的方法 :

拦截浏览器扩展的流量:

处理序列化数据:需要解压缩序列化内容,对其进行编辑,然后重新对其进行序列化处理,一般可以根据所采用的客户端组件推断出相关数据的序列 化格式,但是,仔细检查 相关HTTP消息才能确认序列化格式。

Java序列化:Content-Type:application/x-java-serialized-object,Burp中的插件Dser可以处理

Flash序列化:Content-Type: application/x-amf,Burp直接支持

Silverlight序列化:Content-Type: application/soap+msbin1,NBFS数据(.NET Binary Format for SOAP),可以下载Burp的插件

可能的拦截障碍一:客户端组件不执行浏览器或计算机的HTTP代理,可以修改计算机的hosts文件以实现拦截目的,同时将代理服务器配置为支持匿名代理,并自动 重定向 到 正确的目标主机

可能的拦截障碍二:客户端组件不授受拦截代理服务器提供的SSL证书可以将代理服务器配置为使用一个主CA证书,并在计算机 的可信证书库中安装该CA证书

可能的拦截障碍三:客户端组件使用HTTP以外的协议通信,可以通过使用网络嗅探器或功能挂钩工具查看并修改相关流量。(Echo Mirage)

反编译浏览器扩展:

步骤:1. 下载字节码,java applet通常使用<applet>标签加载,其他组件则使用<object>标签加载。在代理服务器历史记录中查找;也可能缓存过后就不再加载,可以清空缓 存,重新打开浏览器,找到准确的包含字节码的URL后可以在浏览器中打开这个URL,直接下载

2. 字节码解压,字节码通常以独立文件包的形式发布,需要解压。Java applet打包成.jar,Silverlight则打包成.xap,将这两种后缀名重命名为.zip的文件,然后 解压,java的得到.class,Silverlight得到.dll,Flash打包成.swf,不需要解压。

3. 反编译字节码工具:Java使用Jad, Flash使用Flasm/Flare/SWFScan,Silverlight使用.NET Relfector

4. 分析源代码:查找内容包括 a.在客户端发生的输入确认或其他安全相关逻辑和事件;b. 在向服务器传送数据之前用于包装用户提交的数据的模糊或加密程序;

c. 在用户界面中不可见,但可以通过修改组件进行解锁的“隐藏的”客户端功能;d. 对以前未通过解析应用程序确定的服务器端功能的引用。

  一般我们希望的操作有删除客户端输入确认、向服务器提交未标准化的数据、操纵客户端状态或事件,或者直接调用组件中的功能。

5. 修改组件行为的方式:a. 在浏览器中重新编译并执行:JAVA使用jdk中的javac,Flash使用flasm或使用Adobe的某个Flash开发套件重新编译修改后的ActionScript源 代码,Silverlight使用Visual Studio,重新编译后要记得用zip软件压缩并修改后缀名为原始的.jar或.xap. 生效的方法也有3种:在磁盘缓存中找到原 始文件,替换为修改后的,但是如果缓存在内存中就无法使用;在拦截代理服务器加载组件的地方,指定另一个保存有重新编译过的文件系统或URL,但 是可能因违反同源策略而失败; 在Burp Proxy中,Paste from File替换消息体,这个最常用也最简单。

b. 在浏览器以外重新编译并执行:有些插件是将本地执行后的结果做模糊处理或加密然后将结果传给服务器,可以拦截这个请求,在本地执行完以上反编译、修改和重编译的操作后得到的结果进行同样的处理后再替换请求。 需要将原始可执行文件进行修改,更改为可以在命令行中运行的独立程序。

c. 使用Javascript操纵原始组件。

6.字节码模糊处理,常见的模糊处理技巧有,用没有意义的表达式代替有意义的类、方法和成员变量名称;使用new和int之类的保留关键字代替项目名称;删除字节码中不必要的调试和元信息;增加多余的代码,以看似有用的方式建立并处理各种数据;使用跳转指令对代码执行路径进行修改;引入非法的编程结构,如无法到达的语句和缺少return的代码路径。应对策略有三:不必完全理解源代码,只需查看组件中是否包含公共方法,哪些方法 可从JS中调用,签名是什么等;如果已经使用无意义的表达式,可以使用IDE工具 内置的重构功能(refactoring functionality)和rename工具;选择适当的选项,在模糊处理工具中再次对模糊处理后的字节码进行模糊处理,如Jode工具。

7. 举例:如jad xxx.class,输出为.jad文件,可用任意文件工具 查看,修改后修改为.java文件,增加main方法后可以直接在命令行执行javac xxx.java; java xxx

附加调试器:JavaSnoop:能与Jad集成,可以直接勾住在浏览器运行的Java applet.在目标加载applet之前运行,JavaSnoop将取消Java安全策略设置的限制,执行操作后,需确保完全关闭JavaSnoop并恢复相关权限;JSwat,在处理大型项目中,最好是反编译、修改和重编译关键的类文件,然后使用JSwat将其热包装到正在运行的应用程序中。要使用JSwat,需要使用JDK中的appletviewer工具 启动一个applet,然后将JSwat连接到该applet.  appletviewer -J-Xdebug -J-Djava.compiler=NONE -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5000 appletpage.htm

本地客户端组件,一般是通过ActiveX控件传送。ActiveX是在浏览器沙盒以外运行的定制浏览器扩展。可以用OllyDbg/IDA Pro进行调试和反汇编。

(11)安全处理客户端数据

1. 对客户端数据进行签名与/或加密处理以防止 用户篡改

2. 对于ASP.NET的应用程序,建议决不要将任何定制数据以及任何你不希望在屏幕上向用户显示的敏感数据保存在ViewState中,应总是激活用于启用ViewState MAC的选项。

3. 客户端提交的每一项数据都应被视为危险和潜在恶意的,唯一安全方法是在应用程序的服务器端实施保护

4. 使用日志与告警机制

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容