SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.
原理
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当
SQL注入技术
- 强制产生错误
- 采用非主流通道技术
- 使用特殊的字符
- 使用条件语句
- 利用存储过程
- 避开输入过滤技术
- 推断技术
SQL注入漏洞例子:
某个网站的登录验证的SQL查询代码为:
1strSQL = “SELECT * FROM users WHERE (name = '” + userName + “’) and (pw = '”+ passWord +"’);"
恶意填入
1userName = “1’ OR ‘1’='1”;
与
1passWord = “1’ OR ‘1’='1”;
时,将导致原本的SQL字符串被填为
1strSQL = “SELECT * FROM users WHERE (name = ‘1’ OR ‘1’=‘1’) and (pw = ‘1’ OR ‘1’=‘1’);”
也就是实际上运行的SQL命令会变成下面这样的
1strSQL = “SELECT * FROM users;”
因此达到无账号密码,亦可登录网站。所以SQL注入攻击被俗称为黑客的填空游戏。
SQL攻击步骤
- SQL注入漏洞的判断
- 分析数据库服务器类型
- 可执行情况
- 发现WEB虚拟目录
- 上传ASP木马
- 得到系统的管理员权限