本文概述
- 代码注入
- SQL注入
- 命令注入
- 跨站脚本
- XPath注入
- 邮件命令注入
- CRLF注射
- 主机头注入
- LDAP注入
在Internet的早期, 最常见的攻击方法之一是基本的简单暴力破解。僵尸程序通常会执行这些攻击(或有很多时间的人), 他们尝试了无数种用户名和密码组合, 直到找到可以授予对目标应用程序访问权限的用户名和密码。
【9种流行的Web应用程序注入攻击类型】得益于密码策略, 有限的登录尝试和验证码, 暴力破解攻击不再是威胁。但是, 网络罪犯喜欢发现新的攻击并使用它们进行新型攻击。很久以前, 他们发现可以通过在应用程序或网页上输入或注入意外文本来利用应用程序或网页上的文本字段, 这些文本字段将迫使应用程序执行原本不应执行的操作。这样, 所谓的注射攻击进入了现场。
注入攻击不仅可以用于在不知道用户名和密码的情况下登录应用程序, 还可以公开私人, 机密或敏感信息, 甚至劫持整个服务器。这就是为什么这些攻击不仅威胁Web应用程序, 而且威胁数据驻留在这些应用程序上的用户, 在最坏的情况下, 还威胁到其他连接的应用程序和服务。
代码注入 代码注入是最常见的注入攻击类型之一。如果攻击者知道Web应用程序使用的编程语言, 框架, 数据库或操作系统, 则他们可以通过文本输入字段注入代码来迫使Web服务器执行他们想要的操作。
这些类型的注入攻击可能在缺乏输入数据验证的应用程序上发生。如果文本输入字段允许用户输入所需内容, 则该应用程序可能会被利用。为了防止这些攻击, 应用程序需要限制输入用户被允许进入的范围。
![9种流行的Web应用程序注入攻击类型](http://img.readke.com/220520/1154101C2-0.jpg)
文章图片
例如, 它需要限制期望的数据量, 在接受数据之前检查数据格式, 并限制允许的字符集。
仅通过测试具有不同类型内容的Web应用程序的文本输入, 即可轻松找到代码注入漏洞。一旦发现, 这些漏洞就很难被利用。但是, 当攻击者设法利用这些漏洞之一时, 其影响可能包括丧失机密性, 完整性, 可用性或应用程序功能。
SQL注入 这种攻击以类似于代码注入的方式, 在文本输入字段中插入SQL脚本(大多数数据库用于执行查询操作的语言)。脚本被发送到应用程序, 然后直接在其数据库上执行该脚本。结果, 攻击者可能会通过登录屏幕或做更多危险的事情, 例如直接从数据库中读取敏感数据, 修改或破坏数据库数据, 或对数据库执行管理操作。
![9种流行的Web应用程序注入攻击类型](http://www.srcmini.com/wp-content/uploads/2020/04/sql-injection-1.jpg)
文章图片
PHP和ASP应用程序由于其较旧的功能接口而易于受到SQL注入攻击。 J2EE和ASP.Net应用程序通常可以更好地抵御这些攻击。当发现一个SQL注入漏洞(并且很容易找到它们)时, 潜在攻击的程度将仅受攻击者的技能和想象力限制。因此, SQL注入攻击的影响无疑是很高的。
命令注入 这些攻击也是可能的, 主要是由于输入验证不足。它们与代码注入攻击的不同之处在于, 攻击者插入系统命令, 而不是插入编程代码或脚本。因此, 黑客无需了解应用程序所基于的编程语言或数据库所使用的语言。但是他们需要知道托管服务器使用的操作系统。
![9种流行的Web应用程序注入攻击类型](http://img.readke.com/220520/11541043E-2.png)
文章图片
插入的系统命令由主机操作系统使用应用程序的特权执行, 这可能允许暴露服务器上驻留的任意文件的内容, 显示服务器的目录结构, 更改用户密码等。 。
系统管理员可以通过限制服务器上运行的Web应用程序的系统访问级别来防止这些攻击。
跨站脚本 每当应用程序在其生成的输出中插入来自用户的输入而没有对其进行验证或编码时, 它都为攻击者提供了向其他最终用户发送恶意代码的机会。跨站点脚本(XSS)攻击利用这些机会将恶意脚本注入到受信任的网站中, 这些网站最终被发送给应用程序的其他用户, 成为攻击者的受害者。
受害者的浏览器将执行恶意脚本, 而不会知道该脚本不值得信任。因此, 浏览器将允许它访问会话令牌, cookie或浏览器存储的敏感信息。如果编程正确, 脚本甚至可以重写HTML文件的内容。
![9种流行的Web应用程序注入攻击类型](http://img.readke.com/220520/11541010K-3.png)
文章图片
XSS攻击通常可以分为两类:存储的和反射的。
在存储的XSS攻击中, 恶意脚本永久驻留在目标服务器上, 在消息论坛中, 在数据库中, 在访问者日志中等。当受害者的浏览器请求存储的信息时, 受害者就可以获取该脚本。在反射的XSS攻击中, 恶意脚本反映在包含发送到服务器的输入的响应中。例如, 这可能是错误消息或搜索结果。
XPath注入 当Web应用程序使用用户提供的信息来构建XML数据的XPath查询时, 这种类型的攻击是可能的。这些攻击的工作方式与SQL注入类似:攻击者将格式错误的信息发送到应用程序, 以了解XML数据的结构, 然后再次进行攻击以访问该数据。
XPath是一种标准语言, 与SQL一样, 你可以使用它指定要查找的属性。为了对XML数据执行查询, Web应用程序使用用户输入来设置数据应匹配的模式。通过发送格式错误的输入, 该模式可以转变为攻击者想要应用于数据的操作。
与SQL发生的情况不同, 在XPath中没有不同的版本。这意味着XPath注入可以在任何使用XML数据的Web应用程序上完成, 而与实现无关。这也意味着可以自动进行攻击。因此, 与SQL注入不同, 它有可能针对任意数量的目标触发。
邮件命令注入 此攻击方法可用于利用未经正确验证的用户输入来构建IMAP或SMTP语句的电子邮件服务器和应用程序。有时候, IMAP和SMTP服务器没有针对攻击的强大防护, 大多数Web服务器都会遇到这种情况, 因此可能更容易被利用。通过邮件服务器进入, 攻击者可以逃脱诸如验证码, 数量有限的请求等限制。
![9种流行的Web应用程序注入攻击类型](http://img.readke.com/220520/11541042F-4.png)
文章图片
要利用SMTP服务器, 攻击者需要一个有效的电子邮件帐户来发送带有注入命令的邮件。如果服务器容易受到攻击, 它将响应攻击者的请求, 例如, 允许他们超越服务器限制并使用其服务发送垃圾邮件。
利用邮件阅读功能, 可以主要在Webmail应用程序上完成IMAP注入。在这些情况下, 只需在Web浏览器的地址栏中输入包含注入命令的URL即可执行攻击。
CRLF注射 在Web表单输入字段中插入回车符和换行符(称为CRLF)的组合表示一种称为CRLF注入的攻击方法。在许多传统的Internet协议(例如HTTP, MIME或NNTP)中, 这些不可见的字符表示行的结尾或命令的结尾。
例如, 在HTTP请求中插入CRLF, 然后加上某些HTML代码, 可能会将自定义网页发送给网站的访问者。
可以在没有对用户输入应用适当过滤的易受攻击的Web应用程序上执行此攻击。该漏洞为其他类型的注入攻击(例如XSS和代码注入)打开了大门, 并且还可能源自被劫持的网站。
主机头注入 在承载许多网站或Web应用程序的服务器中, 必须使用主机头来确定哪些驻留的网站或Web应用程序(每个都称为虚拟主机)应处理传入的请求。标头的值告诉服务器向哪个虚拟主机调度请求。当服务器收到无效的主机头时, 通常将其传递到列表中的第一个虚拟主机。这构成了一个漏洞, 攻击者可以使用该漏洞将任意主机标头发送到服务器中的第一个虚拟主机。
主机头的操作通常与PHP应用程序有关, 尽管也可以使用其他Web开发技术来完成。主机头攻击是其他类型攻击(例如Web缓存中毒)的促成因素。其后果可能包括攻击者执行敏感操作, 例如密码重置。
LDAP注入 LDAP是一种协议, 旨在促进网络中资源(设备, 文件, 其他用户)的搜索。它对于Intranet很有用, 当用作单点登录系统的一部分时, 可以用来存储用户名和密码。 LDAP查询涉及使用影响其控制的特殊控制字符。如果攻击者可以在其中插入控制字符, 则他们可能会更改LDAP查询的预期行为。
![9种流行的Web应用程序注入攻击类型](http://img.readke.com/220520/1154102D0-5.jpg)
文章图片
同样, 导致LDAP注入攻击的根本问题是用户输入的验证不正确。如果将用户发送到应用程序的文本用作LDAP查询的一部分而不进行清理, 则该查询最终可能会检索所有用户的列表并将其显示给攻击者, 仅需在右侧使用星号(*)放在输入字符串中。
防止注入攻击
正如我们在本文中看到的, 所有注入攻击都针对对任何互联网用户开放访问的服务器和应用程序。防止这些攻击的责任分布在应用程序开发人员和服务器管理员之间。
应用程序开发人员需要了解错误地验证用户输入所涉及的风险, 并学习最佳实践以消除风险, 从而消除用户输入的风险。服务器管理员需要定期审核其系统, 以检测漏??洞并尽快进行纠正。有许多选项可以按需或自动执行这些审核。
推荐阅读
- 开发中要考虑的6种Web后端安全风险
- 11种Web应用程序防火墙进行比较以保护你的在线业务
- jvm专题 - 2/3多线程-实现
- 高级交换综合项目
- JavaScript数组常用方法解析和深层次js数组扁平化
- 文件签名 exe,dll,sys
- JavaScript的相关知识点学习与实践二
- windows的CP_ACP代码页与CP_OEMCP代码页区别
- 容器一直处于ContainerCannotRun状态