渗透测试基础 - - -SQL注入

举报
yd_217360808 发表于 2022/10/07 21:05:22 2022/10/07
【摘要】 简单介绍了SQL注入的方式方法,以及在网络安全中的用法

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 列 运算符 值

 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 请求头部的某个字段中

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。