WEB攻击-SQL注入
【数据库概述】
原子性:事物是一个不可分割的单位,事物中的操作也么发生,要么都不发生
一致性:事物前后数据的完整性必须保持一致
隔离性:多个用户并发访问数据库时,数据库为每一个用户开启的事物,不能被其他事物的操作数据所干扰,多个并发事物之间要互相隔离
持久性:一个事物一旦被提交,它对于数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其他有任何影响
【SQL注入原理】
服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当做SQL语句执行,从而影响数据库安全和平台安全
【SQL注入的2个条件】
1、用户能够控制输入
2、用户要执行的SQL语句,拼接了用户输入的恶意数据
【SQL注入过程】
【SQL注入危害】
绕过登录验证:使用万能密码登录到网站后台等
获取敏感信息:获取网站管理员账号、密码等
文件系统操作:列目录,读取,写入文件等
注册表操作:读取、写入、删除注册表等
执行系统命令:远程执行命令
【SQL注入示例】
1、通过在用户名传入参数' or 1=1 -- 进行万能密码登录
select name,pwd form user where name='aa' or 1=1 -- 'And pwd='anything'
经典: and 1=1 | and 2>1 | or 1=1 | or 1<1
单引号或者双引号
SQL注入:通过把SQL命令插入到WEB表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
SQL注入类型:
按照注入点分类:
(1)数字型(整形)注入:许多网页链接有类似的结构 http://xxx.com/users.php?id=1 基于此种形式的注入,注入点id为数字,一般被叫做数字型注入点,通过这种形式查询出后台数据库信息返回前台展示,可以构造类似以下的sql语句进行爆破:select *** from 表名 where id=1 and 1=1 (实际查询代码比如 select ... from ... where id = $id.....)
(2)字符型注入:网页链接有类似的结构 http://xxx.com/users.php?name=admin 这种形式,注入点name为字符串,被称为字符型注入,可以用:select *** from 表名 where name='admin' and
(3)搜索型注入:主要是指在数据搜索时没有过滤搜索参数,一般在链接地址中有 "keyword=“关键字”",注入点提交的是sql语句,select * from 表名 where 字段 like '%关键字%' and '%1%'='%1%'
按照执行效果(注入技术)来分类:
(1)基于布尔的盲注:根据页面返回判断条件真假注入
(2)基于时间的盲注:即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断
(3)基于报错的注入:即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
- 单引号
- 双引号
- 基于数字型注入
(4)联合查询注入:可以使用union情况下注入
(5) 堆查询注入