Begin of PHP

发布时间 2023-09-29 01:12:38作者: 努力的大魔王

打开直接就是一份php代码,分析代码发现需要闯关,一共有五关

 直接用ai给我翻译一下

Level 1:
用户需要提供名为 'key1' 和 'key2' 的GET参数。
这两个参数的内容不应相同,但它们的MD5哈希值应该相同。
如果条件满足,将设置变量 $flag1 为True,否则会显示 "nope, this is level 1"。


Level 2:
如果 $flag1 为True,用户需要提交一个POST参数 'key3'。
'key3' 的MD5哈希值必须等于其SHA-1哈希值。
如果条件满足,将设置变量 $flag2 为True,否则会显示 "nope, this is level 2"。


Level 3:
如果 $flag2 为True,用户需要提供名为 'key4' 的GET参数。
'key4' 的内容必须与读取文件 "/flag" 的内容相等。
如果条件满足,将设置变量 $flag3 为True,否则会显示 "nope, this is level 3"。


Level 4:
如果 $flag3 为True,用户需要提供名为 'key5' 的GET参数。
'key5' 的内容必须是非数字且大于 2023。
如果条件满足,将设置变量 $flag4 为True,否则会显示 "nope, this is level 4"。


Level 5:
如果 $flag4 为True,将执行 extract($_POST),这意味着将POST参数作为变量导入当前符号表。
然后,它循环遍历所有POST参数,确保它们的内容只包含字母和数字。
最后,它检查 $flag5 是否为True,如果是,则会显示 "/flag" 文件的内容,否则会显示 "nope, this is level 5"。

  

第一关(弱类型绕过)

需要传入生成md5一样的参数

这个东西开始我是硬做的,不过后面听同学说才知道这类题叫MD5绕过(弱类型绕过),这里贴一篇好文

MD5绕过(强弱类型比较)_md5弱比较_陈wonton的博客-CSDN博客

 所以这里直接传参

 成功绕过

 

第二关(数组绕过)

'key3' 的MD5哈希值必须等于其SHA-1哈希值。

 这里拓展一个知识,再贴一个好文

PHP中MD5和sha1绕过方式总结 - dre0m1 - 博客园 (cnblogs.com)

 所以直接让key3为数组即可

 

第三关(数组绕过)

 

 要strcmp函数返回0才能通过次关,然后又无法获得"/flag"处的文件,所以说需要构造

这时候就想了,strcmp比较的是两个字符串,如果我直接将key4定义为数组,那它就会使strcmp这个函数无法正常识别,进而返回值为NULL,也就是0,所以

 

第四关()

这个意思是

'key5' 的内容必须是非数字且大于 2023。

前置知识,好文推荐

php陷阱:字符串和数字比较 - youxin - 博客园 (cnblogs.com)

 这个时候我们就可以利用php语言中会将字母和数字的组合解析成数字的特点构造key5,即非纯数字的参数

 

 

第五关()

意思是出现了上面提到的字母和数字都不行并且还要flag5不为0,所以说传上去的flag5必须得是特殊字符

 可以这样绕过

 至此就通关了