一、通过客户端传送数据
1.隐藏表单字段
如下:
<input type="hidden" name="price" value="520" >
其中表单中price是隐藏字段,我们需要实现编辑操作。
方法1.
保存html页面的源代码,编辑字段的值,然后将源代码重新载入浏览器,并单击按钮。
方法2.
使用拦截代理服务器(如:burp suite)对数据进行动态修改更加简单方便。
2.HTTP cookie
与隐藏表单字段一样,
**方法:**
使用拦截代理服务器,通过更改设置cookie的服务器响应或随后发布这些cookie的客户端请求,对http cookie进行修改。
3.URL参数
如遇到以下情况:
情况1
http://mdsec.net/shop?prod=3&pricecode=32
包含参数的url 显示在浏览器的地址栏中,不用工具可以直接进行修改。
情况2
1.使用包含参数的url加载嵌入图像时;
2.使用包含参数的url加载框架内容时;
3.表单使用post方法并且其目标url包含预先设定的参数时;
4.应用程序使用弹窗口或其他方法隐藏浏览器修改上面的任何url参数。
**使用burp suite 进行拦截即可修改。**
4.Referer消息头
开发者认为:referer消息头可用于准确判断某个特殊的请求由哪个url生成。
同上可以使用burp suite进行拦截,修改参数。
5.模糊数据
<input type="hidden" name="pricing_token" value="E6635631d34f313s5454f35s124">
如上面的value中的值就是需要解密或去模糊处理,然后处理它的明文值。
6.ASP.net viewState
asp.net viewstate 是一种通过客户端传送模糊数据的常用机制。
服务器通过它在连续的提交请求的过程中保存用户界面中的元素,而不需要在服务器端维护所有相关的状态信息。
方法:burp suite 中提供了一个指示viewstate 是否受MAC保护的viewstate解析器。如果未受到保护,可以使用它进行编辑viewstate内容。
二、收集用户数据:HTML表单
1.长度限制
如下:
Quantity:<input type="text" name="quantity" maxlength="1">
html中表单中的quantity字段的最大长度为1。
方法:
使用burp suite 进行拦截进行参数值修改,或者删除maxlength参数。
2.基于脚本的确认
在表单提交时,使用JS函数进行判定是否符合定义的要求。
方法1
在浏览器中禁用js,就可以破解;
方法2
如果采用方法1,导致终止应用程序,使用代理服务器拦截确认后提交表单,并将其中的数据修改为想要的值。
3.禁用的元素
html表单中的元素是disable---禁用,显示会是灰色的,无法编辑和使用,提交表单时,表单也不会向服务器传送这个元素。
方法
使用burp suite进行拦截进行添加,尝试服务器的响应是否正常。
三、收集用户数据:浏览器扩展
1.常见的浏览器扩展技术
Java、Flash、Silverlight
它们均编译成中间字节码;
它们在提供沙盒执行环境的虚拟机中进行;
它们可能会使用远程框架,这类框架采用序列化来传输复杂的数据结构,或通过HTTP传送对象。
2.攻击浏览器扩展的方法
方法1
可以拦截并修改浏览器扩展组件提出的请求及服务器的响应。
方法2
可以直接针对组件实施攻击,并尝试反编译它的字节码,以查看其源代码;或者使用调试器与组件进行动态交互。
3.拦截浏览器扩展的流量
1.处理序列化数据
根据所采用的客户端组件推断出相关数据的序列化格式,但是任何时候,仔细检查相关HTTP消息才能确认序列化格式。
Java序列化
Content-Type:application/x-java-serialized-object
Dser时burp suite中的插件,提供一个框架,可用于查看和处理Burp拦截的Java序列化对象。该工具将对象的中给原始数据转换为xml格式,便于编辑。
Flash序列化
Content-type:application/x-amf
burp中支持AMF格式,确定包含序列化AMF数据的HTTP请求或响应后,会解压缩并以树状形式显示相关内容。
Silverlight序列化
Content-type:application/soap+msbn1
Burp Proxy中的一个插件能够自动对NBFS编辑的数据进行去序列化,然后在burp中的拦截窗口中显示这些数据。
2.拦截浏览器扩展流量时遇到的障碍
问题1
客户端组件可能并不执行在浏览器或计算机的设置中指定的代理配置。
方法
修改计算机的hosts文件以实现拦截的目的,同时向代理服务器配置为支持匿名代理,并自动重定向到正确的目标主机。
问题2
客户端组件可能不接受拦截代理服务器提供的SSL证书。
方法
将代理服务器配置为使用一个主CA证书,并在计算机的可信证书库中安装该CA证书。
可使用如:网络嗅探器,Echo Mirage
能够注入进程并拦截套接字API调用,以便查看,修改数据。
4.反编译浏览器扩展
在对浏览器扩展组件实施攻击时,最彻底的方法,是反编译对象、对源代码进行全面分析,修改源代码以改变对象的行为,然后重新编译源代码。
1.下载字节码
第一步,下载要处理的可执行的字节码。
Java applet通常使用的<applet>标签加载,其他组件则是使用<object>标签加载。
2.反编译字节码
第二步,解压缩,获得单个字节码文件,然后再将其反编译成源码。
Java反编译工具,当是Jad。
Flash反编译工具,Flasm,Flare,SWFScan。
Silverlight反编译工具,.NET Reflector。
3.分析源代码
希望执行的操作包括:
删除客户端输入确认;
向服务器提交未标准化的数据;
操纵客户端状态或事件,或者直接调用组件中的功能。
通过如下各种方式修改组件的行为:
在浏览器中重新编译并执行;
在浏览器以外重新编译并执行;
使用javaScript操纵原始组件。
4.字节码模糊处理
由于攻击者可以反编译字节码,因此,人们开发各种技巧来对字节码进行模糊处理。
进行模糊处理后的字节码,很难进行反编译或者反编译后的源代码可能造成误导和无效的源代码。
常用的模糊处理的技巧:
1、用没有意义的表达式代替有意义的类、方法和成员变量名称。
2、一些使用模糊处理的工具使用new 和int 之类的保留关键字代替项目名称。
3、许多模糊处理工具删除字节码中不必要的调试和元信息,包括源文件名称和行号、局部变量名称、内部类信息。
4、增加多余的代码,以看似有用的方式建立并处理各种数据,但它们与应用程序的功能实际使用的数据并无关系。
5、使用跳转指令对整个代码的执行路径进行令人费解的修改,致使攻击者在阅读反编译得到的源代码时无法判别执行代码的逻辑顺序。
6、引入非法的编程结构。
处理方法:
(1)不必完全理解源代码,只需查看组件中是否包含公共方法。
(2)如果已经使用无意义的表达式代替类、方法和成员变量名称,可以使用IDE上的“重构”帮助理解代码。
(3)选择适当的选项,在模糊处理工具中再次对模糊处理后的字节码进行模糊处理,这样可以撤销许多模糊处理。
5.附加调试器
要了解和攻击浏览器扩展,反编译时最全面可靠的方法。
问题:
对于大型项目代码复杂度大
方法:
采用观察组件的执行过程,并将其中的方法和类与界面中的关键功能进行关联,往往会更加简单。 只需要执行某项关键功能,更改其行为,以消除在组件中实施的控件,即可。
其中JavaSnoop是Java applet调试器,还能与jad进行集成。
6.本地客户端组件
OllyDbg 是一个可用于遍历本地可执行代码、设置断点,并在磁盘上或在运行时对可执行文件应用补丁的Windows调式器。
IDA Pro是一个反汇编程序,它可以将大量平台上的本地可执行代码反汇编成人类可读的汇编代码。
四、安全处理客户端数据
1.通过客户端传送数据
由于客户端组件和用户输入不在服务器的直接控制范围内,从本质上讲都不值得信任。
一种:
应用程序应完全避免通过客户端传送关键数据,将这关键数据保存在服务器上,并在必要时通过服务器逻辑直接引用。
二种:
签名或加密数据可能易受重传攻击;
知道并或能够控制送交它们的加密字符串的明文值,那么我们可以使用密码攻击,找出服务器使用的加密密钥。
2.确认客户端生成的数据
从理论上讲,客户端无法安全确认由客户端生成并且向服务器传送的数据。
原因:
(1)可轻易避开http表单字段和JavaScript之类的轻量级客户端控件,无法保障服务器收到的输入的安全性。
(2)在浏览器扩展组件中执行的控件有时更难以避开,但这种控件只能暂时阻止攻击者入侵。
(3)使用经强化模糊处理或压缩的客户端代码增添了另一层障碍,但是蓄意攻击者还是能够克服这些障碍。
方法
在应用程序的服务器端实施保护,客户端提交的每一项数据都应该视为危险和潜在恶意的。
3.日志与警报
应用程序虽然采用长度限制和基于JavaScript的确认之类的机制来提高性能与可用性,但这些机制应与服务器端入侵防御工具组合使用。实时发出警报,以便与管理员进行及时处理,应用程序还会主动采取防御措施,终止用户会话或者暂时冻结其账户。