跳转至
2021 | 中国科学技术大学第八届信息安全大赛 | Web

卖瓜

题目

有一个人前来买瓜。

HQ:哥们,这瓜多少钱一斤啊?

你:两块钱一斤。

HQ:What's up!这瓜皮子是金子做的还是瓜粒子是金子做的?

你:你瞧瞧现在哪有瓜啊?这都是大棚的瓜,只有 6 斤一个和 9 斤一个的,你嫌贵我还嫌贵呢。

(HQ 心里默默一算)

HQ:给我来 20 斤的瓜。

你:行!

HQ:行?这瓜能称出 20 斤吗?

你:我开水果摊的,还不会称重?

HQ:我问你这瓜能称出 20 斤吗?

你:你是故意找茬,是不是?你要不要吧!

HQ:你这瓜要是刚好 20 斤吗我肯定要啊。那它要是没有怎么办啊?

你:要是不是 20 斤,我自己吃了它,满意了吧?

(你开始选瓜称重)

补充说明:当称的数字变为浮点数而不是整数时,HQ 不会认可最终的称重结果。

解题思路

  • 分别有 6 斤和 9 斤的瓜,并且只能输入整数,直接称根本称不到 20 斤 🤧
  • 想到会不会是整数溢出,经尝试放 9223372036854775807 个 9 斤的瓜会溢出为 -9223372036854775808
  • 本题与 PHP 的特性相关(做题的时候并没看源码或 HTTP 头之类的x),当数或运算结果超出 int 范围会被解释为 float,进一步使用函数 intval() 将 float 转为 int 时,结果是未定义的
  • 奇数转偶数 :) 由于 intval() 函数只作用于乘法,小心不要让加法运算结果超出 int 范围

    1
    2
    3
    4
    5
    + 9 * 1024819115206086201 -> -9223372036854775808
    + 6 * 1537228672809129301 -> -2
    + 6 * 4 -> 22
    + 9 * 1024819115206086201 -> -9223372036854775786
    + 6 * 1537228672809129301 -> 20
    

  • 还可以两步到位

    + 9 * 1500000000000000000 -> -4946744073709551616
    + 9 * 549638230412172404 -> 20
    

参考资料


最后更新: 2021年10月31日 22:18:07
Contributors: YanhuiJessica

评论