sql注入原理,利用与防护

一、sql注入原理

注入攻击的本质就是把用户输入的数据当作代码来执行。所以注入攻击有两个必要条件

1.用户能够控制的输入。

2.原本程序要执行的代码,拼接了用户输入的数据。

二、sql注入分类

按照请求方法可以分为:GET请求、POST请求

按照参数类型可以分为:数字型、字符型

按照数据返回结果分为:回显、报错、盲注

盲注又分为:布尔盲注、延时盲注

三、sql注入测试方法

一般测试语句:

or 1=1 --+ 'or 1=1 --+ "or 1=1 --+
)or 1=1 --+ ')or 1=1 --+ ")or 1=1--+
"))or 1=1 --+    

 

ps: #  url编码后为 %23 ,可以用 --+ 替换

常用测试函数:

函数名 作用
version() 数据库版本
user() 数据库用户名
database() 数据库名
@@datadir() 数据库路径
@@version_compile_os 操作系统版本

 
 
 
 
 

测试流程:

这里是在本地搭建的一个 sqli 的靶场,用来自己做练习,感觉还不错。

文章最后附带的有链接,小伙伴们可以自行下载。

1.检测sql注入类型

 直接在url处添加 单引号 发现网站报错、说明sql语句出错,就可能存在注入

2.闭合sql语句

  一般有两种方法:

  a.使用 # 号,把本行 # 号后面的内容注释调,这样就可以避免sql语句出错,使我们构造的 payload 可以正确执行

  b.根据sql语句,用符号进行闭合

 这里就直接用 # 进行注释了,可以看到网站的页面回复了正常

3.探测字段列数

假设列数为 4 进行测试,页面出错,说明小于 4 列

然后列数为 3 进行测试,页面正常,说明存在 3 列

4.查看显示位,进行测试

 

 可以看到数据库的版本信息,说明存在sql注入漏洞

四、sql注入防护技巧

数据与代码分离

对用户输入的数据进行严格过滤

对特殊字符进行转义

使用预编译语句

使用安全函数

检查数据类型

原文地址:https://www.cnblogs.com/Excellent-person/p/11721468.html