网站欢迎页源码极简网站设计
文章目录
- 一、什么是SQL注入漏洞?
 - 二、 SQL查询语句
 - 三、SQL注入分类
 - 数字型(整型)注入
 - 字符型注入
 - 搜索型注入
 
- 四、SQL注入漏洞形成原因
 
一、什么是SQL注入漏洞?
攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。
SQL注入原理
 服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当做SQL语句执行,从而影响数据库安全和平台安全。
SQL注入过程
 
 SQL注入带来的危害
 绕过登录验证:使用万能密码登录网站后台等
 获取敏感数据:获取网站管理员帐号、密码等
 文件系统操作:列目录,读取、写入文件等
 注册表操作:读取、写入、删除注册表等
 执行系统命令:远程执行命令
二、 SQL查询语句
mysql的information_schema数据库表结构如下(schema、schemata :提要)
 
 查数据库名
select schema_name from information_schema.schemata;
 

 查表名
select table_name from information_schema.tables where table_schema='security';
 

 查列名
select column_name from information_schema.columns where table_name= 'users' and table_schema='security';
 

 查数据
select username,password from security.users;
 

三、SQL注入分类
按照注入点类型分类
 数字型(整型)注入
 字符型注入
 搜索型注入
按照注入技术(执行效果)分类
 基于布尔的盲注
 基于时间的盲注
 基于报错的注入
 联合查询注入
 堆查询注入
数字型(整型)注入
输入的参数为整数,如ID、年龄、页码等,如果存在注入型漏洞,则为数字型(整型)注入
 http://www.testweb.com/user.php?id=8
 实际查询代码原型诸如: select ... from ... where id=$id ...
 数字型注入测试方法
 
字符型注入
输入的参数为字符串
 与数字型注入的区别在于:字符型注入一般要使用单引号来闭合
 http://www.testweb.com/test.php?user=admin
 实际查询代码原型诸如:select ... from ... where id='$id' ...
 字符型注入测试方法
 
搜索型注入
这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有“keyword=关键字”,有的不显示链接地址,而是直接通过搜索框表单提交。
此类注入点提交的 SQL 语句,其原型大致为:
select * from 表名 where 字段 like '%关键字%'
当我们提交注入参数为keyword='and[查询条件] and '%'=',则向数据库提交的SQL语句为:
select * from 表名 where 字段 like '%' and [查询条件] and '%'='%
 
基于布尔的盲注
 即可以根据返回页面判断条件真假的注入。
基于时间的盲注
 即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
基于报错的注入
 即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
联合查询注入
 可以使用union的情况下的注入。
堆查询注入
 同时执行多条语句的注入。
四、SQL注入漏洞形成原因
◼动态字符串构建引起
 不正确的处理转义字符(宽字节注入)
 不正确的处理错误(报错泄露信息)
 不正确的处理联合查询
 不正确的处理多次提交(二次注入)
 ◼ 后台存在的问题
 后台无过滤或者编码用户数据
 数据库可以拼接用户传递的恶意代码
 ◼错误处理不当
 详细的内部错误消息显示给用户或攻击者
 错误信息可以直接给攻击者提供下一步攻击帮助
 ◼不安全的数据库配置
 默认账户:
 SQL Ser ver“sa”作为数据库系统管理员账户;
 MySQL使用“root”和“anonymous”用户账户;
 Oracle则在创建数据库时通常默认会创建SYS、SYSTEMS DBSNMP和OUTLN账户。
 权限:
 问题:系统和数据库管理员在安装数据库服务器时允许以roots SYSTEM或Administrator特权系统用户账户身份执行操作。
 正确方法:应该始终以普通用户身份运行服务器上的服务,降低用户权限,将用户权限只限于本服务。
