Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于 MySQL 数据库空字符及弱类型的探讨

关于 MySQL 数据库空字符及弱类型的探讨

作者头像
Ms08067安全实验室
发布于 2020-09-14 08:18:23
发布于 2020-09-14 08:18:23
1.2K0
举报

本文作者:某小六(Ms08067实验室 SRSP TEAM小组成员)

故事的开始,是这样的:

美好的故事总是发生在夜深人静(想要睡觉)的时候:

一句万能密码惹的祸,我的直觉告诉我,其实它应该等价于:

Select * from users where username=0;

但是仔细一想,感觉事情又没有那么简单:

于是我就找到了我的老大哥,探讨一下:

那么从数据库原理上,到底该怎么解释呢???

于是我让他先自己想一下,准备深入了解一下数据库原理:

事情往往在辩论的时候变得有趣:

可能我的表述不是很准确,但是他确实没有进行比较,那么随着测试的深入,问题愈发有趣:

你会发现,‘’+0+‘’也是可以的

你还能发现,’’*0*’’也是可以的

那么,‘’^0^‘’也是可以的

四则运算和幂运算都可以,而且输出结果一致!?!?

伟大的哲学家总是可以发现问题,这个时候强哥顺利抛出一波重磅炸弹

问题愈发扑朔迷离,有点悬疑案环环相扣的意思!

这个时候,好像‘’和 null 的问题来了

MySQL 数据库中,‘’是空字符,null 是空两个是不同的内容问题的神奇之处,往往在于:

是不是看到这里,一脸懵逼那么这个时候,我们会想到 MySQL 的弱类型

弱类型的话,会自己进行转换,那么这个时候 1337 和‘1337’就没有区别

那么为了进一步验证我们的想法,我们设置了一些其他的的查询语法

从上面的输出结果来看,在进行字符运算时,那么所有的字符 MySQL 都处

理为 0;当字符前有数字时,那么取该数字作为此字符串的值。

到这里,问题基本解决,于是我们测试

那么这里可以看出,‘’字符在进行运算处理时,也被当作零来处理

这个时候我们查询到下面这句话

既然已经玩到了这种地步,不如就继续嗨皮,给自己制造点麻烦。自己才会

去想着解决问题呀。。。。。。

于是乎一波查询,最后得到以下结论:

谈谈 MySQL 的黑暗语法

所以这个世界上不光有太阳,也有暗夜(心里无数草泥马奔腾)

最后总结一下:

1、 MySQL 数据库里面的数据是弱类型,弱类型在四则运算时字符型会被当做 0来处理。

2、 MySQL 中的‘’和 NULL 是两种不同的值。

3、 ‘’(空字符)在遇到运算符时也会被当做 0 来处理。

4、 MySQL 中的暗黑语法一定要去了解,说不定就是一个万能密码。例如这次的Poc 就是利用 MySQL 的弱类型,从而使得查询条件最终变成 username=0

在查询时,(va)char 类型的都会被处理为首字母为 0,从而输出查询结果。

此刻,我脑海里面就是哥德巴赫猜想和华罗庚爷爷的几麻袋草纸。。。。。。

参考链接:

https://www.cnblogs.com/shamohai/p/8290487.html

https://blog.csdn.net/weixin_34151004/article/details/94724768

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【MySQL】数据库的数据类型
mysql 中表的建立属性列:列名称 数据类型,例如 num int,它与我们平时写的语言数据类型是倒过来的!
YoungMLet
2024/03/01
3010
【MySQL】数据库的数据类型
MySQL数据库应用总结(八)—MySQL数据库的数据类型和运算符(下)
SQL语法预览: 创建表字段数据类型:【createtable 表名(字段名称 数据类型); 】 插入字段值:【insert into表名 values(值1,值2,...,值n);】 查看格式化值:【select* 或 【格式1,格式2,...,格式n】from 表名;】 详解: 接上期... 二、选择数据类型的方法 MySQL提供大量的数据类型,为了优化存储,提高数据库性能,在任何情况下都应使用最精确的类型。即选择占用存储空间最少的类型。 1.整数和浮点数 有小数用浮点数,没有就用整数。但注意浮点数存储
企鹅号小编
2018/01/12
1.9K0
MySQL数据库应用总结(八)—MySQL数据库的数据类型和运算符(下)
这款国产数据库语言最近杀疯了!
数据库这个软件,名字中有个“库”字,会让人觉得它主要是为了存储的。其实不然,数据库实现的重要功能有两条:计算、事务!也就是我们常说的 OLAP 和 OLTP,数据库的存储都是为这两件事服务的,单纯的存储并不是数据库的目标。
纯洁的微笑
2023/11/06
2160
这款国产数据库语言最近杀疯了!
【MySQL数据库】字符集与校对集
字符指计算机中保存的各种文字和符号,包括各种国家的文字、标点符号、图形符号、数字等。由于计算机采用二进制保存数据,用户输入的字符将会按照一定的规则转换成二进制后保存,这个过程就是字符编码,将一系列字符的编码规则组合起来就形成了字符集。
颜颜yan_
2022/12/07
4.8K1
【MySQL数据库】字符集与校对集
Ktorm - 让你的数据库操作更具 Kotlin 风味
在开始之前,我们先回顾一下上篇文章中的员工-部门表的例子,这次我们的示例也是基于这两个表。下面是使用 Ktorm 定义的这两个表的结构:
bennyhuo
2020/02/20
1.7K0
数据库的查询操作
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null 表达式1:哪个字段需要判断是否为null 如果该字段为null后的替换值。 如图所示:
Twcat_tree
2023/02/20
9310
数据库的查询操作
MySQL 数据库基础知识(系统化一篇入门)[通俗易懂]
简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据。更简单的形象理解,数据库和我们生活中存放杂物的仓库性质一样,区别只是存放的东西不同。
全栈程序员站长
2022/09/13
5.3K0
数据库原理及应用(四)——SQL语句(2)SQL基础查询以及常见运算符
!!!SELECT 中的<目标列表达式>中各个列的先后顺序不一样,执行结果的先后顺序也不一样。可以在列名后加上别名。
Regan Yue
2023/03/30
6970
数据库原理及应用(四)——SQL语句(2)SQL基础查询以及常见运算符
基于 MySQL 的数据库实践(基本查询)
首先根据准备工作中的操作导入大学模式,打开数据库连接后进入到 MySQL 的交互界面,再使用命令 use db-book; 切换到 db-book 数据库。
星哥玩云
2022/08/16
1.1K0
Oracle数据库之简单查询总结
​ 简单查询的主要特征就是将一张数据表之中的全部数据行进行显示,而后可以利用 SELECT 子句来控制所需要的输出列。
星哥玩云
2022/08/18
4390
MySQL数据库(八):表记录的基本操作(增删改查)
一、增 insert:增加(条件一条新纪录,默认新添加的记录都添加在已有记录的末尾) 1.格式: 1.1添加新纪录时,只给记录中的某几个字段赋值 insert into 表名(字段名1,字段名2...)values(值1,值2....); *值得类型是字符的话需要用双引号引起来 1.2 添加新纪录时,给所有记录中的所有字段赋值 insert into 表名 values(值1,值2....); *值得类型是字符的话需要用双引号引起来 *值与字段的类型一定匹配 2.例子 1.1 给表中插入一条记录
行 者
2018/03/26
5.4K0
MySQL数据库(八):表记录的基本操作(增删改查)
MySQL数据库——数据库CRUD之基本DML增删改表操作及DQL查表操作
           select                 字段列表            from                 表名列表            where                 条件列表            group by                 分组字段            having                  分组之后的条件            order by                  排序            limit                  分页限定  
Winter_world
2020/09/25
1.1K0
MySQL数据库——数据库CRUD之基本DML增删改表操作及DQL查表操作
MySQL数据库,从入门到精通:第三篇——MySQL 数据库规范和基础查询语句
前言 MySQL是一种流行的关系型数据库管理系统,在各行各业广泛应用。本文致力于介绍MySQL数据库规范和基本SELECT语句,帮助读者了解如何更好的使用和管理MySQL数据库。
默 语
2024/11/20
1800
MySQL数据库,从入门到精通:第三篇——MySQL 数据库规范和基础查询语句
【MySQL】数据库基础&&库/表的操作&&数据类型详解
为解决上述问题,专家们设计出更加利于管理数据的东西-数据库,能更加有效的管理数据,数据库的水平是衡量一个程序员水平的重要指标
用户10925563
2025/02/16
1250
【MySQL】数据库基础&&库/表的操作&&数据类型详解
ClickHouse 数据类型全解析及实际应用
基础类型只有数值、字符串和时间三种类型,没有 Boolean 类型,但可以使用整型的 0 或 1 替代。ClickHouse 的数据类型和常见的其他存储系统的数据类型对比:
大数据真好玩
2022/03/28
5.9K0
ClickHouse 数据类型全解析及实际应用
【愚公系列】2022年01月 Mysql数据库-SQL语法
文章目录 一、SQL语句 1.数据库、数据表、数据的关系介绍 2.SQL介绍 3.DDL-操作数据库 4.DDL-操作数据表 5.DML-INSERT语句 6.DML-UPDATE语句 7.DML-DELETE语句 8.DQL-单表查询 一、SQL语句 1.数据库、数据表、数据的关系介绍 数据库 用于存储和管理数据的仓库 一个库中可以包含多个数据表 数据表 数据库最重要的组成部分之一 它由纵向的列和横向的行组成(类似excel表格) 可以指定列名、数据类型、约束等 一个表中可以存储多条数据
愚公搬代码
2022/01/25
1.3K0
【愚公系列】2022年01月 Mysql数据库-SQL语法
MySQL数据库案例实战教程:数据类型、语法与高级查询详解
1. 性能问题:使用*通配符会导致数据库引擎进行全表扫描,这会带来性能上的损耗,特别是当数据量非常大的时候。相比之下,指定具体的列名可以让数据库引擎更有效地执行查询,提高查询效率。
Srlua
2024/05/29
3870
MySQL数据库案例实战教程:数据类型、语法与高级查询详解
MySQL数据库、数据表的基本操作及查询数据
存储引擎比较 |功能|MyISAM|Memory|InnoDB|Archive| |---|---|---|---|---| |存储限制|256TB|RAM|64TB|None| |支持事务|No|No|Yes|No| |支持全文索引|Yes|No|No|No| |支持数索引|Yes|Yes|Yes|No| |支持哈希索引|No|Yes|No|No| |支持数据缓存|No|N/A|Yes|No| |支持外键|No|No|Yes|No|
星哥玩云
2022/08/17
3.3K0
Oracle数据库的基本查询
本文用的是Oracle 10g数据库,利用PL/SQL Developer的集成开发环境。
星哥玩云
2022/08/17
3.4K0
【MySQL学习笔记】数据库/数据表的创建、查看、选择与修改
在MySQL数据库的学习中,数据库、数据表和数据的操作,不仅仅是必须掌握的内容,也是学习后续的基础噢~ 本期主要内容为: 数据库的创建、查看、选择与删除 数据表的创建、查看、选择与删除
颜颜yan_
2022/12/01
3.3K0
【MySQL学习笔记】数据库/数据表的创建、查看、选择与修改
推荐阅读
相关推荐
【MySQL】数据库的数据类型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档