[buuctf]cat flag题解
[BUUCTF] cat flag 题解1. 题目源码题目给出的 PHP 源代码如下?phpif(isset($_GET[cmd])){$cmd$_GET[cmd];if(!preg_match(/flag/i,$cmd)){$cmdescapeshellarg($cmd);system(cat .$cmd);}}else{highlight_file(__FILE__);}?逻辑分析程序通过GET方式接收cmd参数。使用正则preg_match(/flag/i, $cmd)对字符串中的flag关键字不区分大小写进行过滤。若未触发正则拦截则对$cmd调用escapeshellarg()函数进行转义最后拼接至system(cat . $cmd)并执行命令。2. 漏洞原理与延伸1.escapeshellarg()剥离非法 UTF-8 字符绕过escapeshellarg()的设计初衷是为字符串两端包裹单引号并转义已有的单引号使得整个字符串作为单一安全参数传递给 Shell防止命令注入。但是在PHP 7.3某些具体版本中escapeshellarg()在处理包含非法 UTF-8 字符字节例如%80/\x80的字符串时会将该非法字节直接从结果中剥离删除。绕过正则传入fl%80ag时原始输入字符串为fl\x80ag不匹配正则表达式flag从而顺利绕过preg_match(/flag/i, $cmd)黑名单检测。执行命令经过escapeshellarg()处理后0x80字节被系统剔除处理后的字符串恢复为flag最终拼接为cat flag并成功执行。2. 知识点拓展escapeshellarg()escapeshellcmd()经典组合漏洞在 CTF 题目中经常会见到将这两个转义函数组合使用的场景例如?phpif(isset($_SERVER[HTTP_X_FORWARDED_FOR])){$_SERVER[REMOTE_ADDR]$_SERVER[HTTP_X_FORWARDED_FOR];}if(!isset($_GET[host])){highlight_file(__FILE__);}else{$host$_GET[host];$hostescapeshellarg($host);$hostescapeshellcmd($host);$sandboxmd5(glzjin.$_SERVER[REMOTE_ADDR]);echoyou are in sandbox .$sandbox;mkdir($sandbox);chdir($sandbox);echosystem(nmap -T5 -sT -Pn --host-timeout 2 -F .$host);}产生机制escapeshellarg()率先把$host转义并用单引号包裹成单一参数。紧接着对处理结果调用escapeshellcmd()后者会再次转义字符串中的 Shell 元字符如 | ; \及未配对的单引号。这破坏了原本建立的单引号边界。危害后果攻击者可利用单引号配对错位拆分参数形成参数注入Argument Injection例如向nmap注入追加参数以实现任意文件写入/命令执行而非直接通过;进行简单的指令拼接。3. 解题过程Step 1. 尝试绕过限制并读取 flag构造包含非法 UTF-8 字节的 Payload 绕过黑名单限制?cmd/fl%80ag页面返回提示我们并没有完整拿到 flag。Step 2. 抓包分析 HTTP 响应头抓包查看完整的 HTTP 响应包数据从响应头中可注意到Server: openresty。这表明服务器使用了 OpenResty/Nginx 架构提示我们可以尝试读取 Nginx 的日志文件来获取更多线索。Step 3. 读取日志定位真实 Flag 文件利用cmd参数读取默认的 Nginx 访问日志文件access.log?cmd/var/log/nginx/access.log在日志记录中成功找到真实的 flag 文件名this_is_final_flag_e2a457126032b42d.php。Step 4. 读取真实 Flag 文件源码再次结合%80字符绕过黑名单读取目标 PHP 文件?cmdthis_is_final_fl%80ag_e2a457126032b42d.php由于目标文件是.php文件内容会被 PHP 解析执行或被浏览器当作 HTML 隐藏按下Ctrl U查看网页源代码CTF2{f02ea6b9-aa0b-442e-907b-213b82b99107}成功获取最终 Flag

相关新闻

2026深度实测:16款降AIGC网站测评,论文安全过关就靠它!

2026深度实测:16款降AIGC网站测评,论文安全过关就靠它!

随着AI写作技术的迅猛发展,越来越多的学术创作者开始依赖这类工具提升写作效率。然而,随着各大高校和期刊对AIGC检测技术的不断升级,论文中若存在明显的AI痕迹,极易被系统识别并影响最终成绩。尤其是在2026年这一关键节点&#xf…

2026/10/19 15:52:43 阅读更多 →
Canvas粒子系统实现动态星空:前端动画原理与性能优化实战

Canvas粒子系统实现动态星空:前端动画原理与性能优化实战

1. 项目概述:用代码绘制一片会呼吸的星空 最近在整理一些前端小项目时,又翻出了这个经典的“动态星空”效果。它不是什么复杂的3D引擎,只用最基础的HTML、CSS和JavaScript,就能在浏览器里创造出一片深邃、闪烁、缓缓移动的星空。这…

2026/10/20 10:07:08 阅读更多 →
Function Calling:大语言模型连接真实世界的核心机制与产品实践

Function Calling:大语言模型连接真实世界的核心机制与产品实践

1. 从面试官视角看 Function Calling:它到底是什么?最近在面试AI产品岗位,或者准备相关面试的朋友,可能都被一个问题问住过:“请解释一下什么是 Function Calling?” 这问题听起来挺技术,但作为…

2026/10/17 10:04:07 阅读更多 →

最新新闻

AI+Wireshark智能抓包:从过滤表达式到异常定位的排障实战

AI+Wireshark智能抓包:从过滤表达式到异常定位的排障实战

Wireshark 用了快十年,前几年我碰上问题,基本都是靠逮住一个包啃半天来定位。但这段时间我的工作习惯变了:AI 和 Wireshark 抓包放在一起之后,很多过去靠肉眼硬看才能发现的规律,秒级就能出来。这篇文章不是讲怎么装 W…

2026/10/20 16:30:14 阅读更多 →
GPIO驱动能力与输出摆率详解:信号质量、功耗与EMI的平衡秘诀

GPIO驱动能力与输出摆率详解:信号质量、功耗与EMI的平衡秘诀

你打开单片机厂商的图形化配置工具,看到一个引脚的下拉菜单里躺着“驱动能力”和“输出摆率”两个选项,旁边默认写着 Low 或 High。大部分人跟着感觉选了最大档,觉得“越大越稳”。我在项目里吃过亏之后才意识到,这两个参数是 GPI…

2026/10/20 16:30:14 阅读更多 →
基于单片机的智能窗帘控制系统设计与实现:从硬件到调试

基于单片机的智能窗帘控制系统设计与实现:从硬件到调试

先说结论:这类项目真正的难点不在单片机代码,而在机械装配和现场调试。很多人看到"基于单片机的智能窗帘控制系统设计"这个题目,第一反应是"单片机接个电机转起来就完事了",其实远没有这么简单。我自己做这套…

2026/10/20 16:30:14 阅读更多 →
增量Delaunay三角剖分C++实现:点定位、翻边与避坑指南

增量Delaunay三角剖分C++实现:点定位、翻边与避坑指南

简介:本资源面向计算几何与图形学方向的 C 开发者,提供一套增量 Delaunay 三角剖分算法的完整实现,可用于最大化三角网格中所有三角形的最小内角,改善网格质量。项目采用顾贤峰教授提出的「半边」数据结构组织拓扑关系&#xff0c…

2026/10/20 16:30:14 阅读更多 →
DSP28335 XINTF外扩SRAM完整指南:从时序配置到CMD段分配

DSP28335 XINTF外扩SRAM完整指南:从时序配置到CMD段分配

做DSP开发的人,迟早会撞上内存不够用的墙。28335虽然带浮点单元,可内部那块SARAM总共也就三十几K字,跑个FFT、存一组采集数据、塞个查找表,说满就满。这时候最顺手的解法就是走XINTF外扩SRAM。这个实验在普中DSP28335开发攻略里被…

2026/10/20 16:30:14 阅读更多 →
从Softmax到混淆矩阵:分类模型标签转换与可视化实战

从Softmax到混淆矩阵:分类模型标签转换与可视化实战

分类模型训练完之后,真正让你睡不着的往往不是loss降不降得下去,而是模型在验证集上到底把哪些类别搞混了。而要把这个问题看清楚,就绕不开一个基础动作:把模型最后一层算出来的softmax概率,转成真正能拿来跟标注做对比…

2026/10/20 16:29:13 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →