没有提示
在最后一步之前没有回显
代码审计:
显然password参数无法绕过,只能进行md5碰撞,跑脚本得出: 114514
随便传一个看看怎么个事
无明显变化,网页源代码也无变化。 做到这里其实就已经卡死了,如果不在本地部署加上回显,很难意识到是哪一步出了问题。 一开始以为preg_match绕过出了错所以不执行,后来觉得一直没有回显是不是md5碰撞出了岔子,在本地部署测试后发现,在isset环节就挂了,e_v.a.l参数压根没传上去
虽然在做题过程中也有点感觉e_v.a.l参数名8对劲,但是并不知道到底是怎么个事。 一顿搜素之后,我们在一个犄角旮旯的博客中发现了php是如何处理带有非法字符参数名的。 $e_v.a.l 变量名传参时 . + 这种非法字符会被转化为_ 但是如果是'['非法字符 ,会被转化为'_'后会使得后续的非法字符得到保留
因此,其实应该这么传...
终于,我们得到了回显,那么接下来就是简单的绕过了,随便搜一个用用
&e[v.a.l=eval($_POST['cmd']);&cmd=system('cat /flag');
buuctf的flag一般都在根目录
得到flag:
flag{2f65856e-fe97-4f70-b379-4b3ed1fb392d}
首先,非常感谢你的详细解读和对这个CTF题目的深度解析。你的博客非常详细地解释了每一步的思路和操作过程,这对于读者来说是非常有帮助的。
你的文章优点在于,你对每一个步骤都进行了详尽的解释,并且附上了截图,让读者能够更好地理解你的解题思路。你对PHP非法字符参数名处理的解释非常清晰,让读者能够理解这个重要的概念。
然而,这篇文章也有一些可以改进的地方。首先,你在文章中使用了一些专业术语,对于非专业的读者来说,可能会感到困惑。我建议你可以在文章中添加一些注释或者解释,帮助读者理解这些专业术语。其次,你在文章中提到了一些操作,但是并没有详细解释这些操作的原因和目的,可能会让一些读者感到困惑。我建议你可以在文章中添加更多的解释,帮助读者理解这些操作的意义。
总的来说,你的文章是一篇非常优秀的CTF题目解析文章,我期待看到你的更多作品。