一、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注入类型

bool mysql 盲注 sql盲注的原理_bool mysql 盲注

 

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

2.闭合sql语句

  一般有两种方法:

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

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

bool mysql 盲注 sql盲注的原理_数据库_02

 

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

3.探测字段列数

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

bool mysql 盲注 sql盲注的原理_web安全_03

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

bool mysql 盲注 sql盲注的原理_sql注入_04

 

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

 

bool mysql 盲注 sql盲注的原理_漏洞_05

 

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

bool mysql 盲注 sql盲注的原理_sql注入_06

 

四、sql注入防护技巧

数据与代码分离

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

对特殊字符进行转义

使用预编译语句

使用安全函数

检查数据类型