AI智能摘要
你是否以为这只是道简单的正则题?真相远比代码更烧脑。一道CTF经典题目,表面考察PHP的`preg_match`函数,实则暗藏逻辑陷阱与多重解法。只需构造特定URL参数,触发正则匹配,就能爆出flag——但payload的组合方式竟有成百上千种!本文带你逆向剖析这行诡异正则:`/key.*key.{4,7}key://.//(.*key)[a-z][[:punct:]]/i`,看透字符背后的匹配逻辑,掌握CTF中正则绕过的核心技巧。
— AI 生成的文章内容摘要
这道题挺没意思的,就是考察正则,还有PHP preg_match函数的作用,好,我们开始
打开页面一堆代码提示,进行分析:
<?php highlight_file('2.php'); //高亮,没有什么好说的 $key='KEY{********************************}'; //千万不要以为这就是PHP源代码,这个只是提示你,flag在$key里面 //preg_match 相当于一个匹配搜索的函数,preg_match (这里写正则、这里是待匹配的内容、这里是匹配的结果) //这里就是要让$IM有值,也即是TRUE,然后让下面的if语句能够成功执行,就能拿到flag $IM= preg_match("/key.*key.{4,7}key://.//(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match); if( $IM ){ die('key is: '.$key); } ?>
正则这里自己去恶补,不解释,这个题可以构造的payload实在是太多了,我这里就随便写一个
payload:http://123.206.87.240:8002/web10/?id=key123key1234key:/1/123keya-
然后成功拿到flag。。。


天津市 1F
正则题真的挺烦的,完全看不懂
辽宁省抚顺市 2F
key123key1234key:/1/123keya- 这个payload确实可以
澳大利亚 B1
@ 啵啵金鱼 payload能用就行呗,搞那么明白干嘛
日本 3F
有更简单的解法吗?
浙江省金华市 B1
@ 无敌小旋风 其实可以简化成key.*?key.{4,7}key://.//.*?key[a-z][[:punct:]],不用那么死板
日本 4F
之前做CTF也被正则坑过😭
广东省广州市 B1
@ RagingTide 同被正则虐过,上次卡了整整一晚上才跑通😭
辽宁省大连市 5F
这题出的水平不行
北京市 6F
php的preg_match函数用起来真别扭
江苏省无锡市 7F
图片里的代码能看清吗?
韩国 8F
搞了半天原来是这么匹配的
北京市 9F
这种题做多了头疼
北京市 10F
为啥要用这么复杂的正则啊
韩国 B1
@ 烈焰预言家 这正则写得也太绕了吧,看得头大
广东省珠海市 11F
payload试了下真能用,不过flag格式有点怪
广东省佛山市 12F
正则这题感觉像拼运气,调payload比写逻辑还累
四川省乐山市 13F
又是这种靠猜的题,出题人是不是觉得正则人人精通啊?
黑龙江省鸡西市 14F
我直接复制payload跑通了,但根本没懂匹配逻辑😂
陕西省西安市 15F
preg_match默认只匹配一次,这里其实有坑吧
广东省广州市 16F
感觉这题就是在考谁更会试错,不是考技术
印度 17F
key后面跟的字符长度限制太模糊了,试到吐
菲律宾 18F
正则里那个[:punct:]到底包含哪些符号?有人列一下吗?
江西省南昌市 19F
那个[:punct:]具体包含啥符号啊,有人说说嘛
日本 20F
试了几次都失败了,谁给个更明确的payload😭
云南省昆明市 21F
这正则也太长了吧,看着就头大
日本 22F
直接复制楼主的payload过了,但完全不明白为啥匹配上了
浙江省宁波市 23F
之前也被正则题卡过,一模一样的感觉,就是硬试
浙江省杭州市 24F
key123key1234key:/1/123keya- 这个有效,亲测
湖南省长沙市 B1
@ 慢节奏生活 亲测有效就行