Bugku CTF_Web——字符?正则?

Bugku CTF_Web------字符?正则?

进入靶场

php 复制代码
<?php 
highlight_file('2.php');
$key='flag{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){ 
  die('key is: '.$key);
}
?>

一个php代码

复制代码
1. highlight_file('2.php');
功能:
将当前 PHP 文件的内容高亮显示在网页中。
这是为了让用户查看该文件的源码,但不会影响脚本的逻辑执行。
2. $key='flag{********************************}';
功能:
定义一个包含占位符的密钥变量 $key。
该变量的值类似于一个 FLAG,但实际内容被隐藏(用 * 替代)。
3. 正则表达式匹配:
php
复制代码
$IM = preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
正则表达式解释:
模式:key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]
key: 匹配字符串 key。
.*key: 匹配任意字符(0 个或多个),直到再次遇到 key。
.{4,7}: 匹配 4 到 7 个任意字符。
key:/./:
匹配 key:/ 后接任意一个字符 /。
(.*key): 捕获组,匹配任意字符(0 个或多个),直到遇到 key。
该捕获组的内容会被存储在 $match[1] 中。
[a-z]: 匹配一个小写字母。
[[:punct:]]: 匹配一个标点符号(如 !, ?, . 等)。
/i: 忽略大小写匹配。
匹配逻辑:
从用户传入的 id 参数值中,检测是否符合上述正则表达式。
如果匹配成功,preg_match 返回 1,并将匹配结果存储到 $match 数组中。
4. 条件判断:
php
复制代码
if ($IM) {
  die('key is: ' . $key);
}
功能:

如果正则匹配成功,程序会立即执行 die() 函数。
输出 key is: 和 $key 的值。
随后终止程序。
否则:

如果匹配失败,脚本什么也不会输出,程序继续运行(虽然在当前代码中没有后续逻辑)。
可能的漏洞或用法:
正则表达式解析绕过:

开发者试图通过正则表达式限定用户输入,但复杂的规则可能存在绕过方式。
通过精心构造 id 参数,可以触发条件并泄露 $key 的值。
正则调试:

输入可能是类似以下格式的字符串:
javascript
复制代码
keyxxxxxkeyxxxxkey:/x/somethingkeyy?
xxxxx: 任意字符。
:/x/somethingkey: 满足捕获组 (.*key)。
y: 一个小写字母。
?: 一个标点符号。

构造payload

复制代码
?id=keyABCkey1234key:/X/somethingkeya!

再把2.php去掉

成功拿到flag

复制代码
flag{80ef930e08856cb2403d3eec54aa578f}
相关推荐
unable code6 分钟前
攻防世界-Misc-Miscellaneous-200
网络安全·ctf·misc
元气满满-樱13 分钟前
DHCP服务部署
网络
离凌寒1 小时前
一、基于freertos下对LAN8720模块进行通信测试
网络·freertos
不染尘.1 小时前
UDP客户服务器模型和UDP协议
服务器·网络·网络协议·计算机网络·udp
zhengfei6111 小时前
渗透工具集——15款常见C2的框架
测试工具·安全
Macbethad2 小时前
Linux网关应用技术报告
网络
旺仔Sec2 小时前
2026年河北省职业院校技能大赛“网络系统管理”(高职组)网络构建样题
运维·服务器·网络
星哥说事2 小时前
系统安全加固:禁用不必要服务和端口,及时更新安全补丁
安全·系统安全
Neolnfra2 小时前
Xshell SSH 连接故障排查
运维·服务器·网络·ssh·xshell·运程连接
unable code3 小时前
攻防世界-Misc-4-1
网络安全·ctf·misc·1024程序员节