Web 应用程序的问题在于它们公开地暴露给数十亿互联网用户,其中许多人会出于任何原因想要破坏其安全措施。
在 Internet 的早期,最常见的攻击方法之一是基本的、简单的暴力破解。 机器人通常会执行这些攻击——或者有很多休息时间的人——他们会尝试无数种用户名和密码组合,直到找到一个可以授予对目标应用程序的访问权限的组合。
由于密码策略、有限的登录尝试和验证码,暴力攻击不再是威胁。 但是网络罪犯喜欢发现新的漏洞并利用它们来执行新型攻击。 很久以前,他们发现应用程序或网页上的文本字段可能会被利用,方法是在其中输入或注入意想不到的文本,迫使应用程序做一些它不应该做的事情。 这样,所谓的注入攻击就出现了。
注入攻击不仅可以用于在不知道用户名和密码的情况下登录应用程序,还可以用于暴露私人、机密或敏感信息,甚至可以劫持整个服务器。 这就是为什么这些攻击不仅威胁到 Web 应用程序,而且威胁到数据驻留在这些应用程序上的用户,在最坏的情况下,还会威胁到其他连接的应用程序和服务。
目录
代码注入
代码注入是最常见的注入攻击类型之一。 如果攻击者知道 Web 应用程序使用的编程语言、框架、数据库或操作系统,他们可以通过文本输入字段注入代码,以强制 Web 服务器执行他们想要的操作。
这些类型的注入攻击可能发生在缺乏输入数据验证的应用程序上。 如果文本输入字段允许用户输入他们想要的任何内容,则该应用程序可能会被利用。 为了防止这些攻击,应用程序需要尽可能地限制允许输入的输入用户。
例如,它需要限制预期的数据量,在接受之前检查数据格式,限制允许的字符集。
代码注入漏洞很容易发现,只需测试具有不同类型内容的 Web 应用程序的文本输入即可。 发现后,漏洞的利用难度适中。 但是,当攻击者设法利用这些漏洞之一时,其影响可能包括丧失机密性、完整性、可用性或应用程序功能。
SQL注入
以与代码注入类似的方式,这种攻击会在文本输入字段中插入一个 SQL 脚本——大多数数据库用来执行查询操作的语言。 脚本被发送到应用程序,应用程序直接在其数据库上执行它。 因此,攻击者可以通过登录屏幕或做更危险的事情,如直接从数据库中读取敏感数据、修改或破坏数据库数据,或对数据库执行管理操作。
PHP 和 ASP 应用程序由于其较旧的功能接口而容易受到 SQL 注入攻击。 J2EE 和 ASP.Net 应用程序通常更能抵御这些攻击。 当发现 SQL 注入漏洞时——而且它们很容易被发现——潜在攻击的规模将仅受攻击者的技能和想象力的限制。 因此,SQL注入攻击的影响无疑是很大的。
命令注入
这些攻击也是可能的,主要是由于输入验证不足。 它们与代码注入攻击的不同之处在于,攻击者插入系统命令而不是编程代码或脚本。 因此,黑客不需要知道应用程序所基于的编程语言或数据库使用的语言。 但是他们需要知道托管服务器使用的操作系统。
插入的系统命令由具有应用程序权限的主机操作系统执行,这可以允许公开驻留在服务器上的任意文件的内容,用于显示服务器的目录结构,用于更改用户密码等.
系统管理员可以通过限制服务器上运行的 Web 应用程序的系统访问级别来防止这些攻击。
跨站脚本
每当应用程序在其生成的输出中插入来自用户的输入,而没有对其进行验证或编码时,它就会给攻击者提供机会,将恶意代码发送给不同的最终用户。 跨站点脚本 (XSS) 攻击利用这些机会将恶意脚本注入受信任的网站,最终发送给应用程序的其他用户,这些用户成为攻击者的受害者。
受害者的浏览器将在不知道不应信任的情况下执行恶意脚本。 因此,浏览器会让它访问浏览器存储的会话令牌、cookie 或敏感信息。 如果编程得当,脚本甚至可以重写 HTML 文件的内容。
XSS 攻击通常可以分为两种不同的类别:存储型和反射型。
在存储型 XSS 攻击中,恶意脚本永久驻留在目标服务器、消息论坛、数据库、访问者日志等位置。当受害者的浏览器请求存储的信息时,受害者就会得到它。 在反射型 XSS 攻击中,恶意脚本反映在包含发送到服务器的输入的响应中。 例如,这可能是错误消息或搜索结果。
XPath注入
当 Web 应用程序使用用户提供的信息为 XML 数据构建 XPath 查询时,可能会发生这种类型的攻击。 这些攻击的工作方式类似于 SQL 注入:攻击者将格式错误的信息发送到应用程序以查明 XML 数据的结构,然后他们再次攻击以访问该数据。
XPath 是一种标准语言,与 SQL 一样,您可以使用它指定要查找的属性。 要对 XML 数据执行查询,Web 应用程序使用用户输入来设置数据应匹配的模式。 通过发送格式错误的输入,该模式可以变成攻击者想要应用于数据的操作。
与 SQL 不同,在 XPath 中,没有不同的版本。 这意味着 XPath 注入可以在任何使用 XML 数据的 Web 应用程序上完成,而不管其实现如何。 这也意味着攻击可以自动化; 因此,与 SQL 注入不同,它有可能针对任意数量的目标被触发。
邮件命令注入
这种攻击方法可用于利用电子邮件服务器和应用程序构建带有未正确验证的用户输入的 IMAP 或 SMTP 语句。 有时,IMAP 和 SMTP 服务器没有针对攻击的强大保护,大多数 Web 服务器都是这种情况,因此可能更容易被利用。 通过邮件服务器进入,攻击者可以规避验证码、请求数量限制等限制。
要利用 SMTP 服务器,攻击者需要一个有效的电子邮件帐户来发送带有注入命令的消息。 如果服务器易受攻击,它将响应攻击者的请求,例如允许他们越过服务器限制并使用其服务发送垃圾邮件。
IMAP 注入可以主要在 webmail 应用程序上完成,利用邮件阅读功能。 在这些情况下,只需在网络浏览器的地址栏中输入带有注入命令的 URL 即可执行攻击。
CRLF注入
在 Web 表单输入字段中插入回车符和换行符(称为 CRLF 的组合)代表一种称为 CRLF 注入的攻击方法。 这些不可见字符表示许多传统 Internet 协议(例如 HTTP、MIME 或 NNTP)中的一行结束或命令结束。
例如,将 CRLF 插入到 HTTP 请求中,然后是一些特定的 HTML 代码,可以将自定义网页发送给网站的访问者。
这种攻击可以在易受攻击的 Web 应用程序上执行,这些应用程序没有对用户输入应用适当的过滤。 此漏洞为其他类型的注入攻击打开了大门,例如 XSS 和代码注入,也可能源自被劫持的网站。
主机头注入
在托管许多网站或 Web 应用程序的服务器中,主机标头变得必不可少,以确定哪些常驻网站或 Web 应用程序(每个网站或 Web 应用程序都称为虚拟主机)应该处理传入请求。 标头的值告诉服务器将请求分派到哪个虚拟主机。 当服务器收到一个无效的主机头时,它通常将它传递给列表中的第一个虚拟主机。 这构成了一个漏洞,攻击者可以利用该漏洞将任意主机标头发送到服务器中的第一个虚拟主机。
主机标头的操作通常与 PHP 应用程序相关,尽管它也可以通过其他 Web 开发技术完成。 主机标头攻击可作为其他类型攻击的促成因素,例如网络缓存中毒。 其后果可能包括攻击者执行敏感操作,例如密码重置。
LDAP注入
LDAP 是一种旨在促进网络中资源(设备、文件、其他用户)搜索的协议。 它对内部网非常有用,当用作单点登录系统的一部分时,它可用于存储用户名和密码。 LDAP 查询涉及使用影响其控制的特殊控制字符。 如果攻击者可以在其中插入控制字符,则他们可能会更改 LDAP 查询的预期行为。
同样,允许 LDAP 注入攻击的根本问题是未正确验证用户输入。 如果用户发送给应用程序的文本被用作 LDAP 查询的一部分而没有对其进行清理,则查询最终可能会检索所有用户的列表并将其显示给攻击者,只需使用星号即可
在输入字符串中的正确位置。
防止注入攻击
正如我们在本文中看到的,所有注入攻击都针对对任何互联网用户开放访问的服务器和应用程序。 防止这些攻击的责任分布在应用程序开发人员和服务器管理员之间。
应用程序开发人员需要了解不正确验证用户输入所涉及的风险,并学习最佳实践以出于风险预防目的对用户输入进行清理。 服务器管理员需要定期审核他们的系统以检测漏洞并尽快纠正它们。 有许多选项可以按需或自动执行这些审计。