博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019测试指南-web应用程序安全测试(二)指纹Web服务器
阅读量:6293 次
发布时间:2019-06-22

本文共 5021 字,大约阅读时间需要 16 分钟。

hot3.png

Web服务器指纹识别是渗透测试仪的关键任务。了解正在运行的Web服务器的版本和类型允许测试人员确定已知的漏洞以及在测试期间使用的相应漏洞。

目前市场上有几种不同的供应商和Web服务器版本。了解正在测试的Web服务器的类型对测试过程有很大帮​​助,也可以改变测试过程。可以通过发送web服务器特定命令并分析输出来导出该信息,因为每个版本的web服务器软件可以对这些命令作出不同的响应。通过了解每种类型的Web服务器如何响应特定命令并将此信息保存在Web服务器指纹数据库中,渗透测试人员可以将这些命令发送到Web服务器,分析响应,并将其与已知签名的数据库进行比较。请注意,通常需要几个不同的命令来准确识别Web服务器,因为不同的版本可能会对同一命令做出类似的反应。很少有不同版本对所有HTTP命令作出相同的反应。因此,通过发送几个不同的命令,测试人员可以提高猜测的准确性。

 

测试目标

查找正在运行的Web服务器的版本和类型,以确定已知漏洞以及在测试期间使用的相应漏洞。

 

如何测试

黑盒测试

识别Web服务器的最简单和最基本的形式是查看HTTP响应头中的Server字段。Netcat用于此实验。

请考虑以下HTTP请求 - 响应:

$ nc 202.41.76.251 80HEAD / HTTP / 1.0HTTP / 1.1 200好的日期:2003年6月16日星期一02:53:29 GMT服务器:Apache / 1.3.3(Unix)(Red Hat / Linux)最后修改时间:1998年10月7日星期三,格林威治标准时间11:18:14ETag:“1813-49b-361b4df6”Accept-Ranges:字节内容长度:1179连接:关闭内容类型:text / html

Server字段中,可以理解服务器可能是Apache,版本1.3.3,在Linux操作系统上运行。

HTTP响应头的四个示例如下所示。

Apache 1.3.23服务器:

HTTP / 1.1 200好的 日期:2003年6月15日星期日17:10:49 GMT 服务器:Apache / 1.3.23 最后修改:2003年2月27日星期四03:48:19 GMT ETag:32417-c4-3e5d8a83 Accept-Ranges:字节 内容长度:196 连接:关闭 内容类型:文本/ HTML

Microsoft IIS 5.0服务器:

HTTP / 1.1 200好的 服务器:Microsoft-IIS / 5.0 到期:你的,2003年6月17日01:41:33 GMT 日期:2003年6月16日星期一01:41:33格林尼治标准时间 内容类型:文本/ HTML Accept-Ranges:字节 最后修改时间:2003年5月28日星期三格林尼治标准时间15:32:21 ETag:b0aac0542e25c31:89d 内容长度:7369

Netscape Enterprise 4.1服务器:

HTTP / 1.1 200好的 服务器:Netscape-Enterprise / 4.1 日期:星期一,2003年6月16日06:19:04 GMT 内容类型:文本/ HTML 最后修改日期:2002年7月31日星期三15:37:56 GMT 内容长度:57 接受范围:字节 连接:关闭

SunONE 6.1服务器:

HTTP / 1.1 200好的服务器:Sun-ONE-Web-Server / 6.1日期:2007年1月16日星期二14:53:45 GMT内容长度:1186内容类型:text / html日期:2007年1月16日星期二14:50:31格林尼治标准时间最后修改时间:2007年1月10日星期三09:58:26 GMTAccept-Ranges:字节连接:关闭

但是,这种测试方法的准确性有限。有几种技术允许网站对服务器横幅字符串进行模糊处理或修改。例如,可以获得以下答案:

403 HTTP / 1.1禁止 日期:星期一,2003年6月16日02:41:27 GMT 服务器:未知 -  Webserver / 1.0 连接:关闭 内容类型:文本/ HTML; 字符集= ISO-8859-1

在这种情况下,该响应的服务器字段被混淆。测试人员无法根据这些信息知道正在运行的Web服务器类型。

 

协议行为

更精细的技术考虑了市场上可用的几种网络服务器的各种特征。下面是一些允许测试人员推断出正在使用的Web服务器类型的方法列表。

HTTP头字段排序

第一种方法包括观察响应中几个头​​的排序。每个Web服务器都有标头的内部排序。以下面的答案为例:

来自Apache 1.3.23的回应

$ nc apache.example.com 80 HEAD / HTTP / 1.0 HTTP / 1.1 200好的 日期:2003年6月15日星期日17:10:49 GMT 服务器:Apache / 1.3.23 最后修改:2003年2月27日星期四03:48:19 GMT ETag:32417-c4-3e5d8a83 Accept-Ranges:字节 内容长度:196 连接:关闭 内容类型:文本/ HTML

来自IIS 5.0的响应

$ nc iis.example.com 80 HEAD / HTTP / 1.0 HTTP / 1.1 200好的 服务器:Microsoft-IIS / 5.0 内容位置:http://iis.example.com/Default.htm 日期:1999年1月1日星期五20:13:52 GMT 内容类型:文本/ HTML Accept-Ranges:字节 最后修改时间:1999年1月1日星期五20:13:55 GMT ETag:W / e0d362a4c335be1:ae1 内容长度:133

来自Netscape Enterprise 4.1的回复

$ nc netscape.example.com 80 HEAD / HTTP / 1.0 HTTP / 1.1 200好的 服务器:Netscape-Enterprise / 4.1 日期:星期一,2003年6月16日06:01:40 GMT 内容类型:文本/ HTML 最后修改日期:2002年7月31日星期三15:37:56 GMT 内容长度:57 接受范围:字节 连接:关闭

响应来自SunONE 6.1

$ nc sunone.example.com 80 HEAD / HTTP / 1.0HTTP / 1.1 200好的服务器:Sun-ONE-Web-Server / 6.1日期:2007年1月16日星期二15:23:37 GMT内容长度:0内容类型:text / html日期:2007年1月16日星期二,格林尼治标准时间15:20:26最后修改时间:2007年1月10日星期三09:58:26 GMT连接:关闭

我们可以注意到,Date,Netscape Enterprise和IIS之间的Date字段和Server字段的顺序不同。

格式错误的请求测试

另一个有用的执行测试包括将错误的请求或不存在的页面请求发送到服务器。请考虑以下HTTP响应。

来自Apache 1.3.23的回应

$ nc apache.example.com 80 GET / HTTP / 3.0 HTTP / 1.1 400错误请求 日期:2003年6月15日星期日17:12:37 GMT 服务器:Apache / 1.3.23 连接:关闭 转移:分块 内容类型:文本/ HTML; 字符集= ISO-8859-1

来自IIS 5.0的响应

$ nc iis.example.com 80 GET / HTTP / 3.0 HTTP / 1.1 200好的 服务器:Microsoft-IIS / 5.0 内容位置:http://iis.example.com/Default.htm 日期:1999年1月1日星期五20:14:02 GMT 内容类型:文本/ HTML Accept-Ranges:字节 最后修改时间:1999年1月1日星期五20:14:02 GMT ETag:W / e0d362a4c335be1:ae1 内容长度:133

来自Netscape Enterprise 4.1的回复

$ nc netscape.example.com 80 GET / HTTP / 3.0 不支持HTTP / 1.1 505 HTTP版本 服务器:Netscape-Enterprise / 4.1 日期:星期一,2003年6月16日06:04:04 GMT 内容长度:140 内容类型:文本/ HTML 连接:关闭

响应来自SunONE 6.1

$ nc sunone.example.com 80 GET / HTTP / 3.0HTTP / 1.1 400错误请求服务器:Sun-ONE-Web-Server / 6.1日期:2007年1月16日星期二15:25:00 GMT内容长度:0内容类型:text / html连接:关闭

我们注意到每个服务器都以不同的方式回答。答案在服务器版本上也有所不同。我们可以使用不存在的HTTP方法/动词创建请求,从而可以进行类似的观察。请考虑以下回复:

来自Apache 1.3.23的回应

$ nc apache.example.com 80 GET / JUNK / 1.0 HTTP / 1.1 200好的 日期:2003年6月15日星期日17:17:47 GMT 服务器:Apache / 1.3.23 最后修改:2003年2月27日星期四03:48:19 GMT ETag:32417-c4-3e5d8a83 Accept-Ranges:字节 内容长度:196 连接:关闭 内容类型:文本/ HTML

来自IIS 5.0的响应

$ nc iis.example.com 80 GET / JUNK / 1.0 HTTP / 1.1 400错误请求 服务器:Microsoft-IIS / 5.0 日期:1999年1月1日星期五20:14:34 GMT 内容类型:文本/ HTML 内容长度:87

来自Netscape Enterprise 4.1的回复

$ nc netscape.example.com 80 GET / JUNK / 1.0   错误请求</ TITLE> </ HEAD>  

错误请求
您的浏览器发送到查询此服务器无法理解。

响应来自SunONE 6.1

$ nc sunone.example.com 80 GET / JUNK / 1.0  错误请求</ TITLE> </ HEAD> 

错误请求
您的浏览器发送了此服务器无法理解的查询。

 

工具

  • httprint - 
  • httprecon - 
  • Netcraft - 

 

自动化测试

测试人员可以使用自动化工具来获得相同的结果,而不是依靠手动横幅抓取和分析Web服务器头。为了准确地指纹Web服务器,需要执行许多测试。幸运的是,有一些工具可以自动完成这些测试。“ httprint ”就是这样的工具之一。httprint使用签名字典,允许它识别正在使用的Web服务器的类型和版本。

运行httprint的示例如下所示:

 

 

在线测试

如果测试人员希望更隐蔽地测试并且不希望直接连接到目标网站,则可以使用在线工具。是一个在线工具的例子,它经常提供有关目标Web服务器的大量信息。使用此工具,我们可以检索有关操作系统,使用的Web服务器,服务器正常运行时间,Netblock所有者,与Web服务器和OS相关的更改历史记录

的信息示例如下所示: 
 

有望成为另一个在线工具,可对任何网站进行指纹识别,并对所提取的所有进行全面解释。这个项目背后的想法是,任何负责网站的人都可以测试网站向全世界展示的元数据,并从安全的角度对其进行评估。

 

转载于:https://my.oschina.net/u/3447023/blog/3017492

你可能感兴趣的文章
Python 条件判断
查看>>
中国大陆开源镜像站汇总
查看>>
Different Layouts for Different Widths
查看>>
关于cisco与中兴三层设备ospf互连
查看>>
vs2015_ef 连接mysql
查看>>
HTML5 手写板签名
查看>>
2. 异常的分类
查看>>
ARM平台硬件时钟中断周期HZ值计算
查看>>
win server2008搭建ftp服务器
查看>>
GIT 常用配置
查看>>
JS监听回车键
查看>>
Android 4.0中振动控制
查看>>
go gdb调试 参数设置 减小执行文件体积
查看>>
IE6、 IE7、IE8、Firefox兼容性问题
查看>>
该如何继续走下去。。
查看>>
Yii框架官方指南系列43——专题:URL(创建、路由、美化及自定义)
查看>>
Jenkins Android gradle只能打包app-release-unsigned.apk
查看>>
ibase4j nginx配置
查看>>
数据库设计规范之对象设计使用规范
查看>>
WIN7上VM中的LINUX如何设置上网
查看>>