本身几年前研究安全测试时的学习笔记,翻笔记时,发现还存在,就发出来和你们共享吧~~php
许多Web服务器的Web根目录下有一个名为robots.txt的文件,其中列出了站点不但愿Web爬虫访问或搜索引擎列入搜索的URL。有时,这个文件中还包含敏感功能的参考信息,渗透测试员确定会对抓取这些信息感兴趣。一些攻击Web应用程序的抓取工具会搜索robots.txt文件,并根据其中列出的URL开始抓取过程。html
渗透测试步骤:java
1.配置浏览器,使用Burp或WebScarab做为本地代理服务器程序员
2.以常规方式浏览整个应用程序,访问发现的每个链接/URL,提交每个表单并执行所有多阶段功能。尝试在JavaScript激活与禁用,cookie激活与禁用的状况下进行浏览许多应用程序可以处理各类浏览器配置,能够获取应用程序内的不一样内容和代码路径。数据库
3.检查由代理服务器/爬虫工具生成的站点地图,肯定手动浏览器时没有发现全部应用程序内容或功能。肯定爬虫如何枚举每个内容,例如,在Burp Spider中,检查“链接自”(Linked From)的详细内容。经过浏览器访问这些内容,以使代理服务器/爬虫工具检查服务器响应,从而肯定其余全部内容。继续上述步骤,直到没法在肯定其余内容或功能。编程
4.另外,还能够要求工具使用已经枚举的全部内容做为基础,主动抓取站点内容。首先请肯定任何危险的或可能会中断应用程序会话的URL,并配置爬虫,将他们排除在抓取范围以外。运行爬虫并检查它发现的结果以查找其余全部内容。后端
5.在代理服务器/爬虫工具生成的站点地图中包含大量关于目标应用程序的信息,稍后能够利用他们肯定应用程序暴露的各类受攻击面。浏览器
因为各类可能的响应均可表示存在有某些重要内容,很难编写出一段彻底自动化的脚原本输出一组有效资源。最佳方法是在使用蛮力技巧时尽量多的收集与应用程序有关的信息,并对其进行手动检查。Burp Intruder可用于循环访问一组常见的目录名称并收集服务器的响应信息,可经过检查这些信息来肯定有效的目录。安全
渗透测试步骤:服务器
(1).手动提出一些访问有效与无效资源的请求,并肯定服务器如何处理无效资源
(2).使用用户指定的抓取生成的站点地图做为自动查找隐藏内容的基础
(3).自动提出访问应用程序内已知存在的每一个目录或路径中经常使用文件名和目录的请求。使用Burp Intruder或一段定制脚本,结合经常使用文件名和目录词汇库,迅速生成大量请求。若是已经肯定应用程序处理访问无效资源请求的特定方式(如自定义的File Not Found页)配置Intruder或脚本突出显示这些结果,以便将其忽略
(4).收集从服务器收到的响应,并手动检查这些响应以肯定有效的资源
(5).反复执行这个过程,直到发现新内容
渗透测试步骤:
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.以新枚举的内容和模式做为深刻用户指定抓取操做的基础,反复执行上述每个步骤,继续执行自动内容查找。所采起的操做只收到想象力、可用时间以及在所针对的应用程序中发现隐藏内容的重要性的限制。
渗透测试步骤
1.列出所发现的与目标应用程序及其开发有关的每个姓名和电子邮件地址,其中应包括已知的开发者、在HTML源代码中发现的名字、在公司Web站点联系信息部分发现的姓名以及应用程序自己披露的全部姓名(如管理员)
2.使用上文描述的搜索技巧,搜索发现的每个姓名,查找他们在因特网论坛上发表的全部问题和答案。分析发现的全部信息,了解与目标应用程序功能或漏洞有关的线索。
渗透测试步骤:
1.运行Nikto时,能够参考如下几点
2.若是认为服务器将Nikto检查的内容保存在一个非标准位置(如/cgi/cgi~bin而非/cgi-bin),可使用-root/cgi/选项指定这个位置。在使用CGI目录的特殊状况下,还可经过-Cgidirs选项指定保存位置
3.若是站点使用不返回HTTP 404状态码的File Not Found定制页面,能够指定一个特殊字符串,使用-404选项标志这个页面。
4.Nikto并不对潜在的问题执行任何智能核实,所以,它每每会作出错误诊断。请手动核实由Nikto返回的任何结果。
渗透测试步骤:
1.肯定全部经过在参数中提交某一功能的名称(如/admin.jsp?action=editUser)而非经过请求表明那个功能的一个特殊页面(如/admin/editUser.jsp)访问应用程序功能的状况。
2.修改上述用于查找URL相关内容的自动化技巧,利用它处理应用程序使用的内容-访问机制。
3.若是可能,根据功能路径绘制一幅应用程序内容图,说明全部被枚举的功能和逻辑路径以及他们之间的依赖关系。
渗透测试步骤:
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.每一个URL字符串,包括查询字符串标记。
2.URL查询字符串中提交的每一个参数
3.POST请求主体中提交的每一个参数
4.每一个cookie
5.极少状况下可能包括由应用程序处理的其余每一个HTTP消息头,特别是User-Agent、Referer、Accept、Accept-Language和Host消息头
从理论上说,服务器返回的任何信息均可加以定制或进行有意伪造,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仍然可以发现其实际使用的软件。
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内容管理平台生成。
一些子目录名称经常表示应用程序使用了相关技术。例如:
servlet -- Java servlet
pls -- Oracle Application Server PL/SQL 网关
cfdocs或cfide -- Cold Fusion
silverStream -- SilverStreamWeb服务器
WebObjects或{function}.woa -- Apple Webobjects
rails -- Ruby on Rails
许多Web服务器和Web应用程序平台默认生成的会话令牌的名称也揭示其所使用技术的信息,例如:
JSESSIONID -- java平台
ASPSESSIONID -- Microsoft IIS 服务器
ASP.NET_SESSIONID -- Microsoft ASP.NET
cfm -- Cold Fusion
PHPSESSID -- PHP
渗透测试步骤:
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.检查提交到应用程序的所有参数的名称和参数值,了解他们支持的功能。
2.从程序员的角度考虑问题,想象应用程序可能使用了哪些服务器端机制和技术来执行可以观察到的行为。
渗透测试步骤:
1.肯定应用程序中任何可能包含与其余区域内部结构和功能有关的线索的位置
2.即便暂时没法得到任何确定的结论,可是,在后期试图利用任何潜在的漏洞时,肯定的状况可能会有用。
可能发现漏洞的地方:
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.评估应用程序的受攻击面,肯定最易受到攻击的功能和行为,对其执行更有针对性的探查,以发现可供利用的漏洞。