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