web安全-剖析_基础构架剖析
剖析是用于研究和精确描述网站结构和应用工作方式的策略,是一个非常重要却常被忽视的Web入侵方向.
基础架构的支持:Web服务器,硬件/软件,DNS项目,网络设备,负载平衡器等.
1.足迹法(Footprinting)-使用各种基于互联网的研究方法确定目标应用或组织的范围.传统上有许多工具和技术用于这项任务:
a.互联网注册研究
b.DNS询问
c.总体组织研究
2.基本基础架构侦察技术,如:
a.服务器发现(Ping扫描)
b.网络服务识别(端口扫描)
3.公认端口HTTP的TCP 80 以及/或用于HTTPS/SSL/TLS的TCP 443操作.
提示:不要忽视端口扫描,许多web应用通过运行于Web服务器或者其他DMZ中与Web应用服务器相邻的服务器上的不恰当服务遭到入侵.
标志获取(Banner grabbing), 识别运行中的Web服务器软件的类型和型号(版本).
[root@localhost netcat-0.7.1]# nc 210.14.147.222 80 HEAD / HTTP/1.0 HTTP/1.1 403 Forbidden Server: nginx/1.6.0 Date: Sun, 27 Sep 2015 13:58:34 GMT Content-Type: text/html Content-Length: 168 Connection: close
跟高级的标志获取技术已经获取,能够确定真正运行的Web服务器。将针对HTTP的标志获取称为Web服务器指纹识别(Fingerprinting),他不再只是简单地关注部首值,还观察各种服务其中每个Web服务器中每个Web服务器的总体表现以及其响应的独特性.例如:IIS服务器对无效的HTTP请求的响应和可能不同于Apache Web服务器.这是确定实际运行的Web服务器类型和型号的好方法,也是学习Web服务器之间细微差别的重要之处.还有许多其他方法.
1.意外的HTTP方法.不同web服务器对不同类型的请求做出的不同反应:(其中已用粗体标出)
Sun One Web Server IIS5.x $ nc sun.site.com 80 $ nc iis5.site.com 80 PUT / HTTP/1.0 PUT / HTTP/1.0 Host:sun.site.com Host:iis5.site.com HTTP/1.1 401 Unauthorized HTTP/1.1 403 Forbidden Server: Sun-ONE-Web-Server/6.1 Server:Microsoft-IIS/5.1 IIS 6.0 Apache 2.0.x $ nc iis6.site.com 80 $nc apache.site.com 80 PUT / HTTP/1.0 PUT / HTTP/1.0 Host:iist6.site.com Host:apache.site.com HTTP/1.1 411 Length Required HTTP/1.1 405 Method Not Allowed Server:Microsoft-IIS/6.0 Server:Apache/2.0.54 Content-Type:text/html
2.服务器首部异常
例如:在Apache 2.x中,Date:部首在最前面,在Server:首部之上,如下:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0, no-cache
Content-Length: 43
Content-Type: image/gif
Date: Sun, 27 Sep 2015 14:20:01 GMT
Pragma: no-cache
Server: apache
X-Content-Type-Options: nosniff
又例如:在nginx中,Server:部首在最前面,在Date:部首之上.
HTTP/1.1 304 Not Modified Server: nginx Date: Sun, 27 Sep 2015 14:20:00 GMT Connection: keep-alive Last-Modified: Tue, 06 Nov 2012 02:01:10 GMT ETag: "50986f66-2d1a" Expires: Sun, 27 Sep 2015 14:35:01 GMT Cache-Control: max-age=900
再例如,在Sun One上,Server:和Date:首部的顺序与IIS 5.1相同,但注意,Content-length中,”length“是小写。Content-type:也一样,而IIS5.1中,这些部首都以大写开头:
HTTP/1.1 200 OK Server: Sun-One-Web-Server/6.1 Date: Mon,22 Aug 2005 20:33:36 GMT Content-length:2628 Content-type:text/html Last-modified:Tue,01 Apr 2003 20:47:57 GMT Accept-ranges:bytes Connection:close
3.Httprint工具
a.Net-Square的Httprint工具.带有一个可定制的web服务器特征码数据库.
b.SHODAN,一个搜索引擎,搜索的对象是能够对信息安全产生影响的计算机(路由,服务器等.),互联网的大部分区域都已经为SHODAN索引,可以简单的识别,
.gov域中的所有IIS服务器.
瑞士的所有的Apache服务器.
所有具有特定Web服务器平台已知漏洞的系统的IP地址
包括,负载均衡器,虚拟服务器配置,代理和Web应用防火墙.
A.虚拟服务器.在一台机器上运行多个虚拟IP的服务器.
B.检测负载平衡器,一般不可见,许多攻击者进行评估的时候忽略了它们,但负载平衡器可能极大地改变评估的方式.平衡器用来确保单个服务器的请求不会超载,用来分割流量.
C.对邻近IP范围进行端口扫描,识别负载平衡器的一种简单方法是,首先确定公认服务器IP地址,然后编写脚本对周围IP范围发出请求.如果得到多个几乎相同的响应,这可能都是负载平衡器的相同Web服务器.偶尔也会碰到一个或者几个服务器和其他有所不同。如软件版本过时,或者替代的SSH和FTP,这些异常可能是某种服务安全配置错误,可以针对IP地址单独发起攻击.
D.时间戳分析,检测负载平衡器的一个方法就是分析响应时间戳,因为许多服务器没有同步时间,可以通过在一秒内发出多个请求来确定是否有多台服务器.
E.ETag和Last-Modified的差异:通过比较相同请求资源的首部响应中的ETag和Last-Modified值,确定是否会从多个服务器上得到不同的文件.
ETag: "20095-2de2-3fdf365353cc0" ETag: "6ac117-2c5e-3eb9ddfaa3a40" Last_Modified: Sun, 19 Dec 2004 20:30:25 GMT Last_Modified: Sun, 19 Dec 2004 20:31:12 GMT
上面时间戳的差异表明服务器没有立即复制,请求的资源在大约1分钟之后才复制到其他服务器.
F.负载平衡器Cookie:有些代理服务器和负载平衡器在HTTP会话中添加自己的Cookie,以便它们可以保持更好的状态.
eg:AA002=1131030950-54332355234/12343234
经过搜索AA002是一个跟踪Cookie,表示"Avenue A"
G.枚举SSL异常:看看网站的SSL证书是否存在差异,或者SSL证书是否都支持相同的密码长度.
H.检查HTML源码:相同的页面的多次请求可能返回不同的HTML源代码注释.
I.检测代理:
IRACE请求:TRACE请求通知Web服务器回复刚刚收到的请求内容.在HTTP/1.1中作为调试工具.代理服务器将修改请求并且将其发送给Web服务器,代理服务器接着传回收到的请求.这样就能发现代理服务器对请求的修改.eg:
"Via:","x-Forwarded-For:","Proxy-Connection:" HTTP/1.0 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, TRACE, HEAD, CONNECT Access-Control-Allow-Headers: authorization Access-Control-Max-Age: 3628800 Content-Type: text/html Date: Fri, 05 Dec 2014 21:35:45 GMT Cache-Control: no-cache,must-revalidate Expires: Thu, 26 Oct 1995 00:00:00 GMT Transfer-Encoding: chunked Server: Allegro-Software-RomPager/5.10b1 Via: 1.1 192.168.1.5
反向代理是一个前端代理,将来自互联网的入站请求路由到后端服务器,其中两种修改方式:(1)将重新映射URL指向内部服务器上的相应URL。例如,TRACE /index.aspx HTTP/1.1 可能改为TRACE /site1/folder/index.asp HTTP/1.1 (2)反向代理修改Host:首部指向相关的内部服务器来转发请求.
J.标准连接测试:CONNECT命令主要用于代理服务器代理SSL连接.代理代表客户端建立一个SSL连接,例如:CONNECT https://secure.site.com:443 ,将通知代理服务器建立一个指向secure.site.com 443端口的SSL连接.但这个命可能会被滥用,用于连接网络内部的服务器.
*Request* CONNECT remote-webserver:80 HTTP/1.0 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 Host: remote-webserver *Successful Response* HTTP/1.1 200 Connection established
可用的一种较好的技术是识别目标的内部IP地址范围,然后对者一范围进行端口扫描.
K.检测Web应用防火墙:可以看作Web应用入侵防御系统(IPS)
如果在测试中你总是被踢出来,或者在发送攻击请求时超时,那么很可能在你和应用之间有一个应用防火墙.另一个迹象是,始终返回相同类型的错误.
一些常见的Web应用防火墙和一些非常简单的检测方法》
》Teros:该防火墙将对简单的TRACE请求或者任何无效的HTTP请求响应如下错误:
TRACE / HTTP/1.0 Host: www.site.com User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 HTTP/1.0 500 Content-Type:text/html <html><head><title>Error</title></head><body> <h2>ERROR:500</h2> Invalid method code<br> </body></html>
检测的Teros的另一种方法是定位它发出的cookie .like this : st8id=1aeaadf13asdf243sd233435k33c3s.00.d4512ad323342sdf) 大部分情况下cookie的值将具有类似的字符集和长度.
》F5 Trafficshield:
发送一个没有数据的PUT方法.将出现如下错误:
PUT / HTTP/1.0 Host:www.site.com User-Agent:Mozilla/4.0 (compatible;MSIE 5.01;Windows NT 5.0) HTTP/1.0 400 Bad Request Content-Type:text/html <html><head><title>Error</title></head> <body><h1>HTTP Error 400 </h1> <h2>400 Bad Request</h2> The server could not understand your request.<br>Your error ID is :5fa97729</body></html>
TrafficShield也有一个专用的标准Cookie:ASINFO
》Netcontinuum:
该防火墙的Cookie为NCI_SessionId。并且该设备对所有无效请求都响应一个404错误.
》URLScan:
这是一个免费的ISAPI过滤器,为控制HTTP请求提供了很多灵活工具。这类产品不提供动态保护,而是依赖冗长的特征代码配置文件或者允许长度文件配置来阻止攻击.
默认规则下,如果发送一个超过260个字符的路径,URLScan将响应一个404错误.但如果田间以下任何一个部首,URLScan将拒绝该请求:
Translate:
IF:
Lock-Token:
Transfer-Encoding:
以上部首将导致URLscan返回404错误.
》SecureIIS:
SecureIIS类似于URLScan的增强版本,-它是添加了漂亮GUI和一些极好特性的扩充商业版本.默认情况下返回一个拒绝响应为406错误码。
其中一条是限制任何部首值长度都为1024字符,所以只要设置超过这一限制的部首,查看请求是否被拒绝就可以了.