一些奇奇怪怪的东西

记录一下一些有趣(会踩坑)的东西。//立flag!?

0x01

啧啧啧,隐匿转换和精度差异也是黑魔法两大分支呀。
相互触发也是_(:3)
不久前的墙网杯数字取证大赛中,100的审计题涛涛拿了一血。利用的是PHP和MySQL的精度不同。

当?id=1024.00……0001时就可以get flag。 出题者提前设定,一般不会出现这种情况。

然而今天试验

select * from users where password=0;

出现了喜大普奔的情况。
字符串与数字进行比较,会出现成功匹配。啧啧啧,万一有呆萌的开发忘了加引号怎么过滤都没用了。不过这种呆萌的程序员很稀有吧。作为新的姿势学习了(黑魔法)。

0x02

DECIMAL类型是以串的形式存放的。
相对于CHAR(32bit), INT(32bit), FLOAT(32bit), DOUBLE(64bit) 这些固定大小的类型,DECIMAL能够保存更大的精度,与FLOAT和DOUBLE类似,在定义DECIMAL(M,D)时通过M,D确定。M是数字的长度,D是小数点右边数字的长度。

  • D不能比M大。
  • 小数点左边的长度是(D-M)。
  • 储存符号。
  • 每九位有效数字存储为4字节。
  • MySQL 5.5

在MySQL里面进行有关于DECIMAL类型比较会发生的隐式转换,需注意

  • DECIMAL之间不会发生转换。
  • DECIMAL与INT之间, INT会被转换成了DECIMAL.
  • DECIMAL与字符串之间, (WOC)会转换成了实型。度娘帮我找到的一篇参考

0x03

少年,你觉得这个世界真实的就是真实的,假的就是假的吗?

>>>True, False = False, True
>>>print(True)
False
>>>_

标签: mysql

已有 2 条评论

  1. 又是精度问题呀~~

    1. 后怕了,任何浮点数都不敢直接上比较。

添加新评论