当前位置: 首页 > 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.jsqmd.com/news/594730/

相关文章:

  • 高效制作IO通道测试表:从位号表到VLOOKUP函数实战
  • 作品被篡改署名?三步维权指南
  • 全栈开发者工具链:OpenClaw+Qwen3.5-9B-AWQ-4bit辅助前端调试
  • OpenClaw隐私保护方案:Qwen3.5-9B本地化替代云端AI服务
  • 你的ESP32项目还缺个BGM?手把手教你做个可切换歌单的迷你音乐播放器
  • 蓝桥杯一周突破---day1【贪心】
  • 解构 Claude Code 的“上下文经济学”
  • 手把手用Multisim仿真BJT三种工作模式:从截止区到饱和区的实战观察
  • OpenClaw多模型协作方案:Qwen2.5-VL-7B与纯文本模型任务分工实践
  • RK3588上跑通YOLOv5实时检测:从摄像头编号获取到Python脚本调试的全流程实录
  • Python高效处理字符串去重的5种实用技巧
  • 如何分析AWR中的SGA建议_Buffer Cache Advisory与内存扩容指导
  • 房产线上获客平台究竟有多牛?
  • OpenClaw配置备份:千问3.5-9B环境快速迁移方案
  • Java学习笔记_Day21(Set)
  • OpenClaw故障排查大全:Qwen3.5-9B-AWQ-4bit接入常见报错解决
  • OpenClaw创意生成:用Qwen2.5-VL-7B自动设计社交媒体海报
  • 30分钟搭建个人AI助手:OpenClaw+千问3.5-35B-A3B-FP8极速体验
  • OpenClaw备份策略:千问3.5-35B-A3B-FP8自动化数据同步方案
  • 大模型优化:CUDA调度波次(Wave)中的负载均衡与资源利用
  • TimerThree硬件定时器库:16位定时器跨平台实战指南
  • 应急响应靶机练习-Web2
  • 2026年比较好的工业机器人位移传感器厂家精选合集 - 品牌宣传支持者
  • 东莞市SEO优化对网站收录有何影响_东莞市SEO优化的常见问题有哪些
  • 3D Gaussian Splatting环境配置避坑指南:从源码下载到可视化全流程
  • OpenClaw压力测试:千问3.5-9B连续执行100个任务的稳定性
  • 新手入门无人机飞控,别再傻傻分不清PIXHAWK、PX4和APM了
  • 如何避免MongoDB GridFS读取大文件时内存溢出
  • Go 网络编程超时控制方案
  • SQL分组Group By