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

news2024/11/27 17:00:33

文章目录

  • 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查询字符串和消息主体中插入增加的参数。
  • 监控收到的全部响应,确定任何表明增加的参数给应用程序处理过程造成影响的异常。
  • 根据可用时间,在许多不同的页面或功能中查找隐藏的参数。选择开发人员最有可能在其中执行调试逻辑的功能,如登录、搜索、文件上传和下载等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML详解连载(2)

HTML详解连载(2) 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽超链接作用代码示例解释经验分享 音频标签代码示例注意强调 视频标签代码示例注意强调 列表作用:布局内容排列整齐的区域。分类:无序列表&#x…

基于Googlenet深度学习网络的人员行为动作识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1. 原理 1.1 深度学习与卷积神经网络(CNN) 1.2 GoogLeNet 2. 实现过程 2.1 数据预处理 2.2 构建网络模型 2.3 数据输入与训练 2.4 模型评估与调优 3. 应用领域…

Eclipse(STS)Enum 格式化配置

需求 枚举类 的字段,一般长度较小,格式化后,多个字段会变为一行。 需求:希望每个字段独立一行。 格式化后的样式,如下图所示: 配置 1. Windows - Preferences 2. Java-Formatter 如果没有自定义的格…

C++ 循环

有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。 编程语言提供了允许更为复杂的执行路径的多种控制结构。 循环语句允许我们多次执行一个…

DVWA暴力破解高级模式宏爆破

先将安全等级调至高级,点击submit提交 浏览器开启bp代理 kali开启bp 工具,开启Proxy 点击Brute Force这个选项卡 bp拦截到请求的数据包 宏设置 如果是有的bp版本比较旧,在旧版本的上面菜单栏有一个Project options点击去选择Session&#xff…

Android系统-进程-Binder1-概述

目录 引言: 一次拷贝 Binder一次通信过程 应用启动中的binder交互 C/S模式: Binder COMMAND BWR数据结构: 引言: Android的binder是从openbinder发展过来的。包括了binder驱动,Native层,Java层。用…

【Matlab智能算法】RBF神经网络-遗传算法(RBF-GA)函数极值寻优——非线性函数求极值

上一篇博客介绍了GRNN-GA:GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值,神经网络用的是GRNN神经网络,RBF神经网络(径向基函数神经网络)和GRNN神经网络有相似之处。本篇博客将GRNN神经网络替换成RBF…

安装istio和部署实例以及仪表盘

安装Istio 接下来我们将介绍如何在 Kubernetes 集群中安装 Istio,这里我们使用的是最新的 1.10.3 版本。 下面的命令可以下载指定的 1.10.3 版本的 Istio: ➜ ~ curl -L https://istio.io/downloadIstio | ISTIO_VERSION1.10.3 sh -如果安装失败,可以…

SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系

SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 1 SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 1 SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 https://www.swrjzxw.com/1556.html SolidWorks装配体时 显示 不能使用选择如允许此选…

Linux 使用gdb调试C程序

一、gdb的一些基础命令 l:显示代码 l n:跳转到当前代码页的第n行的代码 l filename.c :n:跳转到filename.c文件的第n行代码 b 行号:加断点 info break:查看断点信息 delete 断点编号:删除断点 …

力扣 518. 零钱兑换 II

题目来源:https://leetcode.cn/problems/coin-change-ii/description/ C题解(来源代码随想录): 这是一道典型的背包问题,一看到钱币数量不限,就知道这是一个完全背包。但本题和纯完全背包不一样&#xff0c…

天津大数据培训机构哪家好?大数据必备知识

随着我国互联网IT行业的发展,我们步入了大数据时代,现在市场上急需大量的大数据专业人才,发展空间大,从业范围广,学习大数据专业对未来还是很有帮助的。今天小编来带大家了解一下大数据的知识和学习方式,作…

Pygame 入门教程

1. Pygame简介 Pygame是一个基于Python的游戏开发库,它提供了一系列的工具和接口,使开发人员能够轻松地创建各种类型的游戏,包括2D游戏和简单的3D游戏。 在开始学习Pygame之前,您需要先安装Pygame库。您可以通过以下命令在命令行…

分布式定时任务系列5:XXL-job中blockingQueue的应用

传送门 分布式定时任务系列1:XXL-job安装 分布式定时任务系列2:XXL-job使用 分布式定时任务系列3:任务执行引擎设计 分布式定时任务系列4:任务执行引擎设计续 Java并发编程实战1:java中的阻塞队列 引子 这篇文章的…

linux下查看谁在用显卡

一般查看显卡的使用情况使用的命令为 nvidia-smi但是这个只能输出显卡的占用及进程,看不到谁在用 信息如下 但是可以借助上面的PID信息,查看对应的进程是谁调用的, 命令为: ps -f -p 4417其中4417就是上图中的其中一个PID 输出…

snapshotter not loaded: overlayfs: invalid argument

测试containerd是否能创建和启动成功 执行如下命令拉取镜像并创建容器: 拉取容器 ctr i pull docker.io/library/nginx:alpine 创建容器 ctr c create --net-host docker.io/library/nginx:alpine nginx ctr task start -d nginx查看Containerd服务启动信息&…

【Freertos基础教程】任务管理之基本使用

文章目录 前言一、freertos任务管理是什么?二、任务管理涉及到的一些概念1.任务状态2.优先级3.栈(Stack)4.事件驱动5.协助式调度(Co-operative Scheduling) 二、任务的基本操作1.创建任务什么是任务 2.创建任务3.任务的删除4.任务的调度3.简单示例 总结 前言 本fre…

2023.8.12号论文阅读

文章目录 TriFormer: A Multi-modal Transformer Framework For Mild Cognitive Impairment Conversion Prediction摘要本文方法实验结果 SwIPE: Efficient and Robust Medical Image Segmentation with Implicit Patch Embeddings摘要本文方法实验结果 TriFormer: A Multi-mod…

【杨氏矩阵——(详细解法)】

杨氏矩阵💕 题目🕵️ 思路展示🤯 假设在二维数组arr中查找某个数input: 查找思路🧐 利用杨氏矩阵(矩阵的每行从左到右是递增的,矩阵从上到下是递增的)的特性,我们可以&a…

CentOS7连接网络

1.下载centos7镜像文件 2.安装centos7 3.修改网卡,ens33. 注意: 这里使用的是dhcp,设置IPADDR192.168.31.64一方面是为了后面使用crt或者MobaXterm连接,另一方面它和windows电脑的网卡要一致.这样才可以连接到网络.win r,输入cmd,打开命令窗口输入ipconfig.可以看到IPv4: 102…