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

2023-09-13 20:38:55

映射应用程序体系结构

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)
  • 被动内容(例如图像和视频)
  • 外部接口
  • 社交媒体按钮
  • 广告网络
  • 支付网关

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

网络组件

反向代理

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

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

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

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

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

它们也可能通过特定 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,则可以使用内容交付网络部分中讨论的相同方法,通过直接访问后端服务器来绕过它。

更多推荐

好物周刊#7:炫酷的浏览器标签页

村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。一、项目1.Qexo一个快速、强大、漂亮的在线Hexo编辑器,支持以下功能:自定义图床上传图片在线配置编辑在线页面管理开放API自动检查更新在线一键更新快速接入友情链接简单的说说短文类似不算子的统计自动填文章模板2.Twikoo一个简洁、安全

【云原生】k8s集群调度

目录一、调度约束1.1List-Watch工作机制1.2调度过程二、指定调度节点2.1修改成nodeSelector调度方式三、亲和性(1)节点亲和性(2)Pod亲和性3.1键值运算关系四、污点(Taint)和容忍(Tolerations)4.1污点(Taint)4.2容忍(Tolerations)4.3其它注意事项五

【使用Cpolar将Tomcat网页传输到公共互联网上】

文章目录1.前言2.本地Tomcat网页搭建2.1Tomcat安装2.2配置环境变量2.3环境配置2.4Tomcat运行测试2.5Cpolar安装和注册3.本地网页发布3.1.Cpolar云端设置3.2Cpolar本地设置4.公网访问测试5.结语1.前言Tomcat作为一个轻量级的服务器,不仅名字很有趣(让人想起童年)

小程序引入vant-Weapp保姆级教程及安装过程的问题解决

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。本文同时参与「掘力星计划」,赢取创作大礼包,挑战创作激励金当你想在小程序里引入vant时,第一步:打开官方文档,第二步:切到快速上手,然后开始步骤一、步骤二、步骤三?你只会看到--------------------------以下是正文------------

Python用正则化Lasso、岭回归预测房价、随机森林交叉验证鸢尾花数据可视化2案例|数据分享...

全文链接:https://tecdat.cn/?p=33632机器学习模型的表现不佳通常是由于过度拟合或欠拟合引起的,我们将重点关注客户经常遇到的过拟合情况(点击文末“阅读原文”获取完整代码数据)。相关视频过度拟合是指学习的假设在训练数据上拟合得非常好,以至于对新数据的模型性能造成负面影响。该模型对于训练数据中没有的新

数据分析回头看2——重复值检查/元素替换/异常值筛选

0、前言:这部分内容是对Pandas的回顾,同时也是对Pandas处理异常数据的一些技巧的总结,不一定全面,只是自己在数据处理当中遇到的问题进行的总结。1、当数据中有重复行的时候需要检测重复行:方法:使用pandas中的duplicated方法,在该方法中有两个参数subset和keep,subset需要提供一个列表,

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(五)

目录前言总体设计系统整体结构图系统流程图运行环境模块实现1.数据预处理2.数据增强3.模型构建4.模型训练及保存5.模型评估6.模型测试系统测试1.训练准确率2.测试效果3.模型应用1)程序下载运行2)应用使用说明3)测试结果相关其它博客工程源代码下载其它资料下载前言本项目依赖于Keras深度学习模型,旨在对手语进行分

SpringMVC之JSR303和拦截器

目录一、JSR3031.1什么是JSR3031.2为什么要使用JSR3031.3常用注解1.4快速入门1.4.1导入依赖1.4.2配置校验规则1.4.3入门案例二、拦截器2.1什么是拦截器2.1.1定义2.1.2作用领域2.2过滤器2.2.1定义2.2.2作用领域2.3拦截器与过滤器的区别2.4应用场景2.5快速入门2

【软件测试】selenium3

自动化测试的概念自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。自动化测试就相当于将人工测试手段进行转换,让代码去执行。提高测试效率,保障软件质量。自动化测试不能完全代替手工测试。通常是代替那些操作重复性比较高。常见自动

【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法

💐🌸🌷🍀🌹🌻🌺🍁🍃🍂🌿🍄🍝🍛🍤📃个人主页:阿然成长日记👈点击可跳转📆个人专栏:🔹数据结构与算法🔹C语言进阶🚩不能则学,不知则问,耻于问人,决无长进🍭🍯🍎🍏🍊🍋🍒🍇🍉🍓🍑🍈🍌🍐🍍文章目录一、二叉数的结构体二、构建二叉树,供后续测试使用三、二叉树销毁四

【 Tkinter界面-练习05】 event和bind

一、说明事件和动作有关;所有的界面都与运动有关,本篇将对事件、事件触发、绑定回调函数等,其实是一系列部件配合的复杂的过程,这些过程牵扯到系统如何设计,线程、消息队列循环等。本篇将详细介绍各种因素的关系。二、事件循环在上一章的末尾,我们解释了如何使用进度条向用户提供有关长时间运行的反馈操作。进度条本身很简单:调用其方法,

热文推荐