zl程序教程

您现在的位置是:首页 >  后端

当前栏目

WEB安全基础 - - -SQL注入

2023-06-13 09:13:10 时间

目录

SQL简介

Mysql数据库结构

SQL语句  

SELECT 语句

insert into 语句

delete语句

 Update 语句

Order by 语句 

Where 语句

 MySQL注释符

SQL注入简介 

sql注入原理

sql注入危害

SQL注入判断

 SQL注入的分类

1. 按参数类型分类:

2. 按数据库返回结果分类:

3. 按注入点位置分类:

SQL简介

SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。

常见的数据库可有Oracle,MySQL,Access,DB2,PostgreSQL等,不同的数据库也使用不同的sql语句。

Mysql数据库结构

MySQL 由连接池、SQL 接口、解析器、优化器、缓存、存储引擎等组成,可以分为三层,即 MySQL Server 层、存储引擎层和文件系统层。MySQL Server 层又包括连接层和 SQL 层。

SQL语句

SELECT 语句

用于从表中选取数据。结果被存储在一个结果表中(称为结果集)

SELECT 列名 FROM 表名

insert into 语句

用于向表格中插入新的行。

insert  into table_name (列 1, 列 2,.....) values( 值 1, 值 2,......)

delete语句

用于删除表中的行。

delete * from 表名称

Update 语句

用于修改表中的数据。

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

Order by 语句

ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录进行排序。如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。。

order by 排序列数大于当前查询的列数时就会报错;

Where 语句

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

更多其他基础命令可以看

http://t.csdn.cn/1aRqS

MySQL注释符

1. 注释符可以替换空格

2. 内联注入

/*!/*!*/ /* */ 在 mysql 中是多行注释 但是如果里面加了 ! 那么后面的内容会被执行

3. 单行注释符后面加换行也是可以执行的

/**/ # --

SQL注入简介

sql注入原理

Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。

sql注入危害

数据库信息泄露:数据中存放的用户的隐私信息的泄露; 网页篡改:通过操作数据库对特定网页进行篡改; 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账户被篡改; 服务器被远程控制:被安装后门; 删除和修改数据库表信息。

SQL注入判断

根据客户端返回的结果来判断提交的测试语句是否成功被数据库引擎执行,如果测试

语句被执行了,说明存在注入漏洞。

SQL注入的分类

1. 按参数类型分类:

数字型

        SQL="selec name from users where id=1"

and逻辑测试: and 1=1 sql 语句: select name from users where id=1 and 1=1 and 1=2 sql 语句: select name from users where id=1 and 1=2 通过比较页面的变化判断输入是否被带入数据库执行

单引号测试: ' sql 语句: select name from users where id=1' 构造 sql 语法错误,来判断输入是否被执行。

字符型

SQL="select name from users where id='1' "

判断方法:id=1',id=1"构造语法错误看是否被执行 

搜索型

SQL="select*from users where from name like '%tom' "

1 and 1=1 SQL 查询语句为: select * from users where id like '%1 and 1=1%' 这个输入显然会报错误。 1%'1 and '%1%'' = '%1 SQL 查询语句: select * from users where name like '%tom%' and '%1%' = '%1%' 这里我们用 '% 来闭合 %' ,如果存在漏洞,返回正常信息。

2. 按数据库返回结果分类:

回显注入

在注入点的当前页面中获取返回结果。

代码原理:利用逻辑运算符 or 的运算原理,只要其中一个条件满足为真,则为真, 而 1=1 恒等式恒为真,因此如果上面三个代码输入之后页面显示结果都为正常,则我 们可以判断此页面存在 SQL 注入漏洞

报错注入

SQLServer 中通常错误的查询会返回一些错误信息,在 mysql 中正常情况下是没 有错误信息返回的,但可以通过其他的方式进行错误信息的提取

盲注

基于布尔的盲注   Based boolean

一是无报错信息返回; 二是无论输入是正确还是错误,都只会显示两种情况( 1 或 0 ) (ture 或 false) ; 三是在输入正确时,可通过输入 and 1=1 、 and 1=2 判断。

基于时间的盲注   Based time

基于 Boolean 的盲注可以在页面上看到正确或错误的回显,但是基于 time 的盲注是看不到的。 判断:通过 " 时间 " 条件进行特定的输入,判断后台执行 SQL 语句的时间来判断是否存 在盲注

3. 按注入点位置分类:

GET注入

      注入点的位置在 GET 参数部分

POST注入

      注入点位置在 POST 数据部分

Cookie注入

      注入点存在 Cookie 当中的某个字段

Header注入

注入点在 HTTP 请求头部的某个字段中