1. 前言

每年 OWASP(开放 Web 应用程序安全项目)都会发布十大安全漏洞。它代表了对 Web 应用程序最关键的安全风险的广泛共识。了解十大WEB漏洞种类并善于在渗透测试中发现漏洞是安全行业人员的基本要求。

2. OWASP TOP 10

2.1 OWASP Top10 2022

1.失效的访问控制
2.加密机制失效
3.注入
4.不安全的设计
5.安全配置错误
6.易受攻击和过时的组件
7.识别和认证失败
8.软件和数据完整性故障
9.安全日志记录和监控失败
10.服务器端请求伪造(SSRF)

2.2 OWASP Top10简述

2.2.1 失效的访问控制

访问控制实施策略以防止用户超出其指定权限范围进行操作。由于访问漏洞,未经身份验证或不受欢迎的用户可能会访问机密数据和进程以及用户权限设置。 元数据操作,包括篡改或重放 JSON Web 令牌 (JWT) 访问控制令牌,或修改 cookie 或隐藏字段以提高权限或利用 JWT 失效,都是访问控制漏洞的一个示例。第二个例子是违反默认拒绝原则。必须仅向特定角色、能力或用户授予访问权限,但每个人都可以访问。此类错误可能使攻击者可以轻松访问他们想要的一切。 但是,可以通过应用安全编码方法并采取预防措施(例如禁用管理员帐户和限制以及安装多因素身份验证)来避免访问安全机制不足以及身份或密码管理问题。

其他预防技术包括:

-仅强制执行一次访问控制机制,并在应用程序期间重复使用它们,以减少跨域资源共享 (CORS)。
-领域模型应该施加不同的应用程序业务限制约束。
-限制对应用程序编程接口 (API) 和控制器的访问,以减轻自动攻击工具的影响。
-在访问控制中记录故障并根据需要向管理员发出警报。
-模型访问控制必须强制执行记录所有权,而不是授予用户创建、查看、修改或删除任何信息的权限。

2.2.2 机密机制失效

这里的重点在于经常暴露敏感数据的密码错误或缺少密码错误。以下是敏感信息泄露的典型例子

会话令牌
登录 ID 和密码
网上交易
个人信息(交换服务网络或SSN、健康记录等)
例如,应用程序可以使用自动数据库加密来安全地加密信用卡数据。不幸的是,当访问此信息时,它会立即未加密,从而导致 SQL 注入错误以明文形式提取信用卡信息,入侵者可能会利用这些信息。

可以使用以下预防技术来避免这些故障:

-您应该使用具有延迟因子的稳健、加盐和自适应哈希算法来存储密码,例如 scrypt、Argon2、PBKDF2 或 bcrypt
-传输敏感数据时应避免使用文件传输协议 (FTP)和简单邮件传输协议 (SMTP)等旧协议
-建议实施经过身份验证的加密,而不是仅仅使用加密
-必须生成加密随机密钥并将其存储为字节数组。如果使用密码,则必须使用基于密码的密钥创建算法将其更改为类似于密钥的东西

2.2.3注入

注入(或SQL 注入)是针对网站的数据库攻击,该网站使用结构化查询语言 (SQL) 来获取信息或执行通常需要经过身份验证的用户帐户的活动。程序很难从自己的代码中解释这些代码,从而允许攻击者进行注入攻击以访问受保护区域和伪装成受信任用户的敏感数据。注入包括SQL注入、命令注入、CRLF注入、LDAP注入等。

一些预防技术包括:

-一个更可取的替代方案是使用完全避开解释器、提供参数化 API 或易位到对象关系映射 (ORM) 工具的 API。
– 建议使用积极的服务器端验证输入。许多应用程序,包括用于移动应用程序的文本字段和 API,都需要特殊字符。
-在查询中使用 LIMIT 和其他 SQL 约束是避免 SQL 注入情况下大量数据暴露的好方法。

2.2.4 不安全的设计

这是 2021 年的一个全新类别,专注于设计和架构缺陷,需要更多地使用威胁建模、设计安全建议和参考架构。不安全的设计是一个广泛的类别,包含各种问题,例如“缺失或不充分的控制设计”。这并不意味着不安全的设计是所有其他十大风险类别的根源。

不安全的设计与不安全的实现不同。即使设计是安全的,实施缺陷也可能导致漏洞。另一方面,有缺陷的设计不能通过完美的实现来弥补,因为不存在必要的安全保护措施来防御特定的威胁。

可以通过采用以下预防技术来避免这些威胁:

-在 AppSec 专家的协助下设置和使用安全的开发生命周期,以评估和构建安全和隐私保护措施。
-建议对关键验证、访问控制、应用程序逻辑和基本流程进行威胁建模。
-在用户故事中包含安全术语和控制。
-所有层级的租户隔离设计也被视为一种实用的预防方法。

2.2.5安全配置错误

一般的安全设置问题,就像配置错误的访问控制一样,通过为攻击者提供对关键数据和站点区域的快速和轻松的访问而造成重大危险。

常见解决方案:

-系统化的强化过程允许快速轻松地部署安全环境。开发、质量控制和操作环境的配置应该是相似的,具有不同的用户权限。
-它非常适合自动化流程以建立新的安全环境,以节省必要的时间和精力。应删除或不安装未使用的功能和框架。没有不必要的功能、组件、文档或演示的主要平台会降低配置漏洞的可能性。

2.2.6 易受攻击和过时的组件

一般的安全设置问题,就像配置错误的访问控制一样,通过为攻击者提供对关键数据和站点区域的快速和轻松的访问而造成重大危险。

常见解决方案:

-系统化的强化过程允许快速轻松地部署安全环境。开发、质量控制和操作环境的配置应该是相似的,具有不同的用户权限。
-它非常适合自动化流程以建立新的安全环境,以节省必要的时间和精力。应删除或不安装未使用的功能和框架。没有不必要的功能、组件、文档或演示的主要平台会降低配置漏洞的可能性。

2.2.7 识别和认证失败

现在包含与识别问题相关的 CWE。当攻击者获取用户信息、密码恢复、ID 会话和其他登录凭据时,就会产生安全问题。顾名思义,身份和身份验证失败包括黑客利用此类漏洞利用身份验证不足。

如果应用程序允许自动攻击,例如凭证填充(当攻击者可以访问真实用户和密码列表)或预定义的、较弱的和常见的密码(例如“Password1”或“admin/admin”),这些可能是身份验证缺陷的迹象

为避免此类缺陷,必须考虑以下预防措施:

-必须在可行的情况下使用多因素身份验证,以避免自动凭证填充、暴力攻击和被盗凭证的重复使用。
-通过对照包含 10,000 个最差密码的数据库检查新密码或修改密码,可以提高密码安全性。
-对每个结果使用相同的消息有助于防止对密码恢复、注册和 API 路径的帐户枚举攻击。
不要安装任何默认凭据,尤其是对于管理用户。

2.2.8 软件和数据完整性问题

随着越来越多的敏感信息存储在数据库中,容易受到安全漏洞的影响,数据完整性问题对于软件来说变得至关重要。

这是一个新类别,它侧重于假设软件更新、重要数据和 CI/CD 程序的完整性,而无需对其进行验证。一个例子是当应用程序使用来自内容交付网络 (CDN) 或未经授权的来源的扩展、模块或存储库时。未受保护的持续集成/持续交付 ( CI/CD ) 流程可能会增加恶意代码、系统受损或未经授权访问的风险。

预防技术包括:

-人们可能会使用诸如数字签名之类的措施来确认数据或软件来自预期的来源而没有任何篡改。
-软件供应链的安全工具,如 OWASP CycloneDX 或 OWASP Dependency-Check,可用于保证组件不包含设计缺陷。
-有必要确保 CI/CD 工作流具有所需的分段、访问控制和参数化,以在整个设置和部署操作过程中保护代码完整性。
-未经签名或未加密的编译数据不应发送给不受信任的客户端,除非已进行完整性测试或数字签名以识别数据更改或重复。

2.2.9 安全日志监控和记录失败

在存在可疑行为和事件的情况下缺乏跟踪可能会扩大不受监控的时间间隔,从而使安全漏洞被忽视的时间比使用更好的日志记录的时间更长。此 OWASP Top 10 2021 部分旨在帮助识别、升级和解决最近的违规行为。如果没有记录和监控,就不可能检测到安全漏洞。

-确认所有身份验证、访问安全系统和服务器端数据验证问题都记录有足够的用户信息,以检测可疑或欺诈帐户,并存储足够长的时间以进行延迟的全面调查。
-确保以日志管理系统可使用的格式创建日志。
-创建或应用用于事件恢复和响应工作的策略,例如 NIST 800-61r2 或更高版本。
-确保对日志数据进行适当编码,以避免对监控系统的入侵或网络威胁。

2.2.10 服务端请求伪造(SSRF)

该类别的结果显示了高于平均水平的测试覆盖率、合理的低发生率以及高于平均水平的影响和利用评级。SSRF 是在服务器端查询未验证用户提供的 URL 的情况下开发的。这允许攻击者诱使应用程序将伪造请求传输到不希望的位置,即使该位置受到虚拟专用网络 (VPN)、防火墙或网络访问控制列表 (ACL) 的保护。

随着新的在线应用程序为最终用户提供方便的功能,获取 URL 已成为一种典型情况。因此,SSRF 患病率正在增加。此外,由于云服务和设计复杂性,SSRF 的强度正在增加。考虑到这一点,可以通过采用以下预防技术来避免此类攻击:

-为了限制 SSRF 的影响,应该将远程资源访问功能分离到不同的网络中。
-安装“默认拒绝”防火墙设置或网络访问控制规则,以阻止除必需的内部流量外的所有 Web 流量。
-在 (TOCTOU) 情况下,为了防止 DNS 重新映射和“检查时间、使用时间”等攻击,最好注意 URL 的准确性。

2.3 参考

Web 应用程序的十大安全漏洞_web十大漏洞_crazy_itman的博客-CSDN博客

OWASP Top 10 2022介绍_世界尽头与你的博客-CSDN博客

3. 一次WEB渗透测试的记录

近期做了一个WEB渗透测试。对测出的问题在此做个概要的记录。

1. 复制出有权限用户的某URL,发现无权限的用户登录后,修改URL为刚刚复制内容,发现竟然可以登录。(失效的访问控制)

2. 用客户A的账号登录,使用搜索日志功能,使用postman修改HTTP请求里的账号ID为客户B的账号,发现可以查看到B的日志。(失效的访问控制)

3. 可以任意伪造jwt有效负载,发现报文可以BASE64解码编码,获取”alg”所在花括号的解码,明文中”alg”的值改为“none”,重新编码为“ey****”,将jwt的报头部分(Authorization)的value替换为“ey****”,jwt的有效载荷可以任意设置。(失效的访问控制)

4. 使用一个角色id调用任何公共api。从响应头中获取角色id。使用新角色id再次调用api,将新角色id放在请求头中。结果将会改变。(失效的访问控制)

5.Public API的输入客户ID可以通过“customer – ID”头注入。输入标头在使用前未经过验证。这是一个重要的数据泄漏问题。只有在检索到客户ID时,一个租户才能调用公共api来获取其他租户的数据。(失效的访问控制)

  1. 准备两个 tenants: tenant A and tenant B.
  2. 使用 “cid”: “A的cid” 调用 API “https://……/audit/logs “
  3. 在header里添加“***-customer-id”: “B的cid”.
  4. 成功获得B的audit log 信息.

6.输入标头在使用前未经过验证。这是一个重要的数据泄漏问题。只要能检索到客户ID,一个租户就能调用公共api来获取其他租户的数据。(失效的访问控制)

  1. 在header使用正确的uic_token调用 API “http://……./notifications/counts”
  2. 从响应里获取customer id
  3. 将步骤2中获得的customer id装在header中可以调用API

7.攻击者可以通过修改角色id获得不同的角色权限。(失效的访问控制)

1.使用一个角色id的权限调用api。

2.从响应头中获取角色id。

3.使用新角色id再次调用api(从步骤2中获取),将新角色id放在请求头中。权限将改变。

8.当执行查询时没有指定ui -令牌时,请求仍然可以被查询出来。(失效的访问控制)

Uic-token用于CSRF检查,如果没有指定此token,则可能存在CSRF攻击

9.会话没有正确终止。注销后,会话仍然有效,可用于发出UI API请求。(识别和认证失败)

1.首先退出当前会话。

2.使用旧的cookie和ui令牌调用API ,请求仍然成功。

10.在调试模式下,密码显示在控制台上(识别和认证失败)

密码为敏感信息;攻击者获取此密码后可以直接登录控制台

1.以“无权限”角色登录门户。

2.打开链接https:// ……/#/admin/logs

3.打开调试模式,选择console。

4.输入一些关键字和“搜索”,它将显示密码在web控制台。

11.在没有cookie的情况下调用前端验证API,响应将提示“x-account-id”丢失。如果不需要认证,可以通过x-account-id头设置账号ID。(识别和认证失败)

12.调用前端产品连接器API,在页面中没有使用的响应中有令牌字段。凭证泄漏问题。(识别和认证失败)

13.可以删除审计日志(不安全的设计)

黑客在进行一些有风险的操作时,可能会删除审计日志(DELETE https://……)。

14.攻击者可以频繁发送测试邮件;它可能会导致DOS和垃圾邮件。(不安全的设计)

通过“Camp Admin”启动门户。进入Accounts->Notifications,选择一个项目,在1分钟内频繁点击“发送测试邮件”。

15.反射型跨站脚本(XSS)注入。(注入)

这是一个反射跨站脚本注入。XSS可以用来窃取易受攻击的域中的cookie,并可能获得对用户身份验证会话的未经授权访问,更改/破坏易受攻击的网页的内容,或者危害用户的web浏览器。如果攻击者修改请求中的时区字段,插入窃取cookie的JavaScript,如果他们设法让受害者访问他们的URL,就有可能获得控制权。

1.在控制台设置中,保存设置时。POST请求的有效负载中有一个字段的值可以用于注入

alert(\”0\”);

16.Web应用程序组件容易受到跨站点脚本(XSS)攻击。(注入)

Web应用程序组件容易受到跨站点脚本(XSS)攻击。利用这个问题,攻击者可以在应用程序输入参数中提供任意的客户端站点代码(JavaScript,VBScript等),这些代码最终将在最终用户的Web浏览器中呈现和执行。

info.html页面很容易受到基于dom的链接注入的攻击,当点击后会导致跨站攻击。XSS可以用来窃取易受攻击的域中的cookie,并在/破坏易受攻击的网页内容或破坏用户的web浏览器后,潜在地获得对用户身份验证会话的未经授权的访问。一种常见的策略是重新绘制受信任域上的易受攻击页面,以欺骗真实的会话超时和登录页面,从而获取用户密码。

1.使用“Camp Admin”角色登录门户。、

2.登出门户

3.输入url https://********/info.html#/redirect?url=javascript:alert(0),注入脚本

17.响应的详细信息可以显示应用程序的信息,这增加了发现任何现有漏洞的机会。(安全配置错误)

响应的详细信息可以显示应用程序的信息,这增加了发现任何现有漏洞的机会。

调用API 时带有错误的body,响应结果包含应用程序详细信息。

18.CSP头未添加或未配置为安全值,这会将资源加载到不受信任的站点信息,从而导致XSS和其他相关漏洞。(安全配置错误)

内容安全策略(CSP)是一个附加的安全层,有助于检测和减轻某些类型的攻击。包括(但不限于)跨站脚本(XSS)和数据注入攻击。这些攻击被用于从数据窃取到网站污损或分发恶意软件的所有事情。CSP提供了一组标准的HTTP标头,允许网站所有者声明允许浏览器在该页面上加载的内容来源——涵盖的类型包括JavaScript、CSS、HTML框架、字体、图像和可嵌入对象

19.由于Web服务器上的跨域资源共享(Cross Origin Resource Sharing, CORS)配置错误,Web浏览器可能无法加载数据。Access-Control-Allow-Origin: *对于敏感数据不安全。(安全配置错误)

web服务器上的CORS错误配置允许来自任意第三方域的跨域读取请求,在该域中使用未经身份验证的api。但是,Web浏览器实现不允许任意第三方从经过身份验证的api读取响应。这在一定程度上降低了风险。这种错误配置可能被攻击者用来访问以未经身份验证的方式可用的数据,但这些数据使用了其他形式的安全性,例如IP地址白名单。

20. 没有使用HSTS 安全策略(安全配置错误)

HTTP严格传输安全(HSTS)是一种web安全策略机制,web服务器声明遵守的用户代理(如web浏览器)只使用安全的HTTPS连接(即HTTP层在TLS/SSL上)与它交互。HSTS是IETF标准跟踪协议,在RFC 6797中指定。

缺少此标头将使web服务器处于可以用作普通HTTP流量的风险中。

21.每个人都可以把任何文件下载到服务器,它可能会替换文件并影响应用程序,其他客户可能会得到带病毒的文件运行。(安全配置错误)

1. 以“管理员”角色打开v1门户。

2.从门户找到get文件url。

3.使用PUT方法将任何文件发送到url,例如test.js。它可以用get方法获取这个文件。

22.Http可以用来进行API调用(安全配置错误)

某API可以使用Postman发出http请求

在响应头中没有“Strict-Transport-Security”头。“Strict-Transport-Security”头能限制站点只能使用HTTPS访问,并且将来使用HTTP访问它的任何尝试都应自动转换为HTTPS。

4.最后

WEB安全的主要类型每年都要较小的变化。熟练掌握最常见的WEB漏洞类型是渗透工作的展开的重要基础。