4.1.9-映射应用程序体系结构

映射应用程序体系结构

ID
WSTG-INFO-10

总结

为了有效地测试应用程序,并能够就如何解决所识别的任何问题提供有意义的建议,了解实际测试的内容非常重要。此外,确定是否应将特定组件视为超出测试范围可能会有所帮助。

现代 Web 应用程序的复杂性差异很大,从在单个服务器上运行的简单脚本到分布在数十个不同系统、语言和组件的高度复杂的应用程序。还可能还有其他网络级组件,例如防火墙或入侵防护系统,这些组件可能会对测试产生重大影响。

测试目标

  • 了解应用程序的体系结构和正在使用的技术。

如何测试
从黑盒角度进行测试时,重要的是要尝试清楚地了解应用程序的工作原理以及哪些技术和组件已到位。在某些情况下,可以测试特定组件(如 Web 应用程序防火墙),而其他组件可以通过检查应用程序的行为来识别。

以下各节提供了常见体系结构组件的高级概述,以及如何识别它们的详细信息。

应用程序组件

网页服务器

简单的应用程序可以在单个服务器上运行,可以使用指南的部分 Web服务器指纹识别中讨论的步骤进行识别。

平台即服务 (PaaS)

在平台即服务 (PaaS) 模型中,Web 服务器和底层基础结构由服务提供商管理,客户仅对部署在其上的应用程序负责。从测试的角度来看,有两个主要区别:

  • 应用程序所有者无法访问底层基础结构,这意味着他们将无法直接修复任何问题
  • 基础结构测试可能超出任何服务的范围

在某些情况下,可以识别 PaaS 的使用情况,因为应用程序可能使用特定的域名(例如,部署在 Azure 应用服务上的应用程序将具有*.azurewebsites.net 域 - 尽管它们也可能使用自定义域)。在其他情况下,很难确定 PaaS 是否正在使用中。

Serverless无服务器

在无服务器模型中,开发人员提供的代码直接作为单个函数在托管平台上运行,而不是运行部署在 webroot 中的传统大型 Web 应用程序。这使得它非常适合基于微服务的架构。与 PaaS 环境一样,基础结构测试可能超出范围。

在某些情况下,无服务器代码的使用可能由特定 HTTP 标头的存在来指示。例如,AWS Lambda 函数通常会返回以下标头:

X-Amz-Invocation-Type
X-Amz-Log-Type
X-Amz-Client-Context

Azure Functions 不太明显。它们通常返回 Server: Kestrel 标头 - 但这本身不足以确定它是一个 Azure 应用函数,因为它可能是在 Kestrel 上运行的其他一些代码。

微服务

在基于微服务的体系结构中,应用程序 API 由多个离散服务组成,而不是作为整体应用程序运行。服务本身通常在容器内运行(通常使用 Kubernetes),并且可以使用各种不同的操作系统和语言。尽管它们通常位于单个 API 网关和域后面,但使用多种语言(通常在详细的错误消息中指示)可能表明正在使用微服务。

静态存储

许多应用程序将静态内容存储在专用存储平台上,而不是直接将其托管在主 Web 服务器上。两个最常见的平台是Amazon的S3存储桶和Azure的存储帐户,可以通过域名轻松识别:

  • BUCKET.s3.amazonaws.coms3.REGION.amazonaws.com/BUCKET 适用于亚马逊 S3 存储桶
  • ACCOUNT.blob.core.windows.net对于 Azure 存储帐户

这些存储帐户通常会公开敏感文件,如测试云存储指南部分所述。

数据库
大多数重要的 Web 应用程序使用某种数据库来存储动态内容。在某些情况下,可以确定数据库。这通常可以通过以下方式完成:

  • 端口扫描服务器并查找与特定数据库关联的任何开放端口
  • 触发与 SQL(或 NoSQL)相关的错误消息(或从搜索引擎查找现有错误)

当无法最终确定数据库时,测试人员通常可以根据应用程序的其他方面做出有根据的猜测:

  • Windows IIS和 ASP.NET 经常使用Microsoft SQL Server。
  • Embedded systems( 嵌入式系统)通常使用SQLite
  • PHP 经常使用 MySQL 或 PostgreSQL
  • APEX 经常使用 Oracle(甲骨文)

这些不是硬性规定,但如果没有更好的选择,当然可以给你一个合适的参考。

Authentication(认证)

大多数应用程序都具有用户身份验证。可以使用多个身份验证后端,例如:

  • Web 服务器配置(包括.htaccess 文件)或在脚本中硬编码密码.htaccess
    • 通常显示为 HTTP 基本身份验证,由浏览器中的弹出窗口和 WWW-Authenticate: Basic HTTP 标头指示
  • 数据库中的本地用户帐户
    • 通常集成到应用程序的表单或 API 端点中
  • 现有的中央身份验证源,例如 Active Directory 或 LDAP 服务器
    • 可以使用 NTLM 身份验证,由 WWW-Authenticate: NTLM HTTP 标头指示
    • 可以以表单形式集成到 Web 应用程序中
    • 可能需要以“域\用户名”格式输入用户名,或者可能提供可用域的下拉列表
  • 使用内部或外部提供商的单点登录 (SSO)
    • 通常使用 OAuth、OpenID Connect 或 SAML

应用程序可以为用户提供多个身份验证选项(例如注册本地帐户或使用其现有的 Facebook 帐户),并且可以对普通用户和管理员使用不同的机制。

第三方服务和 API
几乎所有 Web 应用程序都包含加载或客户端与之交互的第三方资源。这些可能包括:

  • 活动内容(如脚本、样式表、字体和 iframe)
  • 被动内容(例如图像和视频)
  • 外部接口
  • 社交媒体按钮
  • 广告网络
  • 支付网关

这些资源由用户的浏览器直接请求,使其更容易使用开发人员工具或拦截代理进行识别。虽然识别它们很重要(因为它们会影响应用程序的安全性),但请记住,它们通常超出了测试范围,因为它们属于第三方。

网络组件

反向代理

反向代理位于一个或多个后端服务器的前面,并将请求重定向到相应的目标。它们可用于实现各种功能,例如:

  • 充当负载均衡器或 Web 应用程序防火墙
  • 允许在单个 IP 地址或域(在子文件夹中)上托管多个应用程序
  • 实施 IP 过滤或其他限制
  • 从后端缓存内容以提高性能

并非总是能够检测到反向代理(特别是如果其背后只有一个应用程序),但有时您可以通过以下方式识别它:

  • 前端服务器和后端应用程序不匹配(例如具有 ASP.NET 应用程序的 Server: nginx标头)
  • 这有时会导致请求走私漏洞
  • 重复的标头(尤其是 Server 标头)
  • 托管在同一 IP 地址或域上的多个应用程序(特别是如果它们使用不同的语言)

负载均衡器

负载均衡器位于多个后端服务器的前面,并在它们之间分配请求,以便为应用程序提供更大的冗余和处理能力。

负载均衡器可能很难检测,但有时可以通过发出多个请求并检查响应的差异来识别,例如:

  • 系统时间不一致
  • 详细错误消息中的不同内部 IP 地址或主机名
  • 从服务器端请求伪造 (SSRF) 返回的不同地址

它们也可能通过特定 Cookie 的存在来指示(例如,F5 BIG-IP 负载均衡器将创建一个名为 BIGipServer.

内容分发网络 (CDN)

内容分发网络 (CDN) 是一组地理位置分散的缓存代理服务器,旨在提高站点性能。

它通常是通过将面向公众的域指向 CDN 的服务器,然后将 CDN 配置为连接到正确的后端服务器(有时称为“源”)来配置的。

检测 CDN 的最简单方法是对域解析到的 IP 地址执行 WHOIS 查找。如果它们属于CDN公司(例如Akamai,Cloudflare或Fastly - 有关更完整的列表,请参阅维基百科Wikipedia for a more complete list)),则很可能正在使用CDN。

在测试 CDN 后面的站点时,应牢记以下几点:

  • IP 地址和服务器属于 CDN 提供商,可能超出基础结构测试的范围
  • 许多 CDN 还包括机器人检测、速率限制和 Web 应用程序防火墙等功能
  • CDN 通常缓存内容。因此,在后端所做的更改可能不会立即显示在站点上。

如果站点位于 CDN 后面,则识别后端服务器可能很有用。如果未实施适当的访问控制,测试人员可能能够通过直接访问后端服务器来绕过 CDN(及其提供的任何保护)。有各种不同的方法可以允许人们识别后端系统:

  • 应用程序发送的电子邮件可能直接来自后端服务器,这可能会显示其IP地址
  • 域的 DNS 研磨、区域传输或证书透明度列表可能会在子域中显示它
  • 扫描公司已知使用的IP范围可能有助于识别后端服务器
  • 利用服务器端请求伪造 (SSRF) 可能会泄露 IP 地址
  • 来自应用程序的详细错误消息可能会暴露 IP 地址或主机名

安全组件

网络防火墙

大多数 Web 服务器将受到数据包过滤或状态检查防火墙的保护,该防火墙会阻止任何不需要的网络流量。要检测此问题,请对服务器执行端口扫描并检查结果。

如果大多数端口显示为“关闭”(即,它们返回 RST数据包以响应初始SYN数据包),则表明服务器可能不受防火墙保护。如果端口显示为“已过滤”(即,将SYN 数据包发送到未使用的端口时未收到响应),则防火墙很可能已到位。

此外,如果不适当的服务暴露在全世界(如 SMTP、IMAP、MySQL 等),这表明没有防火墙,或者防火墙配置不当。

网络入侵检测与防御系统

网络入侵检测系统 (IDS) 旨在检测可疑或恶意的网络级活动(如端口或漏洞扫描)并发出警报。入侵防御系统 (IPS) 的功能类似,但也采取措施来防止活动,通常通过阻止源 IP 地址。

通常可以通过对目标运行自动扫描工具(如端口扫描程序)并查看源 IP 是否被阻止来检测 IPS。但是,IPS 可能无法检测到许多应用程序级工具(尤其是在它不解密 TLS 的情况下)。

Web 应用程序防火墙 (WAF)

Web 应用程序防火墙 (WAF) 检查 HTTP 请求的内容,并阻止那些看似可疑或恶意的请求。它们还可用于动态应用其他控件,例如 CAPTCHA 或速率限制。它们通常利用一组已知的错误签名和正则表达式(例如 OWASP 核心规则集)来识别恶意流量。WAF 可以有效地防范某些类型的攻击(如 SQL 注入或跨站点脚本),但对其他类型的攻击(如访问控制或业务逻辑相关问题)的效果较差。

WAF 可以部署在多个位置,包括:

  • 在 Web 服务器本身上
  • 在单独的虚拟机或硬件设备上
  • 在云中,在后端服务器前面

由于WAF拦截恶意请求,因此可以通过向参数添加常见攻击字符串并观察它们是否被拦截来检测恶意请求。例如,尝试添加使用 ' UNION SELECT 1><script>alert(1)</script>等值调用 foo 的参数。如果这些请求被阻止,则可能存在 WAF。此外,块页面的内容可能会提供有关正在使用的特定技术的信息。最后,某些 WAF 可能会将 Cookie 或 HTTP 标头添加到可以显示其存在的响应中。
如果正在使用基于云的 WAF,则可以使用内容交付网络部分中讨论的相同方法,通过直接访问后端服务器来绕过它。

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

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

相关文章

记录本地Nginx发布vue项目

一、前端&#xff1a;vue-cli-service build 二、下载Nginx&#xff0c;并创建目录&#xff0c;放置静态文件 三、在conf目录下nginx.conf文件配置代理服务 server {listen 8787;server_name localhost;location / {root app/dist; #前端dist包地址index index.html…

Java下部笔记

目录 一.双列集合 1.Map 2.Map的遍历方式 3.可变参数 4.Collection中的默认方法 5.不可变集合&#xff08;map不会&#xff09; 二.Stream流 1.获取stream流 2.中间方法 3.stream流的收集操作 4.方法引用 1.引用静态方法 2.引用成员方法 3.引用构造方法 4.使用类…

Docker Volume(存储卷)

文章目录 Docker Volume(存储卷)1.什么是存储卷&#xff1f;2.为什么需要存储卷&#xff1f;3. 存储卷的分类1) 管理卷Volume方式一&#xff1a;Volume命令操作方式二&#xff1a; -v 或者--mount 指定方式三&#xff1a; Dockerfile 匿名卷小结Docker 卷生命周期Docker 卷共享…

Tomcat架构设计及组件详解

继Tomcat配置详解&#xff08;Tomcat配置server.xml详解&#xff09;Tomcat配置详解&#xff08;Tomcat配置server.xml详解&#xff09;_tomcat xml配置https://blog.csdn.net/imwucx/article/details/132166738文章之后&#xff0c;深入的学习tomcat相关知识&#xff0c;对Tom…

基于SSM+Vue的“魅力”繁峙宣传网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病...

全文链接&#xff1a;http://tecdat.cn/?p23061 这个数据集&#xff08;查看文末了解数据免费获取方式&#xff09;可以追溯到1988年&#xff0c;由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标 "字段是指病人是否有心脏病。它的数值为整数&#xff0c;0无…

无代码和低代码平台:程序员的竞争优势

无代码和低代码平台&#xff1a;程序员的竞争优势 无代码和低代码平台&#xff1a;程序员的竞争优势摘要引言1. 了解无代码和低代码平台1.1 无代码和低代码平台的定义无代码平台低代码平台 1.2 它们如何简化应用程序开发1.3 主要的无代码和低代码工具和供应商无代码平台低代码…

matlab 13折线法数据量化编码与解码

解码 matlab 13折线法数据量化编码请查看>>链接 matlab源码: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %sp=[0,16,32,64,128,256,512,1024]; %每段起始值 %spmin=[1,1,2,4,8,16,32,64]; %11110011--1248 c1=1 正…

32、歇后语大全API,免费好用

1、前言 歇后语大全查询API接口&#xff0c;这个是RollToolsApi通用系列接口的其中一个&#xff0c;内部包含了3个小接口&#xff0c;可查询歇后语信息。 查看接口完整信息&#xff1a;https://www.mxnzp.com/doc/detail?id36 RollToolsApi通用系列接口包含多很多免费通用的…

【八大经典排序算法】堆排序

【八大经典排序算法】堆排序 一、概述二、思路解读三、代码实现&#xff08;大堆为例&#xff09; 一、概述 堆排序是J.W.J. Williams于1964年提出的。他提出了一种利用堆的数据结构进行排序的算法&#xff0c;并将其称为堆排序。堆排序是基于选择排序的一种改进&#xff0c;通…

蓝牙核心规范(V5.4)10.1-BLE 入门笔记(1)

ble 规范 深入了解蓝牙LE需要熟悉相关的规格。蓝牙LE的架构、程序和协议由一项关键规范完全定义,称为蓝牙核心规范。产品如何使用蓝牙以实现互操作性由两种特殊类型称为配置文件和服务的规范集合所涵盖。图1展示了BLE规范类型及其相互关系。 1.1 蓝牙核心规范 蓝牙核心规范是…

代码随想录二刷day32

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣122. 买卖股票的最佳时机 II二、力扣55. 跳跃游戏三、力扣45. 跳跃游戏 II 前言 一、力扣122. 买卖股票的最佳时机 II class Solution {public int ma…

SpringBoot整合Easy-ES实现对ES操作

请确保已有可用的ES&#xff0c;若没有&#xff0c;请移步&#xff1a;Docker安装部署ElasticSearch&#xff08;ES&#xff09; 新建SpringBoot项目 这里是用的springboot版本是2.6.0 引入依赖 <!-- 排除springboot中内置的es依赖,以防和easy-es中的依赖冲突--><…

Redis五大基本数据类型

1、字符串类型 字符串类型相当于 java 中的 String 类型。Redis 中的 String 类型以二进制方式存储&#xff0c;不会做任何的编码转换&#xff0c;因此不仅仅可以存储文本数据、整数、普通的字符串、JSON、xml文件&#xff0c;还可以存储图片、视频、音频。String 存储的种类虽…

插槽指的是什么?插槽的基础用法体验

什么是插槽 插槽(Slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时&#xff0c;把不确定的、希望由用户指定的部分定义为插槽。 <template><p>这是MyCom1组件的第1个p标签</p><&#xff01;--通过slot标签&#xff0c;为用户预留内容占位符…

ubuntu文件上有锁

1 文件上有锁&#xff0c;如何解锁&#xff1f; sudo chmod 777 filenamefilename要替换成你要解锁的文件名称 2 文件夹上有锁&#xff0c;如何解锁&#xff1f; sudo chown -R username filenameusername就是你Ubuntu系统安装的时候取得名字&#xff0c;filename就是被锁文…

Vue3 Ajax(axios)异步

文章目录 Vue3 Ajax(axios)异步1. 基础1.1 安装Ajax1.2 使用方法1.3 浏览器支持情况 2. GET方法2.1 参数传递2.2 实例 3. POST方法4. 执行多个并发请求5. axios API5.1 传递配置创建请求5.2 请求方法的别名5.3 并发5.4 创建实例5.5 实例方法5.6 请求配置项5.7 响应结构5.8 配置…

mysql设置max_sp_recursion_depth,sql_mode

mysql 中设置 @@max_sp_recursion_depth select @@max_sp_recursion_depth; 今天在mysql 写存储过程递归调用时,发现老是报错(recovery limit 0(as set by the max_sp_recursion_depth));后来百度下发现 max_sp_recursion_depth设置不对; 这个修改涉及到全局和session级修…

Python常用做题笔记

1 列表/队列/堆栈构建 列表&#xff1a; []声明列表比list()方法效率高 声明队列和堆栈&#xff1a;法1: 使用[]/list()方法模拟法2: 使用collections.deque双端队列&#xff1a; 模拟队列 append\popleft 模拟堆栈 append\pop collections.deque(): 声明双端队列&#xff0c;…

2024字节跳动校招面试真题汇总及其解答(四)

12.Java的类加载机制 Java的类加载机制是指将描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 类的加载过程分为以下五个阶段: 加载:将Class文件从磁盘读入内存,并…