DVWA 靶场之 Command Injection(命令执行)middlehigh 级别绕过技巧解析

张开发
2026/4/21 3:37:29 15 分钟阅读

分享文章

DVWA 靶场之 Command Injection(命令执行)middlehigh 级别绕过技巧解析
1. DVWA命令注入漏洞基础认知第一次接触DVWA靶场的命令注入模块时我对着那个简单的ping测试界面研究了半天。这看起来就是个普通的网络诊断工具怎么就成了安全漏洞的温床后来才发现正是这种看似无害的功能往往隐藏着最危险的安全隐患。命令注入Command Injection的本质是攻击者通过构造特殊输入让系统执行非预期的命令。就像你让助手去倒杯水结果他顺便把你保险箱密码也告诉了别人。在Web安全领域这属于高危漏洞攻击者利用它可以直接在服务器上执行操作系统命令。DVWA靶场贴心地为我们设置了四个难度等级Low完全不设防的裸奔状态Medium基础黑名单过滤High增强版黑名单Impossible完美防御方案今天我们要重点攻克的是Medium和High这两个中高级别的挑战。它们采用了黑名单过滤机制但都存在可以被巧妙绕过的缺陷。我在实际渗透测试中发现很多企业的防护措施和这两个级别非常相似所以掌握这些绕过技巧特别实用。2. Medium级别的黑名单绕过实战先来看Medium级别的源码关键部分是这个黑名单设置$substitutions array( , ; , );2.1 黑名单机制的致命缺陷这个过滤逻辑简单粗暴把和;替换为空字符串。但就像只锁前门却留着后窗大开这种防护至少有三大漏洞过滤范围不全只拦截了和;其他连接符如、|、||都畅通无阻替换策略简单直接字符串替换没有递归处理导致;这样的变形可以绕过缺乏输入校验没有对输入格式做任何限制2.2 实测可用的五种绕过姿势在我的渗透测试笔记里记录了这些有效payload单符绕过127.0.0.1 ipconfig在Windows中表示异步执行前一条命令无论成功与否都会执行后面的命令管道符绕过127.0.0.1 | dir|会将前一个命令的输出作为后一个命令的输入逻辑或绕过fakecommand || whoami当前面的命令执行失败时||会触发后续命令执行变形拼接法127.0.0.1 ; ifconfig经过替换后;会变成依然有效换行符注入127.0.0.1%0aid%0a是URL编码的换行符在某些系统中会被解析为命令分隔符特别提醒在Linux环境下记得命令要换成ifconfig或者ls -la这类系统命令。我在第一次测试时傻傻地用Windows命令结果当然是什么都没发生。3. High级别的极致绕过技巧High级别的源码看起来防护严密多了$substitutions array( , ; , | , // 注意这个空格 - , $ , ( , ) , , || , );3.1 开发者犯的关键错误细心的你可能已经发现了那个有趣的细节| 。开发者本意是想过滤管道符但不小心在|后面加了个空格这就导致输入|带空格会被过滤但输入纯|则畅通无阻这种错误在紧张的项目开发中其实很常见。我就遇到过不少类似案例比如过滤select但没过滤SELECT大小写绕过过滤script但没过滤script 空格绕过过滤../但没过滤..\路径分隔符绕过3.2 高级绕过方案实测经过反复测试这些方法在High级别依然有效无空格管道符127.0.0.1|uname -a这是最直接的绕过方式完美利用过滤规则缺陷变量拼接法127.0.0.1;awhoami;$a通过变量间接执行不过这个需要系统支持$变量编码混淆法127.0.0.1$(printf \x2f\x62\x69\x6e\x2f\x73\x68)使用十六进制编码绕过字符串检测通配符技巧127.0.0.1|/???/??t? /???/p??s??这个会匹配到/bin/cat /etc/passwd适合Linux系统在最近的一次渗透测试中我就用类似的通配符技巧成功绕过了某电商网站的防护。当时他们的WAF规则配置不当把cat、ls等命令都加入了黑名单但没想到用/???/??t?这种方式依然可以执行命令。4. 防御方案深度解析4.1 黑名单为什么总被绕过从我多年的安全运维经验来看黑名单机制主要有这些先天不足无法穷尽所有危险字符操作系统支持的连接符、分隔符形式太多上下文相关性某些字符在特定位置才危险但黑名单会无差别拦截编码变体问题像十六进制、Unicode、Base64等编码方式可以轻松绕过4.2 企业级防护方案建议根据OWASP推荐和我的实战经验这些防护措施更可靠白名单校验if (!preg_match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/, $input)) { die(Invalid IP format); }参数化执行$cmd [ping, -c, 4, $validated_ip]; shell_exec($cmd);最小权限原则运行Web服务的账户应该严格限制权限比如# 创建专用账户 useradd -r -s /bin/false webping # 设置sudo权限 echo webping ALL(root) NOPASSWD: /bin/ping /etc/sudoers多层级防御前端输入格式校验中间层命令黑名单白名单后端执行环境沙箱化记得有次给某银行做安全加固我们采用了Docker容器来隔离每个Web服务即使攻击者成功执行命令也只能在受限的容器环境中活动无法影响宿主系统。这种深度防御的思路效果非常好。5. 从靶场到实战的思考在DVWA上练习时我习惯记录每个payload的成功条件和限制因素。比如攻击手法适用系统依赖条件检测难度管道符跨平台需要命令分隔符支持中等反引号执行Linux需要启用命令替换容易环境变量注入Linux需要特定变量未被清空困难通配符技巧Linux依赖系统命令路径中等在真实渗透测试中我通常会先用127.0.0.1; sleep 5这样的延时命令来检测是否存在漏洞因为这种方式最不容易触发安全警报。确认存在漏洞后再逐步尝试信息收集命令最后才是实质性的操作。有个有趣的案例某次测试中发现目标系统过滤了所有特殊字符但允许换行符。最后通过%0a分隔成功执行了命令这再次证明安全防护不能有任何疏漏。

更多文章