SQL注入基础知识总结

article/2025/10/2 12:59:40

SQL注入—基础知识总结

  • 1、注释符
            • 1.1、Mysql中注释符有三种
            • 1.2、总结
  • 2、information_schema库
            • 2.1、了解information_schema库
            • 2.2、常用注入语句
  • 3、order by
            • 3.1、了解order by
            • 3.2、order by之判断列数
  • 4、union select
            • 4.1、了解union select

1、注释符

SQL注入的时候经常会用到注释符注释掉SQL语句后边的拼接内容,在字符型参数注入中常见。

1.1、Mysql中注释符有三种

mysql三种注释符
(1) 注释符:- -
– 在mysql中使用时有时会出错。原因是 - - 后面的空格在URL中最后会被忽略,导致- -与后面的语句连接在一起,无法形成有效的mysql语句。在使用时将空格替换成 + ,即- -+
就可以了。在注入时除了- -+外,- -‘也可以完成注入语句。

(2) 注释符:#
#比较少用,很多情况使用会出错。原因是 # 不能被浏览器识别进行URL编码,数据传输过程中不会把它一起带入后端,转换成URL编码%23就可以使用了。

(url中 # 号是用来指导浏览器动作的(例如锚点),对服务器端完全无用,所以HTTP请求中不包括 #

(3) 注释符: /**/
因为注释符#、-- 都是把后面的语句全部注释掉了,而内联注释则是注释指定部分,需要一前一后闭合,所以在传参那里几乎不做注释语句用,而是用于过滤空格等bypass。

?id=-1'/**/union/**/select/**/1,2,database()--+

过滤空格,用/**/代替空格

(4) 注释符:payload结尾单引号闭合

http://localhost/sqlilabs/Less-1/?id=-1’ union select 1,2,database()’

1.2、总结

GET提交方式:

  1. –(--后面有空格)
  2. %23
  3. payload结尾单引号闭合

POST提交方式:

  1. –(--后面有空格)
  2. #(POST提交的数据,不用进行url编码,是POST原文)
  3. payload结尾单引号闭合
    总结

2、information_schema库

2.1、了解information_schema库

information_schema可以看作是数据库,保存了Mysql服务器所有数据库的信息。

information_schema库保存了Mysql服务器所有数据库的信息。如数据库名、数据库的表与访问权限等。简单点说,Mysql服务器上,到底有哪些数据库,各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么访问权限才能访问,等等信息都保存在information_schema这张表中。

mysql的information_schema数据库包含了一些表和视图,提供了访问数据库元数据的方式。

元数据,是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有时用于表述该信息的其他术语包括 “数据词典” 和 “系统目录”。

下面列举一些重要的数据字典表:

(1)SCHEMATA表:提供了关于数据库的信息,show database的结果取自这里
(2)TABLES表:提供了关于数据库中表的信息
(3)COLUMNS表:提供了表中列的信息

information_schema库信息

2.2、常用注入语句

查询所有数据库名
select group_concat(schema_name) from information_schema.schemata

查询test库中的所有表名
select group_concat(table_name) from information_schema.tables where table_schema=‘test’

查询users表中的所有列名
select group_concat(column_name) from information_schema.columns where table_name=‘users’

查询表中的内容
select group_concat(username,password) from test.users

3、order by

3.1、了解order by

order by 是mysql中对查询数据进行排序的方法,使用示例:

select * from 表名 order by 列名(或数字)asc;升序(默认)
select * from 表名 order by 列名(或数字)desc;降序

这里的重点在于order by后既可以填列名或数字。举个例子,id是user表中第一列的列名,如果根据id来进行排序,有两种写法:

select * from user order by id;
select * from user order by 1;

3.2、order by之判断列数

sql注入时,常用下面的语句来判断列数:

id=1’ order by 3- -+
id=1’ order by 4- -+
当第一条语句正常回显,第二条语句报错时,就可以判断表有三列。(当排序超出了范围就会报错)

这里的order by判断列数,实际是猜测查询出的列数,而不是表实际的列数。order by本来就是对查询的结果进行排序,针对的就是查询结果而不是原表。所以order by猜解得到的列数还跟后端的逻辑有关。

在sql注入时,将order by后面的数字增加直至报错,就可以判断列数。

4、union select

4.1、了解union select

union的作用是将两个select查询结果合并

如下图所示,union将两个select的查询结果合并在一起。
在这里插入图片描述
这里我们只想显示我们要查询的结果,即1,2,3。只有当第一个select结果是空集时,页面才会只显示第二个select查询的结果。 所以,我们这里将id置为-1,即第一个select结果为空集。页面就只会显示第二个select查询的结果。

在这里插入图片描述

MySQL中UNIOIN规则

  1. UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔
  2. UNION中的每个查询必须包含相同的列
  3. UNION会从查询结果集中自动去除了重复行
  4. 只有最后一个SELECT语句可以使用INTO OUTFILE,当然,全部UNION的结果会写到文件中去。

UNION注入的流程

  1. 首先判断是否存在注入点及注入的类型。
  2. 观察回显的位置。
  3. 使用order by查询列数。
  4. 获取数据库名。
  5. 获取数据库中的所有表名。
  6. 获取数据库的表中的所有字段名。
  7. 获取字段中的数据。

常使用下列语句来探测数据库信息:

url?id=-1 union select 1,database(),3- -+

常见查询函数

version() — 数据库版本
user() — 数据库用户
database() — 当前所在数据库
current_user() — 当前用户名
system_user() —系统用户名
session_user() — 连接到数据库的用户名
@@basedir — 数据库的安装位置
@@datadir — 数据库文件存放目录


http://chatgpt.dhexx.cn/article/KX57W0Db.shtml

相关文章

linux清理缓存cache,Linux清理cache缓存

当cache缓存占用太大,服务起不来,需要查看清理缓存 查看缓存: free -m 输入运行下面一行: echo 3 > /proc/sys/vm/drop_caches # 释放缓存区内存的方法 1)清理pagecache(页面缓存) # echo 1 > /proc/sys/vm/drop_caches 或者…

linux清空buff,linux 清理缓存buff/cache

清理缓存 echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches 清理脚本 purgeCache.sh #!/bin/bash mem_nowfree -m | awk NR2 | awk {print $4} buff_nowfree -m | awk NR2 | awk {print $6} if [ $mem_now -l…

Linux系统清理缓存方法

Linux运行主要看物理内存和交换空间SWAP(虚拟内存)的使用情况,一般物理内存小则设置虚拟内存大点,物理内存大,则设置虚拟内存小点。 在旧版系统中虚拟内存常常设置为物理内存的两倍,但是新版新硬件&#xf…

Linux缓存命令(查看、清理)

查看命令: free -m free-h 介绍: Mem:内存的使用信息 Swap:交换空间的使用信息 total ——系统总的可用物理内存大小(内存总数) used ——已被使用的物理内存大小 free ——空闲的物理内存数(…

linux 服务器缓存清理

-b,-k,-m,-g show output in bytes, KB, MB, or GB k,m,g显示输出字节,KB,MB,或GB -h human readable output (automatic unit scaling) 可读输出(自动单元缩放) -l show detailed low and h…

Linux下清理缓存

Linux下清理缓存 如果感觉手动清除缓存有点慢的话,可以写一个定时清除缓存的脚本 1、查看缓存 free -h2、清理缓存 [roothecs-360960 kafka]# sync [roothecs-360960 kafka]# echo 3 > /proc/sys/vm/drop_caches我们在清理缓存前应该先sync下 因为系统在操作…

Linux 下清理系统缓存并释放内存

当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching 因此我们很有必要手动清理系统缓存释放内存。 我们在清理缓存前应该先 sync下 因为系统在操作的过程当中,会…

API管理平台,管理企业所有API资产

RestCloud API管理平台与企业级API网关相互配合,管理企业所有API资产、API开发商、API消费者、构建企业统一的接口管理平台,完成整个API的全生命周期管理。API管理平台为每个开发商或接入者分配一个帐号,每个开发商只能查看和发布自已的API接…

API 管理用这个开源工具

一般开发工作中,涉及到前后端对接,就会有对应的 API 文档,在以前,写 API 文档,用 markdown 工具比较常见,但一旦项目大了或者涉及多方人员对接时,这些工具可能不足以满足开发人员的需求&#xf…

开源 API 管理工具v1.8.0 发布,数据上云,API 团队协作

大家好,时隔一个月,我们又又又发布啦,本月的主题是:团队协作。 在开发模式是前后端协作的团队里,分享 API 文档信息会是前后端对接过程中重要的一环,我想在这次月报分享下我们工具推荐的开发流程。 知乎上…

公司自用的国产API管理神器

1、前言 虚竹哥从事后端开发,平时写的后端接口,是以swagger生成API接口文档,提供给前端调用,与前端交互的文档;然后用Postman 自测接口,有些性能要求的接口会用JMeter 进行接口性能测试。有时开发前端时&a…

API管理神器:Apifox

前言 代码未动,文档先行 其实大家都知道 API 文档先行的重要性,但是在实践过程中往往会遇到很多困难。 程序员最讨厌的两件事:1. 写文档,2. 别人不写文档。大多数开发人员不愿意写 API 文档的原因是写文档短期收益远低于付出的…

2023年了,推荐 5 款 API 管理工具

如今,API已在软件、Web和移动应用程序开发领域无处不在,从企业内部到面向公众的应用以及与合作伙伴进行系统集成。通过使用API,开发人员可以创建满足各种客户需求的应用程序。而软件架构也在随着应用程序开发方法的改变而改变。 由于API在软件…

API管理平台的作用

随着前后分端离开发成为互联网行业开发标准,程序也开始向API发展,现如今API已经成为程序开发与维护的关键。 API作为应用程序的重要组成部分,伴随着应用程序更新迭代,API也不断的进行更新。其中API从设计开始直至弃用这一过程称之…

如何开通 API 服务并授予项目 API 服务的调用权限

涂鸦 IoT 开发平台开放多种业务 API 服务,全面覆盖全屋智能管理、行业通用设备用户管理、垂直品类开放能力、各类数据服务等业务需求。 本文将为大家介绍如何开通 API 服务并授予项目 API 服务的调用权限。 个人数据隐私声明 开发者调用的部分 云服务 API 会获取用…

团队API管理工具-YAPI

团队API管理工具-YAPI 推荐一款接口管理平台,操作简单、界面友好、功能丰富、支持markdown语法、可使用Postman导入、Swagger同步数据展示、LDAP、权限管理等功能。 YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接…

API接口管理平台解决方案

一、背景和目的 Swagger 在目前企业中作为前后端开发对接的技术已经得到了非常广泛的应用,后端开发人员只需要根据 OpenAPI 官方定义的注解就可以把接口文档非常丰富的呈现给前端接口对接人员。并且接口文档是随着代码的变动实时更新,同时提供了在线 HT…

API管理神器—Apipost

API管理神器—Apipost 1.背景 作为互联网工作者,只要是从事开发的,无论前端、后端、测试。 而一般完成整个接口的管理的解决方案如下: 使用 Swagger 管理 API 文档使用 Postman 调试 API使用 RAP等根据 Mock API 数据使用 JMeter 做 API 自…

功能强大的国产Api管理工具

前言 如果你是一名Java后端开发工程师,像Swagger、Postman、RAP这些工具,应该再熟悉不过了吧!为我们的接口开发工作带来了很多的便捷,不过因为这些都是独立的框架,之间并不存在互通性,因此在多个框架间协调…

只用 6 分钟,让你弄明白什么是 API 及 API 管理

什么是 API API(Application Programming Interface),指应用程序编程接口。 两个单独的应用程序需要中介程序才能相互通信。因此,开发人员经常需要搭建桥梁——也就是API,来允许一个系统访问另一个系统的信息或功能。A…