在kali上创建DVWA靶机实验

张开发
2026/4/16 15:26:39 15 分钟阅读

分享文章

在kali上创建DVWA靶机实验
实验原理与内容Web 漏洞靶场原理DVWADamn Vulnerable Web Application是一个故意设计存在多种常见 Web 安全漏洞的 PHP/MySQL 应用程序旨在为安全研究人员、开发人员和学生提供一个合法、可控的渗透测试与防护学习环境。其核心原理包括漏洞模拟机制DVWA 通过不同安全级别的代码实现如 low、medium、high、impossible展示同一功能在不同防护措施下的安全性差异帮助理解输入验证、输出编码、会话管理等安全控制的重要性。典型漏洞覆盖包含 SQL 注入、跨站脚本XSS、文件包含LFI/RFI、命令执行、CSRF、暴力破解等 OWASP Top 10 中的常见漏洞。扫描与防护对抗通过漏洞扫描工具如 Nikto、Dirb、Nmap可自动发现配置缺陷与潜在风险而通过 Web 服务器Apache安全配置、目录权限控制、响应头加固等手段可有效缓解部分风险体现“纵深防御”思想。信息泄露风险不当的目录权限、敏感文件暴露如 config.inc.php、php.ini会直接导致攻击者获取数据库凭证或系统配置是 Web 安全的基础防线。本实验通过“搭建 → 扫描 → 分析 → 修复”的闭环流程帮助学生建立从攻击视角发现漏洞、从防御视角实施加固的完整安全思维。任务1.1使用Nmap进行端口扫描NmapNetwork Mapper是一款开源、功能强大且广泛使用的网络发现与安全审计工具由 Gordon LyonFyodor开发。它不仅用于端口扫描还支持操作系统识别、服务版本探测、漏洞检测、网络映射等多种高级功能。bashnmap sS sV O localhost参数说明sSSYN 扫描半开放扫描用于探测开放端口。sV版本检测尝试识别服务版本信息。O操作系统指纹识别判断目标主机的操作系统类型。扫描结果如图所示。扫描结果解析目标主机信息扫描对象为本地主机 localhostIP127.0.0.1。主机处于在线状态响应延迟极低约 91 微秒说明是本地回环测试。端口与服务信息端口 80HTTP状态开放open服务Apache HTTP Server 2.4.66运行在 Debian 系统上含义Web 服务器正在运行可通过浏览器访问 http://localhost。版本号 2.4.66 是较新版本通常已修复常见漏洞但仍需关注配置安全如目录浏览、敏感文件暴露等。端口 3306MySQL状态开放open服务MySQL但未识别出具体版本显示为 mysql?含义MySQL 数据库服务正在运行且监听在本地端口。由于是本地连接攻击者无法从外网直接访问但若存在弱密码或远程访问配置则仍存在风险。mysql? 表示 Nmap 未能成功获取版本信息可能是防火墙限制、服务无响应或返回数据不完整。可使用 nmap scriptbanner 或 telnet localhost 3306 进一步确认 MySQL 版本。使用nmap scriptbanner 127.0.0.1查看mysql版本。使用telnet localhost 3306查看mysql版本。可知数据库类型MariaDBMySQL 的开源分支版本号11.8.6。尝试nmap的其它选项查看不同的输出结果。任务1.2使用Nikto进行Web漏洞扫描Nikto 是一款开源、功能强大的 Web 服务器漏洞扫描器由 Chris Sullo 开发基于 Perl 编写遵循 GPL 协议。它专注于自动检测 Web 服务器和 Web 应用中的安全配置错误、过时软件、危险文件及已知漏洞。nikto h http://localhost/dvwaNikto 扫描 DVWA 风险评估详情见下表风险类型具体影响ImpactDetails危害等级核心发现摘要信息泄露Information Disclosure攻击者可直接访问/dvwa/config/目录下载config.inc.php文件其中明文包含 数据库用户名、密码、主机地址导致数据库完全暴露。High配置目录开启目录浏览敏感凭证文件可被未授权下载。/dvwa/database/目录可浏览可能包含 SQL 脚本、备份文件如dvwa.sql泄露数据库结构、初始数据或测试用例。Medium–High数据库相关目录暴露辅助攻击者理解系统架构。/dvwa/tests/和/dvwa/docs/目录开启索引可能包含调试脚本、API 文档、单元测试代码暴露内部逻辑或未公开接口。Medium开发/测试目录未保护增加攻击面。安全头缺失Missing Security Headers缺少XFrameOptions允许页面被嵌入iframe可被用于 点击劫持Clickjacking诱使用户在不知情下执行操作如修改密码、删除账户。Medium缺少防点击劫持头部存在 UI 红ressing 风险。缺少XContentTypeOptions: nosniff浏览器可能对响应内容进行 MIME 嗅探将非 HTML 内容如上传的图片当作 HTML 执行触发 XSS。Medium缺少 MIME 类型保护可能放大 XSS 漏洞影响。敏感文件暴露Sensitive File Exposure.dockerignore文件可被访问虽不直接泄露密钥但可推断项目忽略的文件路径如.env,secrets/辅助路径猜测攻击。Low隐藏文件暴露提供项目结构线索。管理入口识别Admin Interface Exposure明确识别出/dvwa/login.php为登录页面虽非漏洞但为后续 暴力破解、凭证填充、CSRF 提供目标锚点。Info登录入口被自动识别便于攻击者定向测试。其中的漏洞缺少 XFrameOptions 安全头可能导致点击劫持Clickjacking攻击。攻击者可将网页嵌入到自己的 iframe 中诱导用户在不知情的情况下执行操作如点击按钮、提交表单等。而XContentTypeOptions: nosniff 缺失浏览器可能对响应内容进行 MIME 类型嗅探导致非 HTML 文件如上传的图片被当作 HTML 执行引发 XSS 攻击。以上两项安全头缺失的修复建议使用sudo nano /etc/apache2/sitesavailable/000default.conf 编辑Apache 虚拟主机配置参照如下添加相应内容VirtualHost :80 DocumentRoot /var/www/html/DVWA Directory /var/www/html/DVWA AllowOverride All Require all granted /Directory 安全头 Header always set XFrameOptions DENY Header always set XContentTypeOptions nosniff Header always set ContentSecurityPolicy defaultsrc self unsafeinline unsafeeval; /VirtualHost然后重启 Apachesudo systemctl restart apache2再使用Nikto进行Web漏洞扫描查看缺少 XFrameOptions 响应头的错误是否还存在。nikto h http://localhost/dvwa以上修改了Apache 的配置文件 /etc/apache2/sitesavailable/000default.conf 后成功修复了之前缺失的安全响应头问题如 XFrameOptions、XContentTypeOptions。其余的漏洞如目录浏览Directory Indexing被启用、敏感目录和文件暴露VirtualHost *:80 DocumentRoot /var/www/html Directory /var/www/html/dvwa AllowOverride All Require all granted Options -Indexes # 安全头 Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff Header always set Content-Security-Policy default-src self unsafe-inline unsafe-eval; # 禁止访问敏感目录 Directory /var/www/html/dvwa/config Options -Indexes Require all denied /Directory Directory /var/www/html/dvwa/database Options -Indexes Require all denied /Directory Directory /var/www/html/dvwa/tests Options -Indexes Require all denied /Directory Directory /var/www/html/dvwa/docs Options -Indexes Require all denied /Directory # 禁止访问敏感文件 Files php.ini Require all denied /Files Files .dockerignore Require all denied /Files Files robots.txt Require all denied /Files /Directory /VirtualHost再次扫描结果如下nikto h http://localhost/dvwa修复后Nikto 应不再报告Directory indexing foundConfiguration information may be available remotelyDatabase directory found但仍可能提示登录页面存在这是正常现象。任务1.3使用Dirb进行目录枚举dirbDirectory Bruteforcer是一款开源的 Web 目录和文件暴力扫描工具主要用于在渗透测试或安全审计中自动发现 Web 服务器上隐藏的、未链接的或未公开的目录与文件。dirb http://localhost/dvwadirb 的核心判断依据是 HTTP 状态码这几个是高频值200请求成功文件 / 目录存在且可访问302临时重定向比如未登录跳登录页404不存在dirb 默认不显示 404 结果403权限拒绝目录 / 文件存在但服务器禁止访问。从扫描结果可以看出PHP配置文件php.ini 返回 200 客户端可直接访问该文件属于敏感信息泄露风险核心风险就是任何访问该 URL 的客户端浏览器 / 爬虫 / 攻击者都能直接读取这个 PHP 核心配置文件的内容这在 Web 安全中属于典型的敏感信息泄露漏洞DVWA 中出现此情况是刻意设计的演练场景真实环境中必须禁止外部访问php.ini。使用浏览器访问http://localhost/dvwa/php.ini能够查看php.ini的内容。要禁止外部访问php.ini修改Apache配置文件000default.conf。通过 Apache 配置文件限制特定文件访问使用nano修改sudo nano /etc/apache2/sitesavailable/ 000default.conf 中添加Directory /var/www/html/dvwaFiles php.iniRequire all denied/FilesDirectory修改了Apache配置文件000default.conf之后再用dirb扫描可以看到php.ini的状态码为403禁止访问。通过以上的修改配置php.ini的状态码为403表示服务器禁止访问。再次使用浏览器访问http://localhost/dvwa/php.ini还能发现能够访问php.ini的内容是刚才的设置无效吗不是。浏览器还能访问php.ini其实是访问了浏览器缓存中的内容。需要清除Firefox的缓存点击Firefox菜单中的HIstory选择Clear resent history...菜单选中History复选框点击Clear按钮如图所示。在浏览器中再次访问http://localhost/dvwa/php.ini此时不能看到php.ini的内容。使用dirb http://localhost/dvwa扫描文件和目录的结果中http://localhost/dvwa/robots.txt的状态码为200在浏览器中能够robots.txt的内容如下图所示。请进行相关设置使得浏览器不能访问robots.txt。注意设置完成后应清除浏览器缓存然后再访问http://localhost/dvwa/robots.txt。设置正确后访问http://localhost/dvwa/robots.txt应该出现信息“Forbidden”。或是在kali终端使用curl命令连接应返回HTTP的状态码为403如下图所示。以上的搞定后在浏览器输入http://127.0.0.1/dvwa/setup.php初始化数据库这样就可以了如果重启虚拟机后访问dvwa出现空白可能是权限不够chmod 755 /var/www/html/dvwa/configchmod 644 /var/www/html/dvwa/config/config.inc.php

更多文章