-
Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
-
由网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句。如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。
-
Sql 注入带来的威胁主要有如下几点:
(1) 猜解后台数据库,盗取网站的敏感信息
示例
1° URL中包含 id=1 (例如 www.baidu.com?id=1) 2° 此时输入 www.baidu.com?id=1' order by 1#, www.baidu.com?id=1' order by 2#都正常,www.baidu.com?id=1' order by 3#时报错,说明表中有两列 (按照Mysql语法,#后面会被注释掉,使用这种方法屏蔽掉后面的单引号,避免语法错误) 3° 使用 union 可以联合查询到关于数据库的很多信息,例如 www.baidu.com?id=1' union select database(),user(), version(), @@version_compile_os# 可以额外获得 数据库名,用户名,版本,使用操作系统 4° information_schema 是 mysql 自带的一张表,这张数据表保存了 Mysql 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为 tables 的数据表,该表包含两个字段 tablename 和 tableschema,分别记录 DBMS 中的存储的表名和表名所在的数据库。 同样可以使用 UNION 联合查询的方式获得表的信息 www.baidu.com?id=1' union select table_name,table_schema from information_schema.tables; 此时很有可能获得一个包含用户名和密码的表(例如叫users表) 5° 由经验我们可以大胆猜测users表的字段为 user 和 password ,所以输入:1' union select user,password from users#进行查询,此时就可以获得用户名和密码
(2) 绕过认证,列如绕过验证登录网站后台。
例如一个网站需要使用 用户名和密码登录,此时用户名填 123' or 1=1#, 密码填 123' or 1=1#,就有可能登录成功; 因为 后台代码可能是 select * from users where username=xxx and password=xxx; 此时变成了 select * from users where username='123' or 1=1 #' and password='123' or 1=1 #',而按照Mysql语法,#后面会被注释掉,所以一定能登录成功
(3) 注入可以借助数据库的存储过程进行提权等操作
1_SQL注入
