文档章节

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

孟飞阳
 孟飞阳
发布于 2016/07/10 22:01
字数 5057
阅读 40
收藏 1
点赞 0
评论 0

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

前言

       许多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.评估应用程序的受攻击面,确定最易受到攻击的功能和行为,对其执行更有针对性的探查,以发现可供利用的漏洞。

 

© 著作权归作者所有

共有 人打赏支持
孟飞阳
粉丝 202
博文 893
码字总数 530681
作品 5
朝阳
个人站长
Web-安全-学习资料(很全)​

看原文 看原文 看原文 Web-安全-学习资料(很全) Web-Security-Learning 在学习web安全的过程中整合的一些资料。 该repo会不断更新,最近更新日期为:2017/9/19。 9月19日更新: 新收录文章...

Ho0oH ⋅ 2017/09/26 ⋅ 0

ORACLE ACCESS MANAGER CVE-2018-2879漏洞分析

        去年11月,SEC密码咨询中心发现了一种相当有趣的由Oracle Access Manager(OAM)使用的加密格式。在这篇博文中,我们将演示密码实现的小缺陷如何对产品的安全性产生实际影响。...

嘶吼RoarTalk ⋅ 05/10 ⋅ 0

DNS安全漫谈:谁来拯救脆弱的DNS?

DNS是网络应用的基础设施,它的安全性对于互联网的安全有着举足轻重的影响。对于经常使用电脑或者信息设备的人来说,经常会在网络设置中看到DNS。但是对于普通大众来说,DNS是非常陌生的。而...

DNSPod官方 ⋅ 2014/02/27 ⋅ 0

Android开发_Jsoup抓取网页信息

想要抓取别的网页的信息,比较好的方法就是jsoup抓取,保存html为 documents 解析有用信息就可以! http://www.open-open.com/jsoup/ 一般情况下jsoup多用于JAVA方面的开发,可以利用jQuery,...

zhangty0223 ⋅ 2013/07/17 ⋅ 0

【转】Laravel 防止XSS攻击

目前我们的项目中存在非常严重的 XSS 安全漏洞。作为一个合格的 Web 开发工程师,必须遵循一个安全原则: 永远不要信任用户提交的数据 XSS 也称跨站脚本攻击 (Cross Site Scripting),恶意攻...

U_KNOW ⋅ 2017/11/23 ⋅ 0

使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的...

日期:2012-7-20 来源:GBin1.com 在线演示 本地下载 如果你曾经开发过内容聚合类网站的话,使用程序动态整合来自不同页面或者网站内容的功能肯定对于你来说非常熟悉。通常使用java的话,我们...

gbin1 ⋅ 2012/07/20 ⋅ 0

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

作者:玄魂 web安全实践系列导航http://www.cnblogs.com/xuanhun/archive/2008/10/25/1319523.html 安全技术区http://space.cnblogs.com/group/groupdetail.aspx?gid=100566 前言 web安全实践......

吞吞吐吐的 ⋅ 2017/12/07 ⋅ 0

SDL-软件安全设计初窥

前言 本文详细介绍微软软件安全开发生命周期(SDL)相关概念,并讨论要遵循 SDL 过程所应执行的各种安全活动,其中着重对软件安全设计的原则进行探讨。并对STRIDE威胁建模方法进行深入介绍。...

老鹰a ⋅ 2017/09/08 ⋅ 0

Web安全趋势与核心防御机制

Web安全趋势与核心防御机制 孟飞阳 2012年1月16日 一. WEB安全技术产生原因 早期:万维网(World Wide Web)仅有Web站点构成,这些站点基本上是包含静态文档的信息库。这种信息流仅由服务器...

孟飞阳 ⋅ 2016/07/10 ⋅ 9

Injection Attacks-Log 注入

日志注入(也称日志文件注入) 很多应用都维护着一系列面向授权用户、通过 HTML 界面展示的日志,因而成为了攻击者的首要目标,这些攻击者试图伪装其他攻击、误导日志读者,甚至对阅读和分析...

OneAPM蓝海讯通 ⋅ 2016/03/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

2018上海云栖大会workshop-日志数据采集与分析对接

摘要: 日志数据采集与分析对接 课程描述 通过日志服务采集用户、数据库、业务等访问数据。演示对于业务日志分析与处理,程序日志查询与监控,打通日志与数据仓库对接案例。 日志种类 网站访...

猫耳m ⋅ 28分钟前 ⋅ 0

SpringMVC中的ContentNegotiatingViewResolver配置

pom.xml <properties><commons-lang.version>2.6</commons-lang.version><slf4j.version>1.7.6</slf4j.version><spring.version>4.1.3.RELEASE</spring.version> <jack......

颖伙虫 ⋅ 30分钟前 ⋅ 0

Spring Boot 2.0正式发布,升还是不升呢?

Spring几乎是每一位Java开发人员都耳熟能详的开发框架,不论您是一名初出茅庐的程序员还是经验丰富的老司机,都会对其有一定的了解或使用经验。在现代企业级应用架构中,Spring技术栈几乎成为...

java高级架构牛人 ⋅ 31分钟前 ⋅ 0

打包时隐藏打印日志

1.打包时不允许项目中有打印的日志,可以在pch中加入下面这段代码即可 #ifdef DEBUG# define Log(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA...

小黑202 ⋅ 32分钟前 ⋅ 0

SSL双向认证的实现

环境 系统:archlinux/centOS nginx:nginx/1.12.2 浏览器:火狐firefox 前提:1.安装nginx。    2.安装openssl。 生成证书 新建工作目录  首先建立一个工作目录,这里以我的工作目录为例...

颖辉小居 ⋅ 38分钟前 ⋅ 0

vscode 代码格式化,语法检查插件ESLint+Prettier

ESLint+Prettier prettier只关注格式化 ,插件prettier-vscode,编辑器的配置setting.json会出现prettier插件的相关配置节点,同时也能看到一些默认的配置信息。 安装成功后,编辑器默认的格式...

momo1987 ⋅ 40分钟前 ⋅ 0

使用TinyProxy搭建代理服务器

什么是TinyProxy 它是一个代理服务器,用来实现http或https代理,windows系统一直在用ccproxy, 非windows系统,怎么开放个http代理呢?那就是TinyProxy。 安装 直接执行命令即可 sudo apt-g...

bengozhong ⋅ 40分钟前 ⋅ 0

掌握需求过程

1,需求必须可度量、可测试 2,需求是什么? 功能需求 非功能需求 限制条件 3,Volere需求过程 采用Volere需求过程,最好采用RUP,增量,迭代,螺旋,Scrum或其他类似的迭代式开发过程 (注意...

霜叶情 ⋅ 45分钟前 ⋅ 0

分布式微服务云架构开发Web应用

举一个简单的例子,在快速入门工程的基础上,举一个简单的示例来通过Thymeleaf渲染一个页面。 @Controller public class HelloController { @RequestMapping("/") pub...

明理萝 ⋅ 46分钟前 ⋅ 0

图应用之关键路径(Critical Path)

之前我们介绍过,在一个工程中我们关心两个问题: (1)工程是否顺利进行 (2)整个工程最短时间。 之前我们优先关心的是顶点(AOV),同样我们也可以优先关心边(同理有AOE)。(Activity ...

临江仙卜算子 ⋅ 47分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部