真的又过了好久,时光飞逝,但过年怎么能不做点题?如果你没有时间自己做,那就一起吧!
一、除夕
打开这道题,
这道题理解起来很简单,就是year的值是等于2022,但year+1后不能等于2023。
这个地方就要引入PHP的弱类型问题了,首先看一下前情提要:
没有人质疑php的简单强大,它提供了很多特性供开发者使用,其中一个就是弱类型机制。
php不会严格检验传入的变量类型,也可以将变量自由的转换类型。
比如 在$a == $b的比较中
- $a = null; $b = false; //为真
- $a = ''; $b = 0; //同样为真
然而,php内核的开发者原本是想让程序员借由这种不需要声明的体系,更加高效的开发,所以在几乎所有内置函数以及基本结构中使用了很多松散的比较和转换,防止程序中的变量因为程序员的不规范而频繁的报错,然而这却带来了安全问题。
知识储备:在PHP中声明的变量,在ZE中都是用结构体zval来保存的
zval的定义在zend/zend.h
其中php通过type判断变量类型 存入value
如上也就是php内核中弱类型的封装,也是我们后面讲的所有东西的原理和基础。
通过刚刚的了解,我们知道zval.type决定了存储到zval.value的类型。
当源代码进行一些未限制类型的比较,或数学运算的时候,可能会导致zval.type的改变,同时影响zval.value的内容改变。
总结:int遇上string的时候,当有一个对比参数是整数的时候,会把另外一个参数强制转换为整数。
可以先尝试一下,看到这里默认将后面的abcd直接忽略,year的值还是2022,所以这个函数条件没有满足。
由此可以想到,如果用小数点的方式,让前面==条件识别为等于,但后面+1又不等于,就达到我们的目的了。
所以payload就是?year=2022.abcd
包括这种字符情况也一样支持
ctfshow{ad7f686c-faab-4708-bcad-e75d2c9d37f6}
二、初一
这道题主要看题目提示,是加密类型的。
提示是密码也是兔,所以是rabbit加密。
密钥为2023。
ctfshow{happy_rabbit_year}
三、初二
下载附件之后,
先使用 python3 ws_interpreter.py flag.ws 运行
提示说flag不在这里。
使用 python3 ws_interpreter.py ws_interpreter.py 运行,
这道题有一种“我解释我自己”的感觉,直接就出flag了,flag.ws没有用上。
打开python文件看一下,
讲解了一下whitespace语言是什么,这道题的原理并不是很懂。
ctfshow{WSIsSoooooCool!!}
四、初五
这是一道密码题勾起了我的兴趣,
YDHML_QKA_PDK_HVD_NAHI_OQ_K_GR
提示其实是 仓颉编码
仓颉码是为了建立中文的索引观念的一种码。仓颉码的设计,主要的目标,就是为了建立中文的索引观念。仓颉码的应用,不论对资料或者程式,即相当于索引功能的处理。
仓颉码的索引,是以 ASCII的字符码为基准,但为了程式的处理,在内部转换为 十六进位值,我们称之为「序码」。序码只需要五个位元值,所以只取每个输入码最
低的五位元。当字库得到序码后,用前两码作为索引码,第一码仅有25个,相当于AS CII 的A至Y;第二码则多一种可能,即单码字,以空格结束,故有26个。
1976年朱邦复先生发明了仓颉输入法!
通过在线网站进行转换,
新春快乐NAHI年大吉
NAHI查不到,但是估计是兔
ctfshow{新春快乐兔年大吉}
欢迎关注我的微信公众号!!~~
大家一起学习,用我的毅力给与你力量!!我相信:
我思故我在。
学无止境。