Linux通配符?的另类玩法:手把手教你绕过RCE命令过滤(附靶场实战)
Linux通配符?的另类安全应用从基础匹配到实战突破在Linux系统中通配符?通常被视为文件匹配的辅助工具但它在安全领域的潜力远不止于此。当传统命令执行路径被封锁时这个看似简单的符号能成为突破防线的一把钥匙。本文将带你深入探索?通配符的非传统用法从基础原理到实战应用最后讨论如何构建更安全的系统环境。1. Linux通配符基础再认识通配符?在Linux中代表匹配任意单个字符这个特性在文件操作中极为常见。比如ls file?.txt会列出所有以file开头后接任意一个字符再以.txt结尾的文件。但它的真正威力在于能够模糊匹配系统路径中的关键命令。当我们在终端输入/???/?a?时系统会尝试匹配所有符合该模式的可执行文件。具体来说第一个?匹配/bin中的b第二个?匹配i第三个?匹配n第四个?匹配c或t第五个?匹配a第六个?匹配t或r这种匹配方式可以绕过许多基于字符过滤的安全机制因为它不直接暴露完整的命令路径。在受限环境中了解哪些关键命令可以通过这种模式匹配到至关重要。以下是一些常见命令的匹配模式命令路径通配符模式可能匹配结果/bin/cat/???/?a?匹配cat和tar/bin/base64/???/?a??64唯一匹配base64/bin/tar/???/?a?匹配cat和tar2. 受限环境下的通配符突破技术当面对严格过滤的RCE(远程命令执行)环境时传统的命令注入方法往往失效。假设一个Web应用过滤了所有字母、数字和大多数特殊字符只允许有限的符号如/、?和空格这时通配符技巧就显示出独特价值。考虑以下过滤规则/[b-zA-Z_#%^*:{}\-\|;\[\]]/这个正则表达式过滤了几乎所有可打印字符但留下了?这个通配符。在这种情况下我们可以构造如下payload/?cmd/???/?a??64 /??a?这个payload会被解析为/???/?a??64匹配/bin/base64/??a?匹配/flag(假设目标文件名为flag)最终执行/bin/base64 /flag以base64编码形式读取flag文件内容这种技术的核心优势在于完全规避字符过滤不包含任何被过滤的字符精确匹配关键命令通过模式组合锁定特定系统工具适应多种环境不依赖特定语言或框架特性3. 靶场实战HelloCTF Level 6突破让我们通过HelloCTF Level 6靶场来实际应用这一技术。该关卡模拟了一个严格过滤的RCE环境目标是通过构造合适的payload读取flag文件。步骤1分析过滤规则首先确认过滤规则禁止了大多数字符特别是完整的命令路径。这意味着直接使用/bin/cat或/bin/base64会被拦截。步骤2枚举可用命令在本地终端测试可能的通配符组合echo /???/?a? # 输出: /bin/cat /bin/tar echo /???/?a??64 # 输出: /bin/base64步骤3构造payload根据测试结果我们有两种主要选择使用cat命令?cmd/???/?a? /??a? # 等效于: /bin/cat /flag使用base64命令更隐蔽?cmd/???/?a??64 /??a? # 等效于: /bin/base64 /flag步骤4获取flag提交第二个payload后系统返回base64编码的flag内容解码后即可获得完整flagNSSCTF{ac12efd7-09f9-4bf2-af1d-e0c145a5d35a}这个实战案例展示了通配符技巧在严格过滤环境下的有效性。关键在于准确理解?的匹配行为知道系统中有哪些命令可以通过特定模式匹配到组合使用多个通配符模式达到目的4. 防御通配符滥用策略了解了攻击方法后作为系统管理员或开发者如何防范这种技巧呢以下是一些有效的防御措施4.1 命令执行白名单最彻底的方法是只允许执行预先批准的少数命令。例如ALLOWED_COMMANDS [ls, grep, find] if command not in ALLOWED_COMMANDS: raise PermissionError(Command not allowed)4.2 通配符扩展限制在执行用户提供的命令前先进行通配符扩展检查# 检查命令是否包含通配符 if [[ $cmd *?* ]]; then echo Wildcards not allowed exit 1 fi4.3 多层防御策略组合使用多种安全措施输入验证过滤特殊字符最小权限原则使用低权限用户执行命令沙箱环境在隔离容器中运行不受信任代码日志监控记录所有命令执行尝试4.4 文件系统加固将敏感命令移动到非标准路径使用文件系统ACL限制关键命令的执行定期审计系统命令的权限设置在实际项目中我曾遇到一个案例即使采用了命令过滤攻击者还是通过/???/?a?模式成功执行了/bin/sh。解决方案是将/bin/sh重命名为更复杂的名称并同时实施上述多层防御最终有效阻断了这类攻击。