Web安全实践(2)基于http的web架构剖析

                                                                                                  作者:玄魂

 web安全实践系列导航http://www.cnblogs.com/xuanhun/archive/2008/10/25/1319523.html

安全技术区http://space.cnblogs.com/group/group_detail.aspx?gid=100566 

前言

   web安全实践系列主要是对《黑客大曝光——web应用安全机密与解决方案(第二版)》的内容做的实践研究和部分编程实现。所以如果您能完全理解那本书可以跳过本文章。

 

 

正文

第一篇文章我简单的介绍了一下相关的工具,如果您已经熟悉了,今天我们就小试牛刀吧!

2.1确定目标

(1)ping。这是最常规的方法,我们可以对已知域名做该操作来获得ip地址。

(2)DNS查询。可以通过互联网上提供DNS查询服务的网站查询ip地址。

(3)端口扫描。对既定ip我们可以扫描是否开通相应的知名端口来确定该服务器启动的服务。当然服务器可以用任一的端口来做web服务,我们可以对相应的端口做简单的探测,比如用netcat发送简单的get或head请求。看它的回应是否开通web服务。

2.2获取目标web服务器信息

Web服务器信息采集是架构分析的主要内容,我们目前只讨论从http协议的角度来分析。

  1. Banner抓取。

    对于Banner抓取最直接的方法是我在上一节介绍的浏览器扩展工具的使用。下面我们以FireFox的扩展Live HttpHeaders为例。

    我们启动Live HttpHeaders的捕获选项。然后输入www.xiaonei.com.

    这时就可以查看我们发送的请求和得到的响应信息了。

     

    从响应信息我们可以得到该网站的服务器为 Resin版本为3.0.21。通过google我们可以了解该服务器以及该网站更多的相关信息,这一点是非常重要的,我以后会详细的介绍。

    其他能够获取http报文的工具我就不详细介绍了,只要能达到目的任何可行的方案都可以尝试。

  2. http指纹。

    http1.1规范(RFC2616)鼓励实现者为了实现安全,将Server字段做成可配置选项。如果这样的话,我们得到的http响应的信息就有可能是假的信息。

    应对于这个问题的解决方法,就是从服务器响应的内容中跳出来,进而观察服务器器对各种响应的整体行为。因为目前的服务器对于响应的细节并没有统一的规范,所以各有不同,只要从统计学的角度进行分析就可以顺利的看到服务器的本来面目。

    不常见的http请求方法

    请求越不常见,出现不同响应的可能性越大。

    错误信息

    错误信息最容易暴露服务器的本来面目。

    这两种方式都需要我们总结大量正确数据的基础上,再分析未知服务器然后把相应行为和已知行为对比做判断。希望有做这方面工作的高手能提供相关资料。

    httprint工具

    Net-Square 的Httprint工具,是一个自动化的http指纹分析工具,带有可定制web服务器指纹数据库。下面是Httprint的一个结果报告。

    如果我们想做自己的指纹分析工具,就要对各种服务器做测试,现在我还没有这个条件来做。

    2.3 中间件架构分析

有一个可能是返回信息的主机不是我们想象中的正在分析的主机,原因可能是web服务器的中间件架构配置,包括负载均衡器,虚拟服务器配置,代理,防火墙。

检测负载均衡器

如果对一个采用负载均衡的服务器进行连续的攻击,可能每一次的请求被分配到不同的主机上,如果意识不到这点,攻击将永远不会成功。理论上讲每个各个服务器应该是完全相同的,响应也该是完全相同的,但现实中的情况会有很多的差别。服务器的时间,配置,文件目录等都有可能不同,发现不同我们就有下手的机会。

  1. 在同一个ip范围内做端口扫描。首先确定主机别名的服务器ip地址,然后对周围的ip发送请求。如果得到的响应完全相同,可能是经过负载均衡的服务器。但是几天负载均衡的主机如果在同一局域网内部,这种方法是检测不到的。如果我们用这种方法得到了负载均衡的服务器ip,再对这些ip做探测以查看各主机的不同会给我们提供入侵的新思路。

    对于采用dns轮询方式的负载平衡我们很容易看到它的相关主机。

    上面通过域名解析我们看到校内网的图片服务器的负载平衡的主机的多个IP。

    而xiaonei.com则有两个ip60.28.196.237,60.28.196.247(手机校内网)。

  2. 时间戳分析。在一秒内连续发送多个请求,看返回的头部的时间戳是否相同,如果有的主机时间未同步,那么你很幸运的发现的了它的负载均衡。关于这一方法的实现我会在编程实现的环节做演示。
  3. Etag与Last-Modified。我们多次请求后观察两个值,如果不同则非常有可能存在负载均衡。
  4. 查看html源代码中的注释。相同的页面如果注释不同,很可能来自不同的主机。
  5. 查看ssl证书的差别,这种方法,我目前还没有很好的实践,希望各位能给我个好的实践方案。

哎呀,好累,今天本来想把中间件架构都写完的,看来是坚持不住了,那就留到明天吧。也需要更多的实验。最后还是更多的朋友来交流,感激不尽。

  

posted @ 2008-10-25 20:00  玄魂  阅读(3910)  评论(5编辑  收藏  举报