菜单

Web 应用程序漏洞

相关源文件

本页面概述了现代 Web 应用程序中常见的 Web 应用程序漏洞。Web 应用程序漏洞是指可能被利用来获得未经授权的访问、提取敏感数据或破坏 Web 应用程序功能的安全缺陷。有关具体的利用技术和详细的方法,请参阅本文档中链接的各个漏洞页面。

Web 应用程序漏洞简介

Web 应用程序漏洞源于 Web 应用程序的设计缺陷、实现错误或配置错误。攻击者可以利用这些漏洞来损害 Web 应用程序及其数据的机密性、完整性或可用性。

PayloadsAllTheThings 存储库包含针对各种 Web 应用程序漏洞的全面 payload、绕过技术和方法。

来源: XSS Injection/README.md1-56 XXE Injection/README.md1-40 SQL Injection/README.md1-39 Command Injection/README.md1-39

Web 应用程序漏洞类别

Web 应用程序漏洞可根据其攻击向量、影响和利用技术进行分类。

来源: XSS Injection/README.md5-45 SQL Injection/README.md7-38 Command Injection/README.md7-38 Upload Insecure Files/README.md5-38 CORS Misconfiguration/README.md5-16 API Key Leaks/README.md6-13 Client Side Path Traversal/README.md3-14

注入漏洞

注入漏洞发生在将不受信任的数据作为命令或查询的一部分发送给解释器时,从而欺骗解释器执行意外的命令或访问未经授权的数据。

SQL 注入

SQL 注入允许攻击者通过注入恶意 SQL 代码来操纵发送到数据库的 SQL 查询。

来源: SQL Injection/README.md184-302 SQL Injection/MySQL Injection.md111-131 SQL Injection/MSSQL Injection.md119-142 SQL Injection/PostgreSQL Injection.md59-101 SQL Injection/OracleSQL Injection.md67-94 SQL Injection/SQLite Injection.md38-70

命令注入

命令注入发生在应用程序将不安全的、用户提供的的数据传递给系统 shell 时。此漏洞允许攻击者在主机操作系统上执行任意命令。

如果攻击者输入例如 8.8.8.8; cat /etc/passwd,实际执行的命令将是: ping -c 4 8.8.8.8; cat /etc/passwd

来源: Command Injection/README.md46-67

XML 外部实体 (XXE) 注入

XXE 在应用程序处理包含外部实体引用的 XML 输入时发生,可能导致泄露机密数据、服务器端请求伪造或拒绝服务攻击。

来源: XXE Injection/README.md75-102

客户端漏洞

客户端漏洞会影响浏览器或客户端应用程序代码,通常会导致会话劫持、数据泄露或代表用户执行恶意操作。

跨站脚本 (XSS)

XSS 允许攻击者将恶意脚本注入到其他用户查看的网页中。这些脚本可以窃取 cookie、会话令牌或将用户重定向到恶意网站。

来源: XSS Injection/README.md43-58 XSS Injection/README.md172-217

跨域资源共享 (CORS) 配置错误

CORS 配置错误可能允许攻击者代表用户发起跨域请求,可能导致数据泄露或未经授权的操作。

来源: CORS Misconfiguration/README.md32-190

点击劫持

点击劫持是一种通过将隐藏网站的活动内容覆盖在诱饵网站上,来欺骗用户点击隐藏网站上的内容,从而可能导致未经授权的操作。

来源: Clickjacking/README.md3-39

身份验证和授权漏洞

这些漏洞涉及身份验证机制、会话管理或访问控制系统中的缺陷。

API 密钥泄露

API 密钥和令牌可能通过源代码、公共存储库或不安全的响应泄露,从而导致未经授权的 API 访问。

API 密钥泄露的常见原因包括:

  • 硬编码在源代码中
  • 提交到公共存储库
  • 包含在 Docker 镜像中
  • 在日志或调试信息中暴露
  • 存储在公共可访问的配置文件中

来源: API Key Leaks/README.md14-62

类型混淆

类型混淆漏洞发生在 PHP 等弱类型语言中,自动类型转换可能导致身份验证绕过。

来源: Type Juggling/README.md3-40

服务器端漏洞

服务器端漏洞会影响 Web 应用程序的服务器组件,可能导致服务器被破坏、数据泄露或拒绝服务。

不安全的文件上传

不安全的文件上传漏洞允许攻击者上传恶意文件,这些文件可以执行代码、执行跨站脚本或访问敏感信息。

扩展风险
.php, .php5, .phtml远程代码执行
.asp, .aspx远程代码执行
.jsp远程代码执行
.svgXXE、XSS、SSRF
.xmlXXE
.htmlXSS、开放重定向
.zip远程代码执行、DoS

来源: Upload Insecure Files/README.md29-81

Web 缓存欺骗

Web 缓存欺骗是指攻击者诱骗缓存代理存储敏感内容并将其提供给其他用户。

来源:Web Cache Deception/README.md3-35

常见的攻击模式和方法

了解常见的攻击模式有助于识别和缓解 Web 应用程序漏洞。

注入类攻击

无论注入载体如何,注入攻击都遵循通用模式

  1. 识别:通过特殊字符测试应用程序是否存在漏洞
  2. 上下文分析:理解注入点的上下文
  3. 载荷制作:根据上下文和目标制作特定载荷
  4. 利用:执行载荷并分析结果

来源:SQL Injection/README.md40-116 Command Injection/README.md68-124 XXE Injection/README.md49-70

身份验证绕过技术

身份验证绕过技术利用身份验证逻辑中的缺陷

  1. 逻辑漏洞:通过 SQL 注入、类型混淆或参数操纵来操纵身份验证逻辑
  2. 会话操纵:劫持或伪造会话令牌
  3. 默认凭据:利用默认或弱凭据
  4. 实现错误:利用身份验证实现中的错误

来源:SQL Injection/README.md126-181 Type Juggling/README.md16-42

漏洞检测与分类

可以通过多种方法检测 Web 应用程序漏洞

手动测试

手动测试涉及在寻找潜在漏洞时与应用程序进行交互

  • 输入验证测试:测试应用程序输入是否存在注入漏洞
  • 身份验证测试:测试身份验证机制是否存在绕过或弱点
  • 会话管理测试:分析会话处理是否存在漏洞
  • 访问控制测试:验证是否已实施适当的访问控制

自动化扫描

自动化工具可以帮助识别潜在的漏洞

  • 静态应用程序安全测试 (SAST):分析源代码是否存在漏洞
  • 动态应用程序安全测试 (DAST):测试运行中的应用程序是否存在漏洞
  • 交互式应用程序安全测试 (IAST):结合 SAST 和 DAST 进行更全面的测试

漏洞分类

漏洞通常根据其影响和可利用性进行分类

来源:SQL Injection/README.md40-79 XSS Injection/README.md125-161 Command Injection/README.md41-97

缓解策略

实施适当的安全控制有助于缓解 Web 应用程序漏洞

输入验证和清理

  • 白名单验证:仅允许已知的良好输入
  • 参数化查询:使用带参数化查询的预编译语句
  • 输出编码:根据上下文对输出进行编码

安全头部

实施安全标头有助于防范各种攻击

标题防护
Content-Security-PolicyXSS、点击劫持
X-Frame-Options点击劫持
X-Content-Type-OptionsMIME 嗅探
X-XSS-ProtectionXSS
Strict-Transport-Security协议降级
Access-Control-Allow-OriginCORS

来源:CORS Misconfiguration/README.md88-102 Clickjacking/README.md191-267 XSS Injection/README.md567-607

安全编码实践

  • 最小权限原则:最小化组件的访问权限
  • 纵深防御:实施多层安全措施
  • 安全依赖项:保持依赖项更新
  • 代码审查:定期审查代码中的安全问题

结论

Web 应用程序漏洞对应用程序安全构成重大风险,其中 SQL 注入和 XSS 等注入漏洞最为普遍。理解这些漏洞、它们的攻击载体以及适当的缓解措施对于保护 Web 应用程序至关重要。

有关特定漏洞的详细信息,请参阅此存储库中的各个漏洞页面。