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

admin 2020年9月5日11:09:59评论249 views字数 1204阅读4分0秒阅读模式

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

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



故事的开始,是这样的:


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


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


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


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


Select * from users where username=0;


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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

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


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


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


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


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


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


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


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

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


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


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


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


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

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


谈谈 MySQL 的黑暗语法


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


关于 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




扫描下方二维码加入星球学习

加入后会邀请你进入内部微信群,内部微信群永久有效!

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

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

目前30000+人已关注加入我们

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



  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年9月5日11:09:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   关于 MySQL 数据库空字符及弱类型的探讨http://cn-sec.com/archives/119394.html

发表评论

匿名网友 填写信息