七、解析应用程序——枚举内容与功能

文章目录

  • 1、web抓取
  • 2、发现隐藏内容
    • 2.1 蛮力技巧
    • 2.2 通过公布的内容进行推测
    • 2.3 利用公共信息
  • 3、应用程序页面和功能路径
  • 4、发现隐藏参数

  攻击应用程序的第一步是收集和分析与其有关的一些关键信息,以清楚了解攻击目标。解析过程首先是枚举应用程序的内容与功能,从而了解应用程序的实际功能与运行机制。浏览应用程序的基本方法是从主初始页面开始,然后是每一个链接和所有多阶段功能(如用户注册或密码重置)。

1、web抓取

  渗透测试步骤:

  • 配置浏览器,使用Burp或WebScarab作为本地代理服务器。
  • 以常规方式浏览整个应用程序,访问发现的每一个url,提交每一个表单并执行全部多阶段功能。尝试在JavaScript激活与禁用、cookie激活与禁用的情况下进行浏览。许多应用程序能够处理各种浏览器配置,可以获取应用程序内的不同内容和代码途径。
  • 检查由代理服务器/爬虫工具生成的站点地图,确定手动浏览时没有发现的所有应用程序内容和功能。确定爬虫如何枚举每一项内容,例如,在burp spider种,检查“链接自”(Linked From)的详细内容。通过浏览器访问这些内容,以使代理服务器/爬虫工具检查服务器响应,从而确定其他所有内容。
  • 另外,还可以要求工具以已经枚举的所有内容为基础,主动抓取站点内容。首先,请确定任何危险的或可能中断应用程序会话的URL,并配置爬虫,将它们排除在抓取范围之外。

2、发现隐藏内容

  应用程序常常包含没有直接链接或无法通过可见的主要内容访问的内容和功能。在使用后没有删除测试或调试功能就是一个常见的例子。

2.1 蛮力技巧

  假如用户指定的抓取已经确定有以下应用程序内容:
在这里插入图片描述
  可以通过自动化的方式确定隐藏内容,以定位其他内容:
在这里插入图片描述

就是自己有一个目录列表,按照列表里的URL顺序访问,看看服务器上是否存在这些目录。

  Burp Intrude可用于循环访问一组常见的目录名称并收集服务器的响应信息,可通过检查这些信息来确定有效的目录。下图表示正在配置Burp Intruder探查web根目录的常见目录:

在这里插入图片描述
  执行攻击后,单击status和length等标题栏会对其中的结果进行分类。

在这里插入图片描述

注意:不要想当然的认为:如果被请求的资源存在,应用程序将会返回200 OK 响应,否则将会返回404 Not Found响应。许多应用程序以自定义的方式处理访问不存在资源的请求,通常返回一个带200状态码的预定义错误信息。而且,一些访问现存资源的请求可能会收到非200响应。

  下面简要介绍在使用蛮力技巧查找隐藏内容时可能遇到的响应码的含义:

  • 302 Found如果重定向指向一个登陆页面,那么只要通过验证的用户才能访问该资源;如果指向一个错误信息,就可能披露其他不同的原因;如果指向另一个位置,重定向可能属于应用程序特定逻辑的一部分,应深入分析。
  • 400 Bad Request。应用程序可能对URL中的目录和文件名使用定制的命名方案,但特殊的请求并不遵循这一方案。然而,出现这种情况很可能是因为使用的词汇中包含一些空白符或其他无效的语法。
  • 401 Unauthorized 或 403 Forbidden。该响应通常表示被请求的资源存在,但不管用户的验证状态或权限等级如何,禁止任何用户访问该资源。请求目录时往往会返回此响应,可以推断所请求的目录确实存在。
  • 500 Internal Server Error。在查找内容的过程中,该响应通常表示应用程序希望在请求资源时提交某些参数

  由于各种可能的响应都可表示存在某些重要内容,因此很难编写出一段完全自动化的脚本来输出一组有效资源。最佳方法是在使用蛮力技巧时尽可能多地收集与应用程序有关的信息,并对其进行手动检查。

  渗透测试步骤

  • 手动提出一些访问有效与无效资源地请求,并确定服务器如何处理无效资源;
  • 使用用户指定地抓取生成地站点地图作为自动查找隐藏内容地基础;
  • 自动提出访问应用程序内已知的每个目录或路径中常用文件名和目录的请求。使用Burp Intruder或一段定制脚本,结合常用文件名和目录词汇表,迅速生成大量请求。如果已经确定应用程序处理访问无效资源请求的特定方式(如自定义的file not found页面),应配置Intruder或脚本突出显示这些结果,以便将其忽略;
  • 收集从服务器收到的响应,并手动检查这些响应以确定有效的资源;
  • 反复执行这个过程,直到发现新内容。

2.2 通过公布的内容进行推测

  许多应用程序对其内容与功能使用某种命名方案。通过应用程序中已经存在的资源进行推断,可以调整自动枚举操作,提高发现其他隐藏内容的可能性。

  渗透测试步骤

  • 检查用户指定的浏览与基本蛮力测试获得的结果。编译枚举出的所有子目录名称、文件词干和文件扩展名列表。
  • 检查这些列表,确定应用程序使用的所有命名方案。例如,如果有些页面的名称为AddDocument.jsp和ViewDocument.jsp,那么可能还有叫做EditDocument.jsp和RemoveDocument.jsp的页面。通常,只需要查看几个示例,就能推测出开发者的命名习惯。

根据其个人风格,开发者可能采用各种命名方法,如冗长式(AddANewUser.asp)、简洁式(AddUser.asp)、使用缩写式(AddUsr.asp)或更加模糊的命名方式(AddU.asp)。

  • 不同内容的命名方案使用数字和日期作为标识符,通过它们可轻易推测出隐藏的内容。静态内容(而非动态脚本)常常采用这种命名方式。例如,如果一家公司的Web站点含有AnnualReport2009.pdf和AnnualReport2010.pdf这两个文件的链接,应该可以立即确定接下来的报告名称。
  • 检查所有客户端代码,如HTTP和JavaScript,确定任何与隐藏服务器端内容有关的线索。这些代码包括与受保护或没有建立链接功能有关的HTML注释以及包含禁用sUBMIT元素的HTML表单等。通常,注释由生成Web内容的软件自动生成,或者由应用程序运行的平台生成。参考服务器端包含文件之类的内容也特别有用。这些文件可被公众下载,并且可能包含高度敏感的信息(如数据库连接字符串和密码)。另外,开发者的注释中可能包含各种有用的信息,如数据库名称、后端组件引用、SQL查询字符串等。厚客户端组件(如Java applet和ActiveX控件)也可能包含可供利用的敏感数据。
  • 把已经枚举出的内容添加到其他根据这些列表项推测出来的名称中,并将文件扩展名列表添加到txt、bak、src、inc和old这些常用扩展名中,它们也许能够披露现有页面备份版本的来源以及与所使用的开发语言有关的扩展名,如.Java和.cs;这些扩展名可能揭示已经被编译到现有页面的来源文件。
  • 搜索开发者工具和文件编辑器不经意建立的临时文件。例如.DS_Store文件,其中包含一个OS X目录索引,或者file.php~1,它是编辑file.php时临时创建的文件,或者大量软件工具使用的.tmp文件。
  • 进一步执行自动操作,结合目录、文件词干和文件扩展名列表请求大量潜在的资源。例如,在特定的目录中,请求每个文件词干和每个文件扩展名;或者请求每个目录名作为已知目录的子目录。
  • 如果确定应用程序使用一种统一的命名方案,考虑在此基础上执行更有针对性的蛮力测试。例如,如果已知AddDocument.jsp和ViewDocument.jsp存在,就可以建立一个操作列表(编辑、删除、新建等)并请求XxxDocument.jsp。此外,还可以建立项目类型(用户、账户、文件等)并请求AddXxx.jsp。
  • 以新枚举的内容和模式作为深人用户指定抓取操作的基础,反复执行上述每一个步骤,继续执行自动内容查找。

2.3 利用公共信息

  应用程序的一些内容与功能现在可能并没有与主要内容建立链接,但过去曾经存在链接。在这种情况下,各种历史记录中可能仍然保存隐藏内容的引用。我们可以利用两类主要的公共资源查找隐藏的内容。

  • 搜索引擎,如Google。这些搜索引擎中保存有其使用的强大爬虫所发现的所有内容的详细目录,并且将这些内容保存在缓存中,即使原始内容已被删除,缓存中的内容仍然不变。
  • Web档案,如www.archive.org上的WayBack Machine。这些档案保存大量Web站点的历史记录。许多时候允许用户浏览某个站点从几年前到现在于不同时期彻底复制的站点快照。

渗透测试步骤:

  • 使用几种不同的搜索引擎Web档案查找它们编入索引或保存的关于所攻击的应用程序的内容。
  • 查询搜索引擎时,可以使用各种高级技巧提高搜索效率。以下建议适用于Google(可以在其他引擎中选择“高级搜索”找到对应的查询)。
    • site:www.wahh-target.com。它将返回Google引用的每一个目标站点资源。
    • site:www .wahh-target.com login。它将返回所有包含login表达式的页面。在大型而复杂的应用程序中,这个技巧可用于迅速定位感兴趣的资源,如站点地图密码重设功能、管理菜单等。
    • link:www.wahh-target.com。它将返回其他Web站点和应用程序中所有包含目标站点链接的页面。其中包括过去内容的链接或仅第三方可用的功能,如合作伙伴链接。
    • related:www.wahh-target.com。它将返回与目标站点“相似”的页面,因此可能包含大量无关的资料。
  • 每次搜索时,不仅在Google的默认Web部分进行搜索,还要搜索“群组”和“新闻”部分,它们可能会提供不同的结果。
  • 浏览到某个查询搜索结果的最后一个页面,并选择**“将省略的结果纳人搜索范围后再重新搜索”**。默认情况下,Google会删除结果中它认为与其他页面非常相似的页面,过滤冗长的结果。
  • 查看感兴趣页面的缓存版本,包括任何不再在应用程序中出现的内容。某些情况下,搜索引擎缓存中可能包含如果未通过身份验证或付费就无法直接访问的资源。
  • 在属于相同组织的其他域名上执行相同的查询,这些域名中可能包含与所攻击的应用程序有关的有用信息。

  如果搜索结果发现主应用程序中不再存有链接的陈旧内容和功能,它们可能仍然有用。陈旧功能中可能包含应用程序其他地方并不存在的漏洞。
  即使陈旧内容已经从现有应用程序中删除,但是从搜索引擎缓存或Web档案中发现的相关信息仍然可能包含与应用程序现有功能有关的引用或线索,它们可能有助于攻击者向其实施攻击。

3、应用程序页面和功能路径

  在Web应用程序出现之前的万维网时代,当时的Web服务器是静态信息仓库,人们使用实际为文件名的URL获取这类信息。要公布Web内容,只需简单生成一批HTML文件并将其复制到Web服务器上的相应目录即可。当用户单击超链接时,他们浏览由公布者创建的文件,通过服务器上目录树中的文件名请求每个文件。

  虽然Web应用程序的急速演变从根本上改变了用户与Web交互的体验,但概念化和分类Web应用程序内容仍然适用于绝大多数的Web应用程序内容和功能。各种功能一般通过不同的URL访问,后者通常是执行该项功能的服务器端脚本的名称。请求参数(位于URL查询字符串或Post请求主体中)并不告知应用程序执行何种功能,而是告知应用程序在执行功能时使用哪些信息。有鉴于此,建立基于URL的解析方法可对应用程序的功能进行有效分类。

  在使用REST风格的URL的应用程序中,URL文件路径的某些部分包含实际上用做参数值的字符串。在这种情况下,通过解析URL,爬虫能够解析应用程序功能和这些功能的已知参数值列表。

  但是,在某些应用程序中,基于应用程序“页面”的动机并不适用。但是,在许多情况下,另外一种基于功能路径的动机可以更加有效地分类其内容与功能。

渗透测试步骤:

  • 确定所有通过在参数中提交某一功能的名称(如/admin.jsp?action=editUser)而非通过请求代表那个功能的一个特殊页面(如/admin/editUser.jsp)访问应用程序功能的情况。
  • 修改上述用于查找URL相关内容的自动化技巧,利用它处理应用程序使用的内容-访问机制。例如,如果应用程序使用参数指定servlet和方法名称,首先确定它在请求一个无效servlet或方法以及请求一个有效方法与其他无效参数时的行为。设法确定表示“触点”(即有效servlet和方法)的服务器响应的特点。如果可能,想出办法分两个阶段攻击这个问题,首先枚举servlet,然后枚举其中的方法。对用于查找URL相关内容的技巧使用相似的方法,列出常见项目,通过从实际观察到的名称进行推断,增加这些项目,并根据项目生成大量请求。
  • 如果可能,根据功能路径绘制一幅应用程序内容图,说明所有被枚举的功能和逻辑路径以及它们之间的依赖关系。

4、发现隐藏参数

  如果应用程序使用其他参数以别的方式控制其逻辑,那么它使用请求参数说明应执行何种功能的情况就会出现变化。例如,如果在URL的查询字符串中加入debug=true参数,应用程序的运作方式就会发生改变:它可能会关闭某些输人确认检查,允许用户避开某些访问控制或者在响应中显示详细的调试信息。许多时候,我们无法从应用程序的任何内容直接推断它如何处理这个参数(例如,它并不在超链接的URL中插人debug=false)。只有通过猜测许多值,才能在提交正确的值之后了解这个参数产生的效果。

  渗透测试步骤:

  • 使用常用调试参数名称(调试、测试、隐藏、来源等)和常用值(真、是、开通和1等)列表,向一个已知的应用程序页面和功能提出大量请求。重复执行这一操作,直到浏览完所有名/值对组合。在POST请求的URL查询字符串和消息主体中插入增加的参数。
  • 监控收到的全部响应,确定任何表明增加的参数给应用程序处理过程造成影响的异常。
  • 根据可用时间,在许多不同的页面或功能中查找隐藏的参数。选择开发人员最有可能在其中执行调试逻辑的功能,如登录、搜索、文件上传和下载等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/71189.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT学习笔记-QT安装oracle oci驱动

QT学习笔记-QT安装oracle oci驱动 0、背景1、环境以及条件说明2、编译驱动2.1 下载oracle instant client2.2 编译qt oci驱动2.2.1 修改oci.pro2.2.2 MinGW64构建套件编译2.2.3 MSVC2019_64构建套件编译 3、访问数据库运行成功 0、背景 在使用QT开发应用的过程中,往…

分布式搜索ElasticSearch-ES(一)

一、ElasticSearch介绍 ES是一款非常强大的开源搜索引擎,可以帮我们从海量的数据中快速找到我们需要的内容。 ElasticSearch结合kibana、Logstash、Beats,也就是elastic stack(ELK),被广泛运用在日志数据分析,实时监控等领域。 …

国产航顺HK32F030M: 内部参考电压

HK32F030MF4P6 用户手册 内部参考电压 adc.c #include "bsp_adc.h"/*** brief ADC GPIO 初始化* param 无* retval 无*/ static void ADCx_GPIO_Config(void) {GPIO_InitTypeDef GPIO_InitStructure;// 打开 ADC IO端口时钟ADC_GPIO_AHBxClock_FUN ( ADC_GPIO_C…

MySQL~事务的四大特性和隔离级别

事务的四大特性 1.原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个…

Linux 终端命令之文件浏览(2) more

Linux 文件浏览命令 cat, more, less, head, tail,此五个文件浏览类的命令皆为外部命令。 hannHannYang:~$ which cat /usr/bin/cat hannHannYang:~$ which more /usr/bin/more hannHannYang:~$ which less /usr/bin/less hannHannYang:~$ which head /usr/bin/he…

初学vue3时应该注意的几个问题

初学vue3时应该注意的几个问题 声明响应式 响应式数据的声明在vue2的时候很简单,在data中声明就行了。但现在可以使用多个方式。 reactive用于声明Object, Array, Map, Set; ref用于声明String, Number, Boolean 使用reactive来声明基础数据类型(Str…

SpringCloud实用篇3----Docker

1.初识Docker 1.1 什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致…

使用关键词一站式精准搜索指定期刊或会议论文集中的论文

问题描述 如题,例如,想要找点某主题的相关文献,当然要看本领域权威刊物了,假如你想从CCF人工智能类A级期刊找点文本相似度的论文,逐个点开期刊主页进行搜索,那就有点繁琐,不是一站式。 解决方…

APP外包开发的H5开发框架

跨平台移动应用开发框架允许开发者使用一套代码在多个操作系统上构建应用程序,从而节省时间和资源。以下是一些常见的跨平台移动应用开发框架以及它们的特点,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司&#xff0…

neo4j的CQL命令实例演示

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

大数据-玩转数据-Redis 安装与使用

一、说明 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址:http://download.redis.io/releases 二、下载 m…

冶金作业VR虚拟仿真厂家

对于高风险行业来说,开展安全教育培训是企业的重点工作,传统培训逐渐跟不上时代变化和工人需求,冶金安全VR模拟仿真培训系统作为一种新型的教育和培训工具,借助VR虚拟现实技术为冶金行业的工人提供一个安全、高效的培训环境。 冶金…

(文章复现)基于灰狼算法(GWO)的交直流混合微网经济调度matlab代码

参考文献: [1]高瑜,黄森,陈刘鑫等.基于改进灰狼算法的并网交流微电网经济优化调度[J].科学技术与工程, 2020,20(28):11605-11611. [2]邓长征,冯朕,邱立等.基于混沌灰狼算法的交直流混合微网经济调度[J].电测与仪表, 2020, 57(04):99-107. 这两篇文章不管是从模型、…

JUL 日志 - 最简单易用的Java日志框架

在正式的生产环境下是不能使用 System.out 进行日志记录的 因为 System.out 不能提供时间、线程、执行过程 等信息,如果要手动打印输出则会非常麻烦 而日志就帮我们把这些事给干了 接下来我们学一个最简单的日志框架 JUL JUL全称Java util Logging是java原生的日志框…

Centos7.9安装lrzsz进行文件传输---Linux工作笔记059

这里咱们lrzsz命令,需要用来进行文件传输,因为如果不安装这个命令的话,那么 传输安装包什么的就不方便因为只有少数传输工具,才支持,直接拖拽的.没有的时候就可以用这个工具,用命令来传输 直接就是: sz 文件名 就可以把文件下载下来 rz 选择一个文件, 就可以把文件上传到当…

nacos升级开启鉴权后,微服务无法连接的解决方案

版本: 软件版本号备注spring boot2.2.5.RELEASEspring-cloudHoxton.SR3spring-cloud-alibaba2.2.1.RELEASEnacos2.0.1从1.4.2版本进行升级。同时作为注册中心和配置中心 一、升级nacos版本,开启鉴权 1.在application.properties配置文件开启鉴权&…

LeetCode 34题:在排序数组中查找元素的第一个和最后一个位置

目录 题目 思路 代码 C语言 Python 题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(…

腾讯出品Pag动画框架在Android端的使用-初级

Pag动画框架作为一个第三方框架,它的优缺点与Lottie是相似,此处不过多赘述。如果你们的项目中打算用了,肯定是经过了一定的调研的。Pag动画框架分几个版本,有免费的有收费的。我们目前用的社区免费版,只用来展示Pag动画…

大数据面试题:说下Spark中的Transform和Action,为什么Spark要把操作分为Transform和Action?

面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 可回答:Spark常见的算子介绍一下 参考答案: 我们先来看下Spark算子的作用: 下图描述了Spark在运行转换中通过算…