几乎任何数据源都能成为注入载体,这些数据源包括环境变量、所有类型的用户和参数、外部和内部web服务等。当攻击者向解释器发送恶意数据时,注入漏洞产生。目前,注入漏洞的存在非常广泛,通常存在于SQL、LDAP、Xpath(或noSQL)查询语句、OS命令、XML解析器、SMTP报文头部、表达式语句和ORM(object relational mapping,对象关系映射)查询语句中,所以常见的注入有SQL注入、OS命令注入、ORM注入、LDAP注入、EL(expression language,表达式语言)注入、OGNL(object graphic navigation language,对象图导航语言)注入。注入攻击轻则导致数据丢失、破坏或泄露给无授权方,重则导致主机被完全接管。注入主要由以下原因产生。
(1)用户提供的数据没有经过应用程序的验证、过滤或净化。
(2)在没有上下文感知转义的情况下,动态查询语句或非参数化的调用被用于解释器。
(3)在ORM搜索参数中使用了恶意数据,这样搜索将获得包含敏感或未授权的数据。
(4)恶意数据直接被使用或连接,如SQL语句或命令在动态查询语句、命令或存储过程中包含结构和恶意数据。
在众多的注入攻击中,SQL注入是目前最常见、影响范围最广的一种攻击方式。