当前位置: 首页 > news >正文

CTF靶场实战:当cat被ban,如何用/bin/base64和通配符绕过RCE的字符黑名单?

CTF靶场实战:当cat被禁用时如何用base64与通配符突破字符限制

在CTF竞赛中,命令注入类题目常常设置各种字符过滤规则来增加挑战难度。最近遇到一个有趣的场景:目标系统禁止了绝大多数字母和符号,仅允许使用数字、小写字母a和问号。这种情况下,传统的cat、ls等命令完全无法使用,需要寻找更巧妙的绕过方式。

1. 理解题目限制与突破口

首先我们需要明确题目给出的过滤条件:

  • 允许字符:数字0-9、小写字母a、问号?
  • 禁止字符:b-z的所有字母、A-Z大写字母以及大部分特殊符号

这种限制下,我们面临两个主要问题:

  1. 无法直接输入常见命令如cat、ls、head等
  2. 路径和参数传递也受到严格限制

但仔细观察会发现几个关键突破口:

  • 问号(?)在Linux shell中可以作为通配符,匹配任意单个字符
  • 系统路径分隔符(/)未被过滤
  • 小写字母a可用,这是定位特定命令的关键

提示:在受限环境中,/bin目录下包含许多可能被忽略的实用程序,它们往往比常见命令有更复杂的名称。

2. 定位替代命令:从base64入手

当cat不可用时,我们需要寻找其他能够读取文件内容的系统命令。通过分析/bin目录下的程序,发现几个潜在候选:

命令路径功能描述
/bin/base64对输入进行base64编码/解码
/bin/od以八进制格式输出文件内容
/bin/xxd十六进制转储工具
/bin/rev反转文件内容

其中,/bin/base64特别适合我们的需求,因为:

  1. 名称中包含允许的字母a
  2. 可以将文件内容完整输出(虽然经过编码)
  3. 输出结果容易解码还原

3. 通配符精确匹配技巧

要使用base64命令,我们需要在不直接输入完整路径的情况下定位它。这时问号通配符就派上用场了。

/bin/base64的路径结构分析:

/ b i n / b a s e 6 4 1 2 3 4 5 6 7 8 9 10

我们可以用问号代替每个不确定的字符:

/???/?a??64

这样匹配的原理是:

  • /???/ 匹配/bin/目录(因为/bin是4字符)
  • ?a??64 匹配base64(b被过滤,只能用a定位)

在终端测试这个模式:

echo /???/?a??64

典型输出会是:

/bin/base64

4. 构造完整Payload并解码

现在我们可以组合出完整的文件读取方案:

  1. 使用通配符定位base64命令
  2. 同样方法定位目标文件(假设为/flag)
  3. 将base64编码结果解码获取原始内容

具体Payload构造:

/???/?a??64 /??a?

解释:

  • 第一部分:/???/?a??64 → /bin/base64
  • 第二部分:/??a? → /flag(假设flag文件名为4字符)

执行后输出是flag文件的base64编码内容,只需简单解码即可:

import base64 encoded = "VGhlIGZsYWcgaXM6IENURntiYXNlNjRfY2FuX3NhdmVfeW91fQo=" print(base64.b64decode(encoded).decode())

5. 其他可能的变体与技巧

在实际CTF中,题目设置可能有变化,这里提供几个应对策略:

5.1 当文件名长度未知时

如果不知道flag文件的确切字符数,可以尝试:

/???/?a??64 /????? # 尝试5字符文件名 /???/?a??64 /?????? # 尝试6字符文件名

5.2 使用od命令的替代方案

如果base64也被过滤,可以尝试od命令:

/???/?d /??a?

5.3 目录遍历技巧

当flag不在根目录时,可以尝试:

/???/?a??64 /???/??a? # 匹配二级目录

6. 防御视角:如何防止此类绕过

从安全开发角度,要完全防止命令注入,建议:

  1. 使用白名单而非黑名单进行输入验证
  2. 尽量避免将用户输入直接拼接为系统命令
  3. 使用专门的命令执行函数而非shell
  4. 对必须执行的命令进行完整路径限制

例如在PHP中更安全的做法:

$allowed_commands = ['/usr/bin/safe_command']; if (in_array($user_input, $allowed_commands)) { system($user_input . ' --safe-flag'); }

在CTF比赛中遇到这类限制时,关键是要保持创造性思维,深入了解系统提供的各种工具及其路径命名规律。通过组合有限的可用字符和系统特性,往往能找到意想不到的解决方案。

http://www.cnnetsun.cn/news/1529777.html

相关文章:

  • Gerrit 代码审查实战指南:从配置到高效协作
  • AT24C02跨页写入异常分析与高效解决方案
  • 文墨共鸣新手教程:5分钟快速部署,体验AI水墨风语义分析
  • Unrpyc:专业Ren‘Py脚本反编译工具完全指南
  • Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill实战:用Chainlit打造个人IDE助手
  • PyTorch 2.9镜像保姆教程:快速部署与基础功能体验
  • 不只是仿真:用HFSS分析Dipole天线参数,探究长度与间距对性能的真实影响
  • 从订餐流程到并发编程:Petri网中的‘库所’与‘变迁’到底在模拟什么?
  • PX4仿真环境搭建全流程:解决roslaunch indoor1.launch报错及Gazebo崩溃问题
  • 别再踩坑了!手把手教你搞定vllm、nccl、cuda和python的版本匹配(附版本对照表)
  • 工业质检新突破:如何用GLAD扩散模型实现高精度无监督异常检测(附MVTec-AD实测)
  • 贪心-摆动序列、不重叠字串数量
  • MATPOWER技术实践指南:从基础操作到性能调优的进阶之路
  • 实时交易系统架构设计:从事件驱动到向量化框架的终极指南
  • 别再只看电流了!手把手教你用TEC性能曲线搞定激光二极管恒温器设计
  • MaximWire库详解:DS18B20在nRF52840上的高可靠1-Wire实现
  • Kubernetes集群管理终极指南:使用kubectx和kubens高效切换上下文与命名空间
  • 终极指南:如何利用MMKV在电商应用中实现高并发存储优化
  • 星露谷物语农场规划器创新架构与实战指南:从布局困境到田园梦想的转型之路
  • JADX深度解析:Android应用反编译的专业实践指南
  • nli-distilroberta-base实际作品展示:教育题库中500+逻辑推理题自动标注效果
  • iOS推送调试效率提升工具:SmartPush全面解析与实战指南
  • gte-base-zh模型安全与隐私考虑:数据脱敏与联邦学习初探
  • Icarus Verilog完全指南:从零开始学习开源Verilog仿真工具
  • 终极指南:如何用 tf-quant-finance 实现 Hull-White 模型的百慕大式互换权定价
  • MedGemma-X新手必看:5分钟学会用AI分析X光片,提升阅片效率
  • Nunchaku-flux-1-dev模型精调:STM32F103C8T6硬件加速方案
  • SDMatte跨平台部署测试:在WSL2中的Ubuntu环境运行
  • 避坑指南:用conda虚拟环境搞定mujoco_py 2.0的GL/osmesa.h缺失问题
  • 避开Unity动态合批的坑:为什么你的Dynamic Batching不生效?