当前位置: 首页 > news >正文

在kali上创建DVWA靶机实验

实验原理与内容

Web 漏洞靶场原理:DVWA(Damn 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进行端口扫描

Nmap(Network Mapper)是一款开源、功能强大且广泛使用的网络发现与安全审计工具,由 Gordon Lyon(Fyodor)开发。它不仅用于端口扫描,还支持操作系统识别、服务版本探测、漏洞检测、网络映射等多种高级功能。

bash

nmap sS sV O localhost

参数说明:

sS:SYN 扫描(半开放扫描),用于探测开放端口。

sV:版本检测,尝试识别服务版本信息。

O:操作系统指纹识别,判断目标主机的操作系统类型。

扫描结果如图所示。

扫描结果解析:

  1. 目标主机信息
  2. 扫描对象为本地主机 localhost(IP:127.0.0.1)。
  3. 主机处于在线状态,响应延迟极低(约 91 微秒),说明是本地回环测试。
  4. 端口与服务信息

端口 80(HTTP)

  1. 状态:开放(open)
  2. 服务:Apache HTTP Server 2.4.66(运行在 Debian 系统上)
  3. 含义:
    1. Web 服务器正在运行,可通过浏览器访问 http://localhost。
    2. 版本号 2.4.66 是较新版本,通常已修复常见漏洞,但仍需关注配置安全(如目录浏览、敏感文件暴露等)。

端口 3306(MySQL)

  1. 状态:开放(open)
  2. 服务:MySQL(但未识别出具体版本,显示为 mysql?)
  3. 含义:
    1. MySQL 数据库服务正在运行,且监听在本地端口。
    2. 由于是本地连接,攻击者无法从外网直接访问,但若存在弱密码或远程访问配置,则仍存在风险。
    3. mysql? 表示 Nmap 未能成功获取版本信息,可能是防火墙限制、服务无响应或返回数据不完整。

可使用 nmap script=banner 或 telnet localhost 3306 进一步确认 MySQL 版本。

使用nmap script=banner 127.0.0.1查看mysql版本。

使用telnet localhost 3306查看mysql版本。

可知,数据库类型:MariaDB(MySQL 的开源分支),版本号:11.8.6。

尝试nmap的其它选项,查看不同的输出结果。

任务1.2使用Nikto进行Web漏洞扫描

Nikto 是一款开源、功能强大的 Web 服务器漏洞扫描器,由 Chris Sullo 开发,基于 Perl 编写,遵循 GPL 协议。它专注于自动检测 Web 服务器和 Web 应用中的安全配置错误、过时软件、危险文件及已知漏洞。

nikto h http://localhost/dvwa

Nikto 扫描 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>

然后重启 Apache:

sudo 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 found

Configuration information may be available remotely

Database directory found

但仍可能提示:登录页面存在,这是正常现象。

任务1.3使用Dirb进行目录枚举

dirb(Directory Bruteforcer)是一款开源的 Web 目录和文件暴力扫描工具,主要用于在渗透测试或安全审计中自动发现 Web 服务器上隐藏的、未链接的或未公开的目录与文件。

dirb http://localhost/dvwa

dirb 的核心判断依据是 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/dvwa">

<Files "php.ini">

Require all denied

</Files>

<Directory

修改了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/config

chmod 644 /var/www/html/dvwa/config/config.inc.php

http://www.cnnetsun.cn/news/1713521.html

相关文章:

  • 嵌入式开发者必看:GitHub高星项目实战解析
  • SEO_资深运营揭秘,长期稳定排名的SEO策略介绍
  • OpenClaw极限测试:Qwen3-14B镜像连续处理1000份文档报告
  • 运放稳定性补偿实战:从Riso到双反馈,如何为你的MOSFET驱动电路‘降噪’
  • 万物皆可skill
  • 为什么顶尖公司的工程师越来越难追上?
  • 零代码自动化:OpenClaw+Qwen3-14B可视化规则配置
  • 避坑指南:ESP32-S3驱动ILI9488屏显示OV2640画面,这些时序和内存问题你遇到了吗?
  • SAP增强中多线程STARTING NEW TASK实现BAPI事务提交的实践指南
  • 逻辑器件设计中的总线保持(Bus Hold)功能解析与实战案例
  • 告别手动抄表!用Python+ADS一键导出TwinCAT3数组到Excel表格
  • 避开网络限制:用Docker在本地或内网服务器部署Gemini Pro Chat的完整指南
  • 微信小程序地图气泡实战:从callout到customCallout的性能与兼容性深度解析
  • 手把手教你为FAST-LIVO2配置海康相机:MVS SDK封装、时间戳同步与catkin_make编译要点
  • 绘画人必备!PureRef+Snipaste组合使用技巧,让你的参考图管理效率翻倍
  • 免费域名会不会对网站SEO造成影响_免费域名对网站性能和访问速度有影响吗
  • 形式验证实战:5个降低状态空间复杂度的黑科技(附内存控制器案例)
  • 智能能耗管理系统如何助力轨道交通实现绿色低碳运营
  • 保姆级教程:用Google Antigravity和Gemini 3 Pro,5分钟搞定一个加密货币看板React应用
  • Python实战:用ARIMA-LSTM混合模型预测股票价格(附完整代码)
  • 避坑指南:用ModelScope玩转speech_campplus_sv声纹识别,别再踩‘model_cfg‘这个坑了
  • 全网最透彻:JWT Token 到底是什么?原理+结构+流程图+面试考点
  • 嵌入式开源项目解析与工程化实践
  • 手机端大模型部署实战:Ollama、llama.cpp、vLLM 的选型与避坑指南
  • OpenClaw数据预处理:优化输入图片提升Kimi-VL-A3B-Thinking识别率
  • 【逆向实战】Unity3D+il2cpp手游反编译与逻辑修改全流程解析【IDA Pro+il2CppDumper】
  • 救命!这些毕设太好抄了,3000+毕设案例推荐第1019期
  • 单表数据量过大查询速度慢解决方案
  • Python + pytest 模块导入问题的标准解决方案
  • 华硕rog 硬件顶流