1. 题目描述
打开链接,可以看到如下代码
2. 思路分析
代码都给出来了,接下来就是理解代码的含义了,从代码中不难发现,总共传入三个参数a,b,c,分别需要满足以下条件:
2.1 a的长度小于等于3,但是转换成int后需要大于6000000
2.2 对b计算md5值,md5的一部分为’8b184b’
2.3 c是一个json对象,其中c[‘m’] 不是数值类型且大于2022,c[‘n’]是一个数组,长度为2,c[‘n’]中第一个元素是一个数组类型,且需要满足array_search能够查找到"DGGJ"这个字符串,但是又不能等于"DGGJ"这个字符串。
(参考https://blog.youkuaiyun.com/weixin_46906325/article/details/127154789)
第一个条件科学计数法即可满足,a=1e9
第二个条件除了爆破没啥好办法,这里感觉条件不够友好,应该有个提示限制必须是整数,那么就容易爆破,结果应该是b=53724
第三个条件比较复杂了,主要考察了php中的字符串和整数的比较(比如1a和一个整数进行比较,会转换成1;a1和整数进行比较,由于第一个位置是a,非整数,php规定其值为0),根据这个比较规则,c[‘m’]可以等于2023a,至于c[‘n’],array_search本身也是一个比较操作,查找"DGGJ"时相当于和0进行比较,因此c[‘n’][1] = 0, c[‘n’][0]随便一个数组就行
3. 解题过程
a,b,c分别设置为以下的值,然后作为参数放入到请求中
a=1e9
b=53724
c={“m”:“2023a”,“n”:[[“xx”], 0]}
最终的flag为cyberpeace{68b6cb01e9ff453586488f24d9706293}
4. 总结
本题综合性比较强,三个条件考察三个知识点,一个是科学计数法,一个是md5爆破,一个是php比较绕过,都是常见的知识点,非常值得练习