一、sql注入
产生原因:
刚刚讲过当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。
这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。
威胁:
1、猜解数据库,盗取数据库信息。
2、绕过验证,直接登录网站后台。
3、如果网站目录存在写入权限,可以写入网页木马。
4、提权
分类:
1、按注入点类型分:
数字型
这一类的 SQL 语句原型大概为 select * from 表名 where id=1
可以构造 select * from 表名 where id=1 and 1=1 一类的语句
字符型
这一类的 SQL 语句原型大概为 select * from 表名 where id=‘1’ (单引号双引号都有可能)
可以构造 select * from 表名 where id=‘1’ and 1=1 #’ 一类的语句 (#用于忽略最后的 ’ )
也有 select * from users where username=‘1’ or ‘1’=‘1’ and password=‘1’ or ‘1’=‘1’
2、按照提交数据来分类:
GET 注入
提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接http://xxx.com/news.php?id=1 , id 是注入点。
POST 注入
使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。
Cookie 注入
HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。
HTTP 头部注入
注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段。
3、按照执行效果来分类:
基于布尔的盲注
根据返回页面判断条件真假的注入。
基于时间的盲注
能根据页面返回内容判断任