Web安全(3)

解析应用程序

博主采用Burp Suite实现

  • 攻击应用程序的第一步就是收集和分析与其有关的一些关键信息,以清楚了解攻击目标。
  • 解析过程首先是枚举应用程序的内容与功能,从而了解应用程序的实际功能与运行机制
  • 列出应用程序的功能后,接下来的首要任务就是仔细分析应用程序运行机制的每一个方面、核心安全机制及其(在客户端和服务器)使用的技术,确定应用程序暴露的主要攻击面并因此确定随后探查过程的主要目标。进而发现可供利用的漏洞。

枚举内容和功能

通常,手动浏览即可确定应用程序的绝大部分内容与功能。浏览应用程序的基本方法是从主初始页面开始,然后是每一个链接和所有多阶段功能(如用户注册或密码重置),但是为了全面记录每一项确定的功能,我们必须使用一些更加先进的技术

Web抓取

我们可以使用各种工具自动抓取Web站点的内容。这些工具首先请求一个Web页面,对其进行分析,查找连接到其他内容的链接,然后请求这些内容,再继续进行循环,直到找不到新的内容为止。

分析应用程序

确定用户输入入口点

在检查枚举应用程序功能时生成的HTTP请求的过程中,可以确定应用程序获取用户输入的绝大部分位置,需要注意的关键位置包括:

  • 每个URL字符串,包括查询字符串标记
  • URL查询字符串中提交的每个参数
  • POST请求主体中提交的每个参数
  • 每个cookie
  • 极少情况下可能包括由应用程序处理的其他所有HTTP消息头,特别是User-Agent,Referer,Accept,Accept-Language和Host消息头等

URL文件路径

查询字符串之前的URL部分并不被视为是进入点,因为人们认为它只是服务器文件系统上的目录和文件名称。但是,在使用RSET风格的URL的应用程序中,查询字符串之前的URL部分实际上可以作为数据参数,并且和进入点一样重要,因为用户输入就是查询字符串本身。

http://eis/shop/browse/electronics/iPhone3G   //典型的REST风格的URL

在上述的示例中,electronics和iPhone3G应被视为存储搜索功能的参数

请求参数

多数情况下,在URL查询字符串、消息主体和HTTP cookie中提交的参数都是明显的用户输入进入点,但是,一些应用程序并不对这些参数使用标准的name=value的格式,而是使用定制的方案。定制方案采用非标准查询字符串标记和字段分隔符,甚至可能在参数数据中嵌入其他数据方案(如XML),以下是一些非标准参数格式的实例:

/dir/file;foo=bar&foo2=bar2;
/dir/file?foo=bar$foo2=bar2;
/dir/file/foo%3dbar%26foo2%3dbar2;
dir/foo.bar/file;
/dir/file?param=foo:bar;
/dir/file?data=%3cfoo%3ebar%3c%2ffoo%3e%3cfoo2%3ebar2%3c%2ffoo2%3e

消息头

许多应用程序执行定制的日志功能,并可能会记录HTTP信息头(如Referer和User-Agent)的内容,应始终将这些消息头视为基于输入的攻击的可能进入点

带外通道

应用程序通过带外通道接收攻击者能够控制的数据

确定服务器端技术

提取版本信息

许多Web服务器公开与Web服务器软件本身和所安装的组件有关的详细版本信息。例如,HTTP Server消息头揭示大量与安装软件有关的详细版本信息。可能揭露与软件类型和版本有关信息的位置:

  • HTTP Server消息头
  • 建立HTML页面的模板
  • 定制的HTTP消息头
  • URL查询字符串参数

HTTP指纹识别

  • 大多数应用程序的服务器软件允许管理员配置在ServerHTTP消息头中返回的旗标。,但是攻击者仍然可以利用Web服务器的其他行为确定其所使用的软件,或缩小搜索范围
  • HTTP规范中包含许多可选或由执行者自行决定是否使用的内容,许多Web服务器还以各种不同的方式违背或扩展该规范,因此除了Server消息头以外,还有大量迂回的方法可以用来识别Web服务器(比如Httprecon对应用程序进行扫描)

文件扩展名

URL中使用的文件扩展名往往能够揭示应用程序执行相关功能所使用的平台或语言。

asp--Microsoft Active Server Pages
aspx--Microsoft ASP.NET
jsp--java Server Pages

即使应用程序在它公布内容中并不使用特定的文件扩展名,但我们还是能够确定服务器是否执行支持该扩展名的技术。例如,如果应用程序上安装有ASP.NET,请求一个不存在aspx文件将返回一个由ASP.NET框架生成的错误页面,但是,请求一个扩展名不同的不存在的文件将返回一个由Web服务器生成的常规错误消息。之所以出现上述不同的行为,是因为许多Web服务器将特殊的文件扩展名映射到特定的服务器端组件中,不同的组件处理错误的方式给不相同。

目录名称

一些子目录名称常常表示应用程序使用了相关的技术,如:

servlet--Java servlet
pls--Oracle Application Server PL/SQL网关

会话令牌

许多Web服务器和Web应用程序平台默认使用的会话令牌也揭示其所使用技术的信息

JSESSIONID--java平台
ASPSESSIONID--Microsoft IIS服务器
CFID/CFTOKEN--Cold Fusion 

第三方代码组件

许多Web应用程序整合第三方代码组件执行常见的功能,如购物车、登陆机制和公告牌,可以根据这些组件了解应用程序的功能。

确定服务器端功能

通过留意应用程序向客户端披露的线索,通常可推断与服务器功能和结构有关的大量信息

仔细分析请求

https://wahh-app.com/workbench.aspx?template=NewBranch.tpl&loc=/default&ver=2.31&edit=false
  1. 这里的.aspx表示这是一个ASP.NET的应用程序
  2. template很可能用于指定一个文件名
  3. loc参数很可能用于指定一个目录
  4. 文件扩展名.tpl证明了以上推论
  5. /default很有可能是一个目录名称
  6. 应用程序可能获得指定的模板文件,并将其内容包含在响应中
  7. edit设置为假,将这个值更改为真会修改注册功能
  8. ver参数不能推断出任何有用的线索,但修改这个参数可能会使应用程序执行一组可被攻击者利用的不同功能。

推测应用程序的行为

应用程序以统一的方式执行其全部功能,这可能是不同的功能由统一为开发者编写,或者可以遵循统一的设计规范,或者共享相同的代码组件,在这种情况下,我们可以轻松推断出服务器端某个领域的功能,并据此类推其他领域的功能。

隔离独特的应用程序行为

许多可靠或成熟的应用程序采用一致的框架来防止各种类型的攻击,在这类情况下,最可能发现漏洞的区域,是应用程序中后续添加或“拼接”而其常规安全框架不会处理的部分。

解析受攻击面


   转载规则


《Web安全(3)》 fightingtree 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录