前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于 MySQL 数据库空字符及弱类型的探讨

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

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

本文作者:某小六(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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档