避开客户端控件一般而言有两种方法:在数据的传送方面和客户端的数据修改两方面来绕开这些客户端控件。
1.通过客户端传送数据一般而言有以下方法进行攻击:
A:隐藏表单字段:可能是通过字段来进行控制某些关键值的传输,服务端这样做有利于减轻自己的压力,这些隐藏字段可能并不会出现在页面显示出来,但是会出现在代理截的包里,如果他是简单编码甚至是明文传输,那你可能在代理里面直接进行修改从而达到某些目的。
B:http cookie:一般而言cookie有三种类型,一种是会话cookie,这种你可以进行一些生成算法上的攻击,另一种是序列cookie,如果他是用户标识符的话,那你可以进行水平权限攻击试下,还有一种常见的就是承载一些值的cookie,如果是简单编码或明文的话,那你可以进行修改获得一些信息。
C:url参数,这个没啥好说的,因为无论啥url参数保护技术都可以用代理加以解决。
D:referer消息头:这个字段可以进行csrf的防御,他的意义在于验证一个请求是从那一个url页面发出的,从这个角度抵御了csrf攻击,但是因为用户代理可随意修改这个字段,因此只靠这个不能保证安全。
E:模糊数据,一般是进行了编码或者哈希,如果遇到这种情况,可以考虑研究其编码或者哈希算法,从算法上还原他,或者用一个不同的值但经过同样的哈希算法的值来进行替换,从而实现修改。再不行,你还可以通过探索该模糊值的畸形字符串,对他进行所谓的逻辑攻击。
F:ASP.Net平台可以提供一种viewstate字段,通过viewstate字段来进行某些参数的传输,而viewstate字段会受到一个keyed hash字段的保护,这个字段在默认情况下是开启的,当其开始时viewstate字段会受到哈希处理,从而很难对viewstate进行修改,这种情况下你可以在不破坏其结构的情况下尝试修改他的值,看他会不会返回错误信息,如果不返回错误你可以尝试探索每个参数的功能,分析其中是否存在一定的漏洞可利用。
2.收集用户数据-html表单
A:长度限制,关于长度限制可以有两种方式进行绕过,一种是修改服务器返回的html页面中元素属性值,例如maxlength这个值,另外也可以直接截包修改被客户端限制的部分,测试服务器有什么反应,从而可以探索下有什么漏洞。
B:基于脚本的确认:主要讲的是开发者通常在客户端中执行定制的脚本确认,从而进行所谓的客户端控件确认,对付这个客户端控件有两种方法,一种是通过禁用javascript脚本来进行解除,但这种方法可能会影响其他功能,另一种思路是通过拦截服务端的响应在代理处就进行脚本修改,从而解除控件。
3.厚组件表单
用客户端组件来进行收集用户数据:一般主要思路是通过厚客户端组建来对数据进行模糊处理,从而即使被代理截取到也不会立即怎样。
A.java applet
如果客户端通过java applet处理用户输入并提交给服务器进行处理,那我们就可以通过所谓对java applet组建进行反编译,然后查看源代码找到进行模糊处理的部分,可对其进行修改到能处理任意输入的模糊处理,然后进行对不正常的输入进行测试,以探查其他漏洞。
B.字节码的模糊处理
现在很多是直接对字节码都进行模糊处理,这样你很难直接反编译出来什么代码,编译出来也很可能是乱码,从而进行一定的保护。遇到这种情况你可以反编译出来以后用IDE的重命名操作进行一定的帮助。
4.安全处理客户端数据
A:通过客户来传送数据,主要威胁点在于传送的过程可能遭受各种攻击,因此我们需要对数据进行模糊/加密处理,保护好自己的密钥,根本的治疗方法是在服务器段构建安全模型,使其不需要通过客户端来传送数据。
B:确认用户生成的数据,通过在服务器端进行数据确认来进行保护,客户端控件,厚客户端组件都可以进行初步确认。
C:日志和警报,通过我们的服务器端来检查,如果收到了明显在客户端就应该被阻止的数据提交,那就应该记录下来,中断会话等操作。