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

2023-11-09 11:10

本文主要是介绍Web信息抓取方法与解析受攻击面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

前言

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

 

转载于:https://my.oschina.net/u/2391658/blog/709325

这篇关于Web信息抓取方法与解析受攻击面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/375746

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo