SQL注入基础知识及绕过方式

介绍

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。(来自百度百科)

分类

按照提交方式分类

GET型注入、POST型注入、cookie注入、http头注入

按照注入类型分类

数字型注入、字符型注入、搜索型注入

按照执行效果分类

布尔盲注、时间盲注、报错注入、联合查询注入、堆叠注入、宽字节注入、base64注入

SQL注入常用函数

database():数据库名

desc():结构

@@datadir:路径

table():表名

columns():列名

limit():返回结果中的前几条数据或者中间的数据

group_concat():分组拼接函数

rand():返回0~1的随机数

floor():向下取整

substr():截取字符串

ascii():返回字符串的ascii码

寻找SQL注入

SQL注入可以出现在任何从系统或用户接收数据输入的前端应用程序中,这些应用程序之后被用于访问数据库服务器。

如果对一个网站进行SQL注入攻击,首先就需要找到存在SQL注入漏洞的地方,也就是寻找所谓的注入点。可能的SQL注入点一般存在于登陆页面、查找页面或添加页面等用户可以查找或修改数据的地方,简单来说,页面与数据库交互的地方可能会存在SQL注入。

最常用的寻找SQL注入点的方法,是在网站中寻找如下形式的页面链接

http://www.123.com/xxx.php?id=xx

其中‘xx’可能是数字,也可能是字符串,分别被称为整数型数据或者字符型数据

SQL注入流程

1、判断是否存在注入、注入类型

2、猜解字段数

3、确定显示位

4、获取库名

5、获取库中的表名

6、获取表中的字段名

7、下载数据

SQL注入绕过方式

1、绕过空格

寻找可以代替空格执行的特殊字符,比如:+,%20,/**/,%a0等

2、十六进制绕过

查询条件为用户名等于admin的信息,admin需要使用引号引起来,如果过滤到引号,where语句就会执行失败。

可以将amdin替换成十六进制来执行

3、大小写/复写

复写就是写两个,过滤掉一个后,确保还会留下来一个可以使用。

4、内联注释

把一些特有的仅在MYSQL上的语句放在 /*!...*/ 中,这样这些语句如果在其它数据库中是不会被执行,但在MYSQL中会执行。

5、过滤or  and  xor  not 绕过

and = &&

or = ||

xor = | # 异或

not = !

6、过滤等号

%like% 通配符

<> 等价于 !=

在前面在加一个!表示等于

未完待续~~~

SQL注入防御方式

预编译防止SQL注入(参数化查询)

也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的 语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,比如 select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,因为这些sql命令的执行, 必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数。所以sql语句预编译可以防御sql注入。

原文地址:https://www.cnblogs.com/wszgg/p/14144506.html