BUGKU-WEB No one knows regex better than me

news2025/1/18 2:04:50

题目描述

题目截图如下:
在这里插入图片描述

进入场景看看:
在这里插入图片描述

解题思路

  • 看到此类题目,直接代码审计

相关工具

  • base64 在线加密
  • https://www.mklab.cn/utils/regex

解题步骤

  1. 代码审计
<?php 
error_reporting(0);
# 从请求中获取了两个参数:'zero'和'first',然后,代码将这两个参数拼接在一起并赋值给变量$second。
$zero=$_REQUEST['zero']; 
$first=$_REQUEST['first'];
$second=$zero.$first; 

if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second)){ # 代码使用正则表达式检查$second变量中是否包含字符串"Yeedo"、"wants"、"a"、"girl"、"friend"、"or"、"a"、"flag"
    $key=$second; # 如果匹配成功,则将$key变量设置为$second的值。
    if(preg_match("/\.\.|flag/",$key)){ # 代码使用正则表达式检查$key变量是否包含".."或"flag"字符串。
        die("Noooood hacker!"); # 如果匹配成功,则输出"Noooood hacker!"并停止脚本的执行。
    }else{
        $third=$first;  # 如果不成功,代码则将$first变量赋值给$third。所以$key不能有flag和..。
        if(preg_match("/\\|\056\160\150\x70/i",$third)){ # 代码使用正则表达式检查$third变量是否包含"|\056\160\150\x70"(即"|.php")字符串。 
         # 如果匹配成功,则从$third字符串的第5个字符开始截取,并将结果赋值给$end变量。
            $end=substr($third,5);
            highlight_file(base64_decode($zero).$end); //maybe flag in flag.php
            # 代码调用highlight_file()函数来展示源代码文件。
              # $zero变量经过base64解码后的字符串与$end变量拼接后得到的字符串就是会展示的源代码文件。
        }
    }
}
else{
# 如果以上的匹配条件都不满足,则会展示当前文件的源代码。
    highlight_file(__FILE__);
}

简单解释就是:

请求获取2个参数:zero和first,并将其拼接起来作为second变量,也就是 /?zero=&first=second,拼接后的参数赋值使用正则来约束:

  • 要匹配字符串"Yeedo"、“wants”、“a”、“girl”、“friend”、“or”、“a”、"flag"中的字符
if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second))
  • 不能有flag和..
if(preg_match("/\.\.|flag/",$key))
  • 对于first参数来说,要包含(“|.php”)字符串,first参数字符的形式是xxxx|.php(因为从第5个字符截取),而xxxx必须得是字符串"Yeedo"、“wants”、“a”、“girl”、“friend”、“or”、“a”、"flag"中的字符,所以可能是aaaa、oror、girl三种可能,也就是:aaaa|.php、oror|php、girl|php
  • 因为从第5个字符截取,所以aaaa、oror、girl这些字符到时候是被截取掉的。
if(preg_match("/\\|\056\160\150\x70/i",$third))

$end=substr($third,5);
  • zero参数需要进行base64解密,说明它在请求中是加密输入
base64_decode($zero)

现在问题是zero参数到底是什么?

这里有一行注释://maybe flag in flag.php,提示zero就是flag。flag base64加密后就是ZmxhZw==

PS:要是没有提示flag.php,你会想到zero就是flag吗?

所以可以得到poc:

http://114.67.175.224:11016/?zero=ZmxhZw==&first=girl|.php
http://114.67.175.224:11016/?zero=ZmxhZw==&first=aaaa|.php
http://114.67.175.224:11016/?zero=ZmxhZw==&first=oror|.php

在这里插入图片描述

得到Flag

flag{77b1d2cf7c7e1efca26cd60fbcbef5f6}

在这里插入图片描述

新知识点

  • preg_match_all() 函数:用于在字符串中搜索匹配的模式,返回所有匹配项。
preg_match_all(pattern, subject, matches)

参数说明:

用于在字符串中搜索匹配的模式,返回所有匹配项。
pattern:正则表达式模式。
subject:要搜索的字符串。
matches:用于存储所有匹配结果的数组。

  • substr() 函数:返回字符串的一部分。

在这里插入图片描述

  • 正则表达式学习:https://regex101.com/
/Yeedo|wants|a|girl|friend|or|a|flag/i

解释如下:

/ 表示正则表达式的开始和结束。
匹配Yeedo、wants、a、girl、friend、flag字符
| 表示逻辑或,用于匹配其中任意一项。
i 标记表示不区分大小写。


/\.\.|flag/

解释如下:

  • \. 匹配点号(.)
  • | 表示逻辑或,用于匹配其中任意一项。
    flag:表示要精确匹配的字符串 “flag”。

这个正则表达式的含义是:匹配一个(..)或者精确匹配的字符串 “flag”。


/\\|\056\160\150\x70/i

解释如下:

  • \\:表示匹配一个反斜杠字符\。
    后面加上一个|,也就是\|,表示|也是需要匹配的符号。和逻辑或的区别在于,看前面有没有两个反斜杠\\
  • \056\160\150\x70:表示匹配特定的字符序列。在这里,\056 表示八进制ASCII码表示的小数点(.),\160\150\x70 表示八进制ASCII码表示的 PHP,这样组合在一起,就匹配了字符串 “.php”。

这个正则表达式的含义是:匹配一个|.php,忽略大小写。

参考链接

  • [WP-Bugku积累-正则bypasss] No one knows regex better than me
  • CTFer成长日记5:BugKu-No one knows regex better than me

有用的话,请点赞收藏评论,帮助更多的同学哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1518891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Servlet的book图书表格实现(使用原生js实现)

作业内容&#xff1a; 1 建立一个book.html,实现图书入库提交 整体参考效果如下: 数据提交后&#xff0c;以窗口弹出数据结果&#xff0c;如: 2 使用正则表达式验证ISBN为x-x-x格式&#xff0c;图书名不低于2个字符&#xff0c;作者不能为空&#xff0c;单价在【10-100】之间…

深入解析Arm架构:掌握汇编与逆向工程,提升设备安全性——蓝狐卷带你入门

写在前面 与传统的CISC&#xff08;Complex Instruction Set Computer&#xff0c;复杂指令集计算机&#xff09;架构相比&#xff0c;Arm架构的指令集更加简洁明了&#xff0c;指令执行效率更高&#xff0c;能够在更低的功耗下完成同样的计算任务&#xff0c;因此在低功耗、嵌…

用pyecharts的overlap绘制叠加图时,设置的颜色不起作用

问题 用pyecharts绘制叠加图时&#xff0c;如折线图上叠加散点图时&#xff0c;分别设置了自己的颜色&#xff08;三角是绿色&#xff0c;圆形是蓝色&#xff09;&#xff0c;但是渲染颜色和图例颜色不一致&#xff0c;如下图所示&#xff0c;折线颜色和散点颜色相同。 解决…

k8s集群部署elk

一、前言 本次部署elk所有的服务都部署在k8s集群中&#xff0c;服务包含filebeat、logstash、elasticsearch、kibana&#xff0c;其中elasticsearch使用集群的方式部署&#xff0c;所有服务都是用7.17.10版本 二、部署 部署elasticsearch集群 部署elasticsearch集群需要先优化…

VMware 配置虚拟机网络

之前需要完成的任务 &#xff08;1&#xff09;、下载和安装VMware-Workstation-Pro.exe软件&#xff0c;推荐16.0版本 &#xff08;2&#xff09;、下载centOS7镜像&#xff0c;可以在阿里云下载。 &#xff08;3&#xff09;、VM创建一个虚拟机&#xff0c;并且使用本地已下载…

IDEA配置JRebel热部署

插件仓库安装 打开IDEA&#xff0c;选择File—>Settings—>Plugins—>在右侧选择Marketplace&#xff0c; 在搜索框输入jrebel—>选择搜索结果—>点击Install JRebel激活 其中&#xff0c;Team URL可以使用在线GUID地址在线生成GUID 拿到GUID串之后&#xff…

vue2点击左侧的树节点(el-tree)定位到对应右侧树形表格(el-table)的位置,树形表格懒加载

左侧树代码 <el-tree :data"treeData" node-key"id" default-expand-all"" //节点默认全部展开:expand-on-click-node"false" //是否在点击节点的时候展开或者收缩节点:props"defaultProps" node-click"handleNodeC…

(二十五)Flask之MTVMVC架构模式Demo【重点:原生session使用及易错点!】

目录&#xff1a; 每篇前言&#xff1a;MTV&MVC构建一个基于MTV模式的Demo项目&#xff1a;蹦出一个问题&#xff1a; 每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领…

社区居民医疗健康系统 微信小程序

设计原则 本社区健康医疗APP采用 Hbuildex技术&#xff0c;使用Java语言开发&#xff0c;充分保证了系统稳定性、完整性。 社区健康医疗APP的设计与实现的设计思想如下&#xff1a; &#xff08;1&#xff09;操作简单方便、系统界面安全良好、简单明了的页面布局、方便查询相…

java-模拟的例题实战

例题实战 在实际的开发工作中&#xff0c;对字符串的处理是最常见的编程惹怒我。本题目即是要求程序对用户输入的串进行处理。具体规则如下&#xff1a; 1 把每个单词的首字母变成大写 2 把数字与字母之间用下划线字符&#xff08;_&#xff09;分开&#xff0c;使得更清晰 …

下载BenchmarkSQL并使用BenchmarkSQL查看OceanBase 的执行计划

下载BenchmarkSQL并使用BenchmarkSQL查看OceanBase 的执行计划 一、什么是BenchmarkSQL二、下载BenchmarkSQL三、使用BenchmarkSQL查看OceanBase 的执行计划 一、什么是BenchmarkSQL BenchmarkSQL是一个开源的数据库基准测试工具&#xff0c;可以用来评估数据库系统的性能&…

unity3d Animal Controller的Animal组件中Stances,Advanced基础部分理解

Stances 立场 立场要求在动物动画控制器上的姿态动画参数。 你可以有多个运动状态,并根据当前的立场使用它们 过渡的条件是: Stance StanceID Default Stance默认姿势 如果调用函数Stance_Reset&#xff08;&#xff09;&#xff0c;动物将返回到的默认姿势。 Current …

webconfig-boot项目说明

1、前言 最近利用空余时间写了一个项目webconfig-boot 。该项目主要配置了web项目常用的一些配置&#xff0c;如统一参数校验、统一异常捕获、统一日期的处理、常用过滤器、常用注解等。引入依赖接口完成常规的web配置。 这里也是总结了笔者在项目开发中遇到的一些常用的配置…

力扣111---二叉树的最小深度(简单题,Java,递归+非递归)

目录 题目描述&#xff1a; &#xff08;递归&#xff09;代码&#xff1a; &#xff08;非递归、层次遍历&#xff09;代码&#xff1a; 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…

【源码编译】Apache SeaTunnel-Web 适配最新2.3.4版本教程

Apache SeaTunnel新版本已经发布&#xff0c;感兴趣的小伙伴可以看之前版本发布的文章 本文主要给大家介绍为使用2.3.4版本的新特性&#xff0c;需要对Apache SeaTunnel-Web依赖的版本进行升级&#xff0c;而SeaTunnel2.3.4版本部分API跟之前版本不兼容&#xff0c;所以需要对 …

备战蓝桥杯Day27 - 省赛真题-2023

题目描述 大佬代码 import os import sysdef find(n):k 0for num in range(12345678,98765433):str1 ["2","0","2","3"]for x in str(num) :if x in str1:if str1[0] x:str1.pop(0)if len(str1) ! 0:k1print(k)print(85959030) 详…

Qt 图形视图 /基于Qt示例DiagramScene解读图形视图框架

文章目录 概述从帮助文档看示例程序了解程序背景/功能理清程序概要设计 分析图形视图的协同运作机制如何嵌入到普通Widget程序中&#xff1f;形状Item和文本Item的插入和删除&#xff1f;连接线Item与形状Item的如何关联&#xff1f;如何绘制ShapeItem间的箭头线&#xff1f; 下…

Centos strema 9 环境部署Glusterfs9

本文档只是创建复制卷&#xff0c;分布式卷&#xff0c;分布式复制卷&#xff0c;纠删卷 操作系统 内核 角色 Ip地址 说明 CentOS Stream 9 x86_64 5.14.0-427.el9.x86_64 客户端 client 192.168.80.119 挂载存储业务机器 CentOS Stream 9 x86_64 5.14.0-427.el9.x8…

Git的介绍

导出项目依赖 # 以后项目给别人需要导出项目依赖&#xff0c;放在项目路径下&#xff0c;以后在运行项目前&#xff0c;先安装依赖 一般约定俗成都叫 requirements.txt,但是会有别的&#xff1a;req.txt | dev.txt # 两种方式&#xff1a; 1、虚拟环境所有装的第三方&…

分享6款非常炫酷的前端动画特效(附在线演示)

分享6款非常不错的项目动画特效 其中有three.js特效、canvas特效、CSS动画、SVG特效等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 Three.js 3D游戏场景动画特效 基于Three.js的HTML5 3D动画&#xff0c;这个动…