
有没有师傅帮我解答一下?这个源码的前几个参数我都可以绕过,就最后一个XY参数不知道该怎么解决?我想要获得最终的hello

关注引自免费微信小程序:皆我百晓生
分析这段PHP代码,我们可以看到它涉及到了几个关键部分,包括变量提取、条件判断和字符串比较。为了得到 "hello" 的输出,我们需要满足所有条件。我们已经知道如何绕过前两个条件,但最后一个关于 SXY 变量的条件有些复杂。这里有一个详细的步骤来解决这个问题。
首先,让我们简化并理解整个代码结构:
highlight_file() 函数。SXYCTF。extract() 函数从 $_GET 数组中提取变量。
4-10. 第一个条件:检查是否存在 'vall' 和 'va12' 并且它们不相等。如果满足,执行 md5() 函数并将结果与 $_GET['va12'] 进行比较。
11-18. 第二个条件:检查是否已设置 $md5 变量,并且其值等于 md5($md5)。这实际上是一个自我校验,通常用于防止某些攻击。
19-27. 第三个条件:检查 SXY 是否等于 SXYCTF 常量。
28-34. 最后一个条件:检查 SXY 不等于 "XYCTF_550102591",并且其 md5() 值等于 "XYCTF_550102591" 的 md5() 值。要达到 "hello" 输出,你需要同时满足所有这些条件。根据题目描述,你已经可以绕过前两个条件,所以我们只需要关注最后一个条件。由于 SXY 必须满足两个条件:不等于 "XYCTF_550102591" 并且其 md5() 值等于 "XYCTF_550102591",我们可以选择一个特殊的值来满足这两个条件。
考虑一个字符串,它的长度大于 32 位,因为 md5() 返回的是一个 32 位的哈希值。在这种情况下,我们可以创建一个字符串,其前 32 位是 "XYCTF_550102591",然后在其后面添加一些额外的字符,使得原始字符串和 "XYCTF_550102591" 不相等,但是经过 md5() 计算后的哈希值仍然相同。这是因为 md5() 是敏感于输入的变化的,但在这个例子中,由于长度增加,原始字符串的末尾部分不会影响前 32 位的哈希值。
例如,我们可以选择以下字符串作为 SXY 的值:
$SXY = "XYCTF_550102591" . str_repeat("A", 32);
这里的 str_repeat("A", 32) 将生成一个由 32 个 'A' 组成的字符串。由于 md5() 的特性,这个字符串的 md5() 值将与 "XYCTF_550102591" 相同。
现在,将此值传递给 SXY 参数,你应该能得到 "hello" 的输出。在实际操作中,你需要通过 HTTP 请求发送带有相应参数的请求,例如使用 curl 或者类似工具(如 Burp Suite)。
curl -X POST http://your-server-url/?vall=value1&va12=value2&SXY=XYCTF_550102591A%A%A...%A (重复32次'A')
注意,这里省略了 "A" 字符串后面的32个 'A',你需要在命令中完整地复制这些字符。这样,所有条件应该都会被正确触发,从而输出 "hello"。
如果你正在使用 Burp Suite,你可以创建一个新的 HTTP 请求,设置方法为 POST,并在表单数据或URL参数部分添加相应的键值对,然后提交请求查看结果。