2026-10-20 11:26:28
DVWA Command Injection 攻略
在DVWA(Damn Vulnerable Web Application)中,Command Injection(命令注入)是一个重要的安全漏洞,它允许攻击者通过输入恶意命令来操控服务器。以下是对DVWA中Command Injection漏洞的详细攻略,包括初级、中级、高级以及完全防御的分析。
一、初级
在初级级别,服务器通过判断操作系统执行不同的ping命令,但对ip参数并未做任何过滤,导致了严重的命令注入漏洞。
漏洞分析:
源代码中,服务器根据操作系统类型执行ping命令。
Windows系统使用ping命令不带参数,发送无限数量的ICMP echo请求。
Linux系统使用ping -c 4命令,发送4个ICMP echo请求。
对ip参数未做过滤,允许用户输入任意内容。
利用方法:
使用&&或;来执行多条命令。
例如,输入127.0.0.1 && whoami可以获取当前系统用户。
二、中级
在中级级别,服务器对ip参数做了一定过滤,即把&&、;等字符删除,但依旧存在安全问题。
漏洞分析:
源代码中,服务器设置了黑名单,删除&&、;等字符。
采用了黑名单机制,但黑名单往往存在局限性,容易被绕过。
利用方法:
使用&或|等连接符绕过黑名单。
例如,输入127.0.0.1 & whoami可以获取当前系统用户。
三、高级
在高级级别,服务器进一步完善了黑名单,但由于黑名单机制的局限性,依然可以绕过。
漏洞分析:
源代码中,服务器设置了更复杂的黑名单,包括&、;、| (注意这里|后有一个空格)、-、$、(、)、`等字符。
但黑名单中|后有一个空格,导致|本身未被过滤,成为“漏网之鱼”。
利用方法:
使用|连接符绕过黑名单。
例如,输入127.0.0.1|whoami可以获取当前系统用户。
四、完全防御
为了完全防御命令注入漏洞,需要采取更严格的输入验证和过滤措施。
添加Anti-CSRF令牌:确保用户请求是经过授权的,防止跨站点请求伪造攻击。
输入验证:获取用户输入后,进行严格的验证和过滤。
删除反斜杠($target = stripslashes($target);)。
将IP地址分成4个八位组,并检查每个八位组是否是整数。
如果所有八位组都是整数且总数为4,则重新组合IP地址并执行ping命令。
如果输入的IP地址无效,则显示错误信息。
使用白名单:只允许特定的、已知安全的输入通过。
限制命令执行:尽量避免在应用程序中执行系统命令,特别是在用户输入可控的情况下。
五、总结
DVWA中的Command Injection漏洞演示了命令注入攻击的危害和防御方法。通过仔细分析源代码和漏洞原理,我们可以发现并利用漏洞,但更重要的是学会如何防御这类攻击。在实际开发中,应始终遵循最佳安全实践,确保应用程序的安全性。
以下是相关代码段的图片展示:



这些图片展示了不同级别下源代码的差异和漏洞利用的可能性。通过对比和分析,我们可以更好地理解命令注入漏洞的防御策略。