当前位置: 首页 > news >正文

【web-渗透测试方法】(15.2)分析应用程序、测试客户端控件

目录

一、分析应用程序

1.1、确定功能

1.2、确定数据进入点

1.3、确定所使用的技术

1.4、解析受攻击面

二、测试客户端控件

2.1、通过客户端传送数据

2.2、客户端输入控件

2.3、测试浏览器扩展组件

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

反编译客户端

附加调试器

测试ActiveX控件


一、分析应用程序

1.1、确定功能

 1、确定为使应用程序正常运行而建立的核心功能以及每项功能旨在执行的操作

2、确定应用程序采用的核心安全机制以及它们的工作机制,重点了解处理身份验证、会话管理与访问控制的关键机制以及支持它们的功能,如用户注册和账户恢复

3、确定所有较为外围的功能和行为,如重定向使用、站外链接、错误消息、管理与日志功能

4、确定任何与应用程序在其他地方使用的标准GUI外观、参数命名或导航机制不一致的功能,然后将其挑选出来以进行深入测试

1.2、确定数据进入点

1、确定在应用程序中引入用户输入的所有进入点,包括URL、查询字符串参数、POST数据、cookie与其他由应用程序处理的HTTP消息头

2、分析应用程序使用的所有定制数据传输或编码机制,如非常规的查询字符串格式,了解被提交的数据是否包含参数名与参数值,或是否使用了其他表示方法

3、确定所有在应用程序中引入用户可控制或其他第三方数据的带外通道,如处理和显示通过SMTP收到的消息的Web邮件应用程序

1.3、确定所使用的技术

1、确定客户端使用的各种不同技术,如表单、脚本、cookie 、Java applet、ActiveX控件与Flash对象

2、尽可能确定服务器端使用的技术,包括脚本语言、应用程序平台以及与数据库和电子邮件系统等后端组件的交互

3、检查在应用程序响应中返回的HTTPserver消息头,查找定制HTTP消息头或HTML源代码注释中出现的其他任何软件标识符。有时不同的应用程序区域由不同的后端组件处理,因此可能会收到不同的标识符

4、运行Httprint工具,为Web服务器做"指纹标识"

5、检查内容解析过程中获得的结果,确定所有有助于了解服务器端所使用技术的文件扩展名、目录或其他URL序列,检查所有会话令牌和其他cookie的名称。同时使用Google搜索与这些内容有关的技术

6、分确定任何看似有用的、属于第三方代码组件的脚本名称与查询字符串参数,在Google中使用inurl:限定词搜索这些内容,查找所有使用相同脚本与参数、并因此使用相同第三方组件的应用程序,对这些站点进行非入侵式的审查,这样做可能会发现其他在攻击的应用程序中没有明确链接的内容和功能

1.4、解析受攻击面

1、设法确定服务器端应用程序的内部结构与功能以及用于实现客户端可见行为的后台机制。如获取客户订单的功能可能与数据库进行交互

2、确定各种与每一项功能有关的常见漏洞。如文件上传功能可能易于受到路径遍历攻击,用户间通信可能易于受到XSS攻击,"联络我们"功能可能易于受到SMTP注入攻击等

3、制订一个攻击计划,优先考虑最有用的功能以及与它有关的最严重的潜在漏洞,使用这份计划作为指导,决定方法的和不同区域投入多少时间和精力
 



二、测试客户端控件

 

2.1、通过客户端传送数据

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

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

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

4、如果应用程序通过客户端传送模糊数据,可以以各种方式攻击这种传输机制。如果数据被模糊处理,可以破译所使用的模糊算法,从而在模糊数据中提交任意数据,即使它进行了安全加密,仍然可以在其他情况下重新提交这个数据,干扰应用程序的逻辑。

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

A、使用Bp中的ViewState分析器确定EnableViewStateMac选项是否被激活,该选项表示ViewState的内容不能被修改

B、审查解码后的ViewState,确定它包含的所有敏感数据

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

2.2、客户端输入控件

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

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

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

4、检查每一个HTML表单, 确定所有禁用的元素, 如灰色提交按钮。如果发现任何禁用的元素,就与其他表单参数一起提交这些元素,确定该元素是否会对应用程序的处理逻辑造成影响,可在攻击过程中利用这些影响,或使用自动化代理服务器规则,自动启用禁用的字段,如Bp的"HTML修改"规则

2.3、测试浏览器扩展组件

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

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

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


反编译客户端

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

.class、.Jar:Java

.swf:Flash

.xap:Silverlight

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

2、分析HTML源代码对applet方法的全部调用情况,并确定applet返回的数据是否被提交到服务器,如果这个数据为模糊数据,对其进行修改前需要反编译applet,获得它的源代码

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

4、使用适当的工具将字节码反编译成源代码

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

Java——Jad

Flash——SWFScan、Flasm/Flare

Silverlight——.NET Reflector

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

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

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

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


附加调试器

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

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


测试ActiveX控件

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

2、可以通过在进程上附加调试器并直接修改被处理的数据,或改变程序的执行路径,破坏ActiveX控件实施的所有输入确认

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

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

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

相关文章:

  • 03.1线性回归
  • 【智能优化算法】基于觅食生境选择的改进粒子群算法(FHSPSO)附 Matlab代码
  • 密码相关----对称加密,非对称加密
  • 02.1、数据操作
  • 离散数学 --- 命题逻辑 -- 命题符号化与命题公式
  • 回坑记之或许是退役赛季?
  • 初识OpenGL (-)EBO元素缓冲对象(Element Buffer Object)
  • typescript真的有学习的必要吗?
  • PyTorch Lightning入门教程(二)
  • 【滤波跟踪】基于变分贝叶斯卡尔曼滤波器实现目标跟踪附matlab代码
  • C++ mutex 与 condition_variable
  • 基础 | Spring - [单例创建过程]
  • K8S集群Pod资源自动扩缩容方案
  • SPPNet
  • java多线程-多线程技能
  • 5、React组件事件详解
  • C++类的相互关联
  • java正则表式的使用
  • Terraform入门 - 3. 变更基础设施
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 排序(1):冒泡排序
  • 如何优雅地使用 Sublime Text
  • 智能合约开发环境搭建及Hello World合约
  • 阿里云ACE认证之理解CDN技术
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #include到底该写在哪
  • (搬运以学习)flask 上下文的实现
  • (超详细)语音信号处理之特征提取
  • (定时器/计数器)中断系统(详解与使用)
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)德国人的记事本
  • (转)重识new
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .Net 4.0并行库实用性演练
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .net中的Queue和Stack
  • [Android]使用Android打包Unity工程
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [C#]DataTable常用操作总结【转】
  • [Codeforces] probabilities (R1600) Part.1
  • [ERROR] Plugin 'InnoDB' init function returned error
  • [HNOI2008]水平可见直线
  • [HNOI2008]玩具装箱toy
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍
  • [Linux] PHP程序员玩转Linux系列-telnet轻松使用邮箱