Bugku CTF_Web——字符?正则?

devtools/2024/11/19 17:32:50/

Bugku CTF_Web——字符?正则?

进入靶场

在这里插入图片描述

<?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}

在这里插入图片描述


http://www.ppmy.cn/devtools/135254.html

相关文章

NIST 发布后量子密码学转型战略草案

美国国家标准与技术研究所 (NIST) 发布了其初步战略草案&#xff0c;即内部报告 (IR) 8547&#xff0c;标题为“向后量子密码标准过渡”。 该草案概述了 NIST 从当前易受量子计算攻击的加密算法迁移到抗量子替代算法的战略。该草案于 2024 年 11 月 12 日发布&#xff0c;开放…

adb不识别设备(手机)的若干情形及解决方法

1.执行adb root 提示adb: unable to connect for root: no devices/emulators found&#xff1b; 执行adb devices ,List下无设备 原因&#xff1a;往往是数据线或USB插口问题&#xff0c;换根数据线或换个USB插口试试 2.执行adb devices List下提示 “592b925b no permi…

openai 论文Scaling Laws for Neural Language Models学习

2001.08361 (arxiv.org) 论文研究语言模型在交叉熵损失下的性能经验缩放定律&#xff1a;模型损失&#xff08;性能&#xff09;随模型大小、数据集大小和用于训练的计算量呈现缩放为幂律的关系&#xff0c;有些趋势跨越超过 7 个数量级。其他模型架构细节 &#xff08;如网络…

Go语言跨平台桌面应用开发新纪元:LCL、CEF与Webview全解析

开篇寄语 在Go语言的广阔生态中&#xff0c;桌面应用开发一直是一个备受关注的领域。今天&#xff0c;我将为大家介绍三款基于Go语言的跨平台桌面应用开发框架——LCL、CEF与Webview&#xff0c;它们分别拥有独特的魅力和广泛的应用场景。通过这三款框架&#xff0c;你将能够轻…

java小练习

小练1.用while语句计算11/2!1/3!1/4!...1/20!的和 public class test_11_17_2 {public static void main(String[] args) {double sum 0;double item 1;int n 20;int i 1;while(i<n){sum item;i i1;item item*(1.0/i);}System.out.println(sum);} } 小练2.计算88888…

Linux系统Centos设置开机默认root用户

目录 一. 教程 二. 部分第三方工具配置也无效 一. 教程 使用 Linux 安装Centos系统的小伙伴大概都知道&#xff0c;我们进入系统后&#xff0c;通常都是自己设置的普通用户身份&#xff0c;而不是 root 超级管理员用户&#xff0c;导致我们在操作文件夹时往往爆出没有权限&am…

力扣(leetcode)题目总结——辅助栈篇

leetcode 经典题分类 链表数组字符串哈希表二分法双指针滑动窗口递归/回溯动态规划二叉树辅助栈 本系列专栏&#xff1a;点击进入 leetcode题目分类 关注走一波 前言&#xff1a;本系列文章初衷是为了按类别整理出力扣&#xff08;leetcode&#xff09;最经典题目&#xff0c…

VLOOKUP函数的使用

一、根据一个表去另一个表中找相同的数据 &#xff08;一&#xff09;资源名称&#xff1a;匹配两表中的不同数据.xlsx &#xff08;二&#xff09;表B去匹配表A ​​​​​​ IFERROR(VLOOKUP(C2,表A!$C$2:$F$10,1,0),"")IFERROR函数表示出错时不报乱码&#xf…