打开直接就是一份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必须得是特殊字符
可以这样绕过
至此就通关了
标签:Begin,Level,参数,哈希,绕过,PHP,True,MD5 From: https://www.cnblogs.com/lhqrusht0p/p/17736727.html