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