SQL注入

一、基本知识

1、什么是SQL注入
SQL注入就是指web应用程序对用户输入数据没有做合法性判断,导致前端传入的参数可控,从而被攻击者通过构造参数进行对数据库执行任意操作。

2、SQL注入的原理
前提条件:
* 参数用户可控:前端传给后端的参数内容是用户可以控制的。
* 参数带入数据库查询:传入的参数拼接到SQL语句,并带入数据库进行查询。

3、与mysql注入相关的知识点
MySQL 5.0版本之后,默认存放一个information_schema数据库,该库中必须记住的三个表名为:SCHEMATA、TABLES、COLUMNS
SCHEMATA表存储所有数据库的库名,该表中记录数据库库名的字段名为SCHEMA_NAME
TABLES表存储所有数据库的的库名和表名,该表中记录数据库库名和表名的字段名分别为TABLE_SCHEMA和TBALE_NAME
COLUMNS表存储所有数据库的库名、表名和列名,该表中记录数据库库名和表名的字段名分别为TABLE_SCHEMA、TBALE_NAME和COLUMN_NAME

4、基本知识点(必须记住的)
(1)需要记住的几个函数
database() 当前网站使用的数据库
version() 当前MySQL的版本
user() 当前MySQL的用户
(2)注释符#、-- 、或/**/
(3)内联注释内联注释的形式:/! code/。内联注释可以用于整个SQL语句中,用来执行SQL语句,比如index.php?id=-15 /!union/ /!select/1,2,3

5、SQL注入的分类
(1)、常见的sql注入按照参数类型可分为两种:数字型字符型
当发生注入点的参数为整数时,比如 ID,num,page等,这种形式的就属于数字型注入漏洞。同样,当注入点是字符串时,则称为字符型注入,字符型注入需要引号来闭合。
(2)、也可以根据从服务器接收到的响应,分为基于错误的sql注入、盲注(布尔、时间和报错)、联合查询注入、堆查询注入、宽字节注入等。
回显注入:可以直接在存在注入点的当前页面中获取返回结果。
报错注入:程序将数据库的返回错误信息直接显示在页面中,虽然没有返回数据库的查询结果,但是可以构造一些报错语句从错误信息中获取想要的结果。
盲注:程序后端屏蔽了数据库的错误信息,没有直接显示结果也没有报错信息,只能通过数据库的逻辑和延时函数来判断注入的结果。根据表现形式的不同,盲注又分为based boolean和based time两种类型。
布尔盲注: 布尔型盲注出现在进行查询时服务器不会返回具体内容,只会返回查询操作执行的结果是否成功的状态,如果查询成功,则返回true,反之返回false。
时间盲注: 根据判断返回的结果所花费的时间来判断是否存在注入,如果存在注入(即数据库查询失败),则延时一定时间页面才会返回内容,不存在注入浏览器则直接返回页面内容。
(3)、按照数据提交方式分为:用户输入的表单域注入,cookie注入,HTTP头部注入。

6、利用方式
(1)获取数据库数据,比如用户名和密码
(2)如果有写权限,可以写一句话木马getshell

7、防御方式
(1)严格检查输入变量的类型。
(2)过滤和转义特殊字符。
(3)mysql的pdo预编译机制。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值