Web信息抓取方法与解析受攻击面

2017-01-05 11:10:15来源:oschina作者:孟飞阳人点击

自己几年前研究安全测试时的学习笔记,翻笔记时,发现还存在,就发出来和大家共享吧~~


前言

许多Web服务器的Web根目录下有一个名为robots.txt的文件,其中列出了站点不希望Web爬虫访问或搜索引擎列入搜索的URL。有时,这个文件中还包含敏感功能的参考信息,渗透测试员肯定会对抓取这些信息感兴趣。一些攻击Web应用程序的抓取工具会搜索robots.txt文件,并根据其中列出的URL开始抓取过程。

一.用户指定的抓取

渗透测试步骤:


1.配置浏览器,使用Burp或WebScarab作为本地代理服务器


2.以常规方式浏览整个应用程序,访问发现的每一个连接/URL,提交每一个表单并执行全部多阶段功能。尝试在JavaScript激活与禁用,cookie激活与禁用的情况下进行浏览许多应用程序能够处理各种浏览器配置,可以获取应用程序内的不同内容和代码路径。


3.检查由代理服务器/爬虫工具生成的站点地图,确定手动浏览器时没有发现所有应用程序内容或功能。确定爬虫如何枚举每一个内容,例如,在Burp Spider中,检查“连接自”(Linked From)的详细内容。通过浏览器访问这些内容,以使代理服务器/爬虫工具检查服务器响应,从而确定其他所有内容。继续上述步骤,直到无法在确定其他内容或功能。


4.另外,还可以要求工具使用已经枚举的所有内容作为基础,主动抓取站点内容。首先请确定任何危险的或可能会中断应用程序会话的URL,并配置爬虫,将他们排除在抓取范围之外。运行爬虫并检查它发现的结果以查找其他所有内容。


5.在代理服务器/爬虫工具生成的站点地图中包含大量关于目标应用程序的信息,稍后可以利用他们确定应用程序暴露的各种受攻击面。

二.发现隐藏的内容
·1.蛮力技巧

由于各种可能的响应都可表示存在有某些重要内容,很难编写出一段完全自动化的脚本来输出一组有效资源。最佳方法是在使用蛮力技巧时尽可能多的收集与应用程序有关的信息,并对其进行手动检查。Burp Intruder可用于循环访问一组常见的目录名称并收集服务器的响应信息,可通过检查这些信息来确定有效的目录。


渗透测试步骤:


(1).手动提出一些访问有效与无效资源的请求,并确定服务器如何处理无效资源


(2).使用用户指定的抓取生成的站点地图作为自动查找隐藏内容的基础


(3).自动提出访问应用程序内已知存在的每个目录或路径中常用文件名和目录的请求。使用Burp Intruder或一段定制脚本,结合常用文件名和目录词汇库,迅速生成大量请求。如果已经确定应用程序处理访问无效资源请求的特定方式(如自定义的File Not Found页)配置Intruder或脚本突出显示这些结果,以便将其忽略


(4).收集从服务器收到的响应,并手动检查这些响应以确定有效的资源


(5).反复执行这个过程,直到发现新内容

·2.通过公布的内容进行推测

渗透测试步骤:


1.检查用户指定的浏览与基本蛮力测试获得的结果。编译枚举出得所有子目录名称、文件词干和文件扩展名列表


2.检查这些列表,确定应用程序使用的所有命名方案。例如,如果有些页面的名称为AddDocument.jsp和ViewDocument.jsp,那么可能还有叫EditDocument.jsp和RemoveDocument.jsp的页面。通常,只需要检查几个事例,就能推测出开发者的命名习惯。


3.有时候,不同内容的命名方案使用数字和日期作为标识符,通过他们可轻易推测出隐藏的内容。静态内容(而非动态脚本)常常采用这种命名方式。


4.检查所有客户端代码,如HTTP和JavaScript,确定任何与隐藏服务器端内容有关的线索。这些代码包括与受保护或没有建立连接的功能有关的HTML注释以及包含禁用SUBMIT元素的HTML表单等。


5.把已经枚举出得内容添加到其他根据这些列表推出出来的名称中,并将文件扩展名列表添加到txt、bak、src、inc和old这些常用扩展名,如Java和cs:这些扩展名可能揭示已经被编译到现有页面的来源文件。当执行漏洞扫描时,Paros工具可进行这种测试。


6.搜索开发者工具和文件编辑器不经意建立的临时文件。例如DS_Store文件,其中包含一个OSX目录索引;或者file.pho~1,他是编辑file.php时临时建立的文件


7.进一步执行自动操作,结合目录、文件词干和文件扩展名列表请求大量潜在的资源。


8.如果确定应用程序使用一种统一的命名方案,考虑在此基础上执行更有针对性的蛮力测试。


9.以新枚举的内容和模式作为深入用户指定抓取操作的基础,反复执行上述每一个步骤,继续执行自动内容查找。所采取的操作只收到想象力、可用时间以及在所针对的应用程序中发现隐藏内容的重要性的限制。


·3 利用公共信息

渗透测试步骤


1.列出所发现的与目标应用程序及其开发有关的每一个姓名和电子邮件地址,其中应包括已知的开发者、在HTML源代码中发现的名字、在公司Web站点联系信息部分发现的姓名以及应用程序本身披露的所有姓名(如管理员)


2.使用上文描述的搜索技巧,搜索发现的每一个姓名,查找他们在因特网论坛上发表的所有问题和答案。分析发现的所有信息,了解与目标应用程序功能或漏洞有关的线索。

·4 利用Web服务器

渗透测试步骤:


1.运行Nikto时,可以参考以下几点


2.如果认为服务器将Nikto检查的内容保存在一个非标准位置(如/cgi/cgi~bin而非/cgi-bin),可以使用-root/cgi/选项指定这个位置。在使用CGI目录的特殊情况下,还可通过-Cgidirs选项指定保存位置


3.如果站点使用不返回HTTP 404状态码的File Not Found定制页面,可以指定一个特殊字符串,使用-404选项标志这个页面。


4.Nikto并不对潜在的问题执行任何智能核实,因此,它往往会做出错误诊断。请手动核实由Nikto返回的任何结果。


·5 应用程序页面与功能路径

渗透测试步骤:


1.确定所有通过在参数中提交某一功能的名称(如/admin.jsp?action=editUser)而非通过请求代表那个功能的一个特殊页面(如/admin/editUser.jsp)访问应用程序功能的情况。


2.修改上述用于查找URL相关内容的自动化技巧,利用它处理应用程序使用的内容-访问机制。


3.如果可能,根据功能路径绘制一幅应用程序内容图,说明所有被枚举的功能和逻辑路径以及他们之间的依赖关系。

·6 发现隐藏参数

渗透测试步骤:


1.使用常用调试参数名称(调试、测试、隐藏、来源等)和常用值(真、是、开通和1等)列表,向一个已知的应用程序页面和功能提出大量请求。重复这一操作,直到浏览完所有名称/值组合,在POST请求的URL查询字符串和消息主体中插入增加的参数。


2.可以使用多组有效载荷和“集束炸弹”攻击类型,可通过Burp Intruder执行这一测试


3.监控收到的全部响应,确定任何表明增加的参数给应用程序处理过程造成的异常


4.根据可用时间,在许多不同的页面或功能中查找隐藏的参数。选择开发人员最有可能在其中执行调试逻辑的功能,如登陆、搜索、文件上传和下载等。

三.分析应用程序

值得研究的一些关键区域包括以下几方面:


1.应用程序的核心功能:用于特定的目的时,可利用他执行的操作


2.其他较为外围的应用程序行为,包括站外连接、错误消息、管理功能、日志功能、重定向使用等。


3.核心安全机制及其运作方式,特别是会话状态、访问控制以及验证机制与支持逻辑(用户注册、密码修改、账户恢复等)


4.应用程序处理用户提交的输入的所有不同位置:每个URL、查询字符串参数、POST数据、cookie以及类似内容。


5.客户端使用的技术,包括表单、客户端脚本、厚客户端组件(java applet 、ActiveX控件和Flash)和cookie。


6.服务器端使用的技术,包括静态与动态页面、使用的请求参数类型、SSL使用、WEB服务器软件、数据库交互、电子邮件系统和其他后端组件。


7.任何可收集到的、关于服务器端应用程序内部结构与功能的其他信息(客户端可见的功能和行为的后台传出机制)

·1 确定用户输入进入点

需要注意的关键位置包括:


1.每个URL字符串,包括查询字符串标记。


2.URL查询字符串中提交的每个参数


3.POST请求主体中提交的每个参数


4.每个cookie


5.极少情况下可能包括由应用程序处理的其他每个HTTP消息头,特别是User-Agent、Referer、Accept、Accept-Language和Host消息头

·2 HTTP指纹识别

从理论上说,服务器返回的任何信息都可加以定制或进行有意伪造,Server消息头等内容也不例外。一些Web服务器软件包含一个管理员工具,能够为Server消息头设定任意值。此外,许多安全产品使用各种方法阻止攻击者探测Web服务器软件,如Port80 Software开发的ServerMask。


尽管采取了这些防御措施,但意志坚定的攻击者仍然可以利用Web服务器的其他行为确定其使用的软件,或者至少缩小搜索范围。HTTP规范中包含许多可选或者由执行者自行决定是否使用的内容。另外,许多Web服务器还可以各种不同的方式违背或扩展该规范。因此,除通过Server消息头外,我们还可以使用大量迂回的方法来识别Web服务器。


Httprint是一个便利的工具,它可执行许多测试,能识别出Web服务器使用的软件。以Port80 Software的服务器为例,它以58%的可信度报告了服务器使用的软件实际为Microsoft IIS 5.1 。


屏幕截图还说明了Httprint如何挫败其他各种试图误导Web服务器所使用软件的企图。Foundstone Web站点提供一段误导型的信息,但Httprint仍然能够发现其实际使用的软件。

·3 文件扩展名暴露其技术

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


asp -- Microsoft Active Server Pages


aspx -- Microsoft ASP.NET


jsp -- Java Server Pages


cfm -- Cold Fusion


php -- PHP语言


d2w -- WebShpere


pl -- Perl语言


py -- Python语言


dll -- 通常为编译型本地代码(C或C++)


nsf 或 ntf -- Lotus Domino

在某些情况下,发现一个特殊的映射可能表示存在一个Web服务器漏洞。例如,过去IIS中的.printer和.ida/.idq处理程序易于遭受缓冲区溢出的攻击。


类似于下面的URL是另外一种值得注意的常用识别方法:https://wahh-app/news/0,,2-421206,00.html


URL末尾用逗号分隔的数字通常由Vignette内容管理平台生成。

·4 目录名称暴露其技术

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


servlet -- Java servlet


pls -- Oracle Application Server PL/SQL 网关


cfdocs或cfide -- Cold Fusion


silverStream -- SilverStreamWeb服务器


WebObjects或{function}.woa -- Apple Webobjects


rails -- Ruby on Rails

·5 会话令牌暴露其使用的技术

许多Web服务器和Web应用程序平台默认生成的会话令牌的名称也揭示其所使用技术的信息,例如:


JSESSIONID -- java平台


ASPSESSIONID -- Microsoft IIS 服务器


ASP.NET_SESSIONID -- Microsoft ASP.NET


cfm -- Cold Fusion


PHPSESSID -- PHP

·6 第三方代码组件

渗透测试步骤:


1.确定全部用户输入进入点,包括URL、查询字符串参数、POST数据、Cookie和其他由应用程序处理的HTTP消息头


2.分析应用程序使用的查询字符串格式。如果应用程序并未使用第三章描述的标准格式,设法了解它如何通过URL提交参数。几乎所有定制方案仍然使用名称/值模型的某种变化形式,因此要设法了解名称/值对如何被封装到已经确定的非标准URL中。


3.确定任何向应用程序处理过程引入用户可控制或其他第三方数据的带外通道


4.查看应用程序返回的HTTPServer消息头。注意,某些情况下,应用程序的不同区域由不同的后端组件处理,因此可能会收到不同的Server消息头。


5.检查所有定制HTTP消息头或HTML源代码注释中包含的任何其他软件标识符


6.运行Httprint工具识别Web服务器


7.如果获得关于Web服务器和其他组件的详细信息,搜索其使用的软件版本,确定再发动攻击时可供利用的所有漏洞


8.分析应用程序的URL列表,确定任何看似重要的文件扩展名,目录或其他提供服务器使用技术相关线索的内容。


9.分析应用程序发布的全部会话令牌的名称,确定其使用的技术


10.使用常见技术列表或Google推测服务器所使用的技术,或者查找其他明显使用相同技术的Web站点和应用程序。


11.在Google上搜索可能属于第三方软件组件的任何不常见的Cookie、脚本、HTTP消息头名称。如果发现使用相同组件的应用程序,对其进行分析,确定该组件支持的任何其他功能和参数,并确定目标应用程序是否具有这些功能,使用这些参数。注意,由于品牌定制,相同第三方组件在每个应用程序中的外观可能截然不同,但其核心功能(包括脚本和参数名称)往往并无变化。如果可能,下载并安装组件,对其进行分析以充分了解他的功能,查找其中存在所有漏洞。同时,查询已知漏洞库,确定相关组件中存在的所有已知漏洞。

四.确定服务器端功能
·1 仔细分析请求

渗透测试步骤:


1.检查提交到应用程序的全部参数的名称和参数值,了解他们支持的功能。


2.从程序员的角度考虑问题,想象应用程序可能使用了哪些服务器端机制和技术来执行能够观察到的行为。

·2 推测应用程序的行为

渗透测试步骤:


1.确定应用程序中任何可能包含与其他区域内部结构和功能有关的线索的位置


2.即使暂时无法获得任何肯定的结论,但是,在后期试图利用任何潜在的漏洞时,确定的情况可能会有用。

·3 解析受攻击面

可能发现漏洞的地方:


1.客户端确认 -- 服务器没有采用确认检查


2.数据库交互 -- SQL注入


3.文件上传与下载 -- 路径遍历漏洞


4.显示用户提交的数据 -- 跨站点脚本


5.动态重定向 -- 重定向与消息头注入攻击


6.登陆 -- 用户名枚举、脆弱密码、能使用蛮力


7.多阶段登陆 -- 登陆缺陷


8.会话状态 -- 可推测出的令牌、令牌处理不安全


9.访问控制 -- 水平权限和垂直权限提升


10.用户伪装功能 -- 权限提升


11.使用明文通信 -- 会话劫持、收集证书和其他敏感数据


12.站外连接 -- Referer消息头中查询字符串参数泄露


13.外部系统接口 -- 处理会话与/或访问控制的快捷方式


14.错误消息 -- 信息泄露


15.电子邮件交互 -- 电子邮件与命令注入


16.本地代码组件或交互 -- 缓冲区溢出


17.使用第三方应用程序组件 -- 已知漏洞


18.已确定的Web服务器软件 -- 常见配置薄弱环节、已知软件程序缺陷

渗透测试步骤:


1.了解应用程序执行的核心功能及其使用的主要安全机制


2.确定与常见漏洞有关的全部应用程序功能和行为特性


3.制定攻击计划,优先考虑看似最重要的功能和最严重的潜在漏洞


五.小结:

解析应用程序是向其发动攻击的重要前提。虽然直接发动攻击并开始探查实际漏洞的做法十分具有吸引力,但详细了解应用程序的功能、技术与受供给面更有利于后面的攻击。


在几乎所有的Web应用程序攻击中,在采用手动技巧的同时,适当采用受控的自动化技巧是最有效的攻击手段。几乎不存在任何完全自动化工具,能够对应用程序进行安全、彻底的解析。要解析应用程序,渗透测试员需要自己动手并利用相关经验。本章讨论的核心技术包括以下几项:

1.手动浏览和用户指定的抓取,枚举应用程序的可见内容与主要功能


2.使用蛮力结合认为干预和直觉发现尽可能多得隐藏内容。


3.对应用程序进行智能分析,确定其关键功能、行为、安全机制与技术


4.评估应用程序的受攻击面,确定最易受到攻击的功能和行为,对其执行更有针对性的探查,以发现可供利用的漏洞。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台