Kali Linux下DVWA靶场搭建与Web安全漏洞实战入门指南

发布时间:2026/7/3 21:08:00
Kali Linux下DVWA靶场搭建与Web安全漏洞实战入门指南 1. 项目概述为什么从DVWA开始你的渗透测试之旅如果你刚接触网络安全或者对Kali Linux这个“黑客神器”充满好奇却不知道从何下手那么从搭建一个本地漏洞靶场开始绝对是最高效、最安全的选择。而DVWA正是这个领域里公认的“新手村”。这个项目标题“小白学KALI轻松搭建DVWA网站漏洞靶场”精准地指向了无数安全爱好者的第一个实操门槛——如何在自己的电脑上快速、无风险地复现一个充满漏洞的网站环境用于学习和练习。为什么是DVWA它的全称是Damn Vulnerable Web Application直译过来就是“该死的脆弱Web应用”。这个名字就说明了它的核心价值它故意设计得漏洞百出从简单的SQL注入、跨站脚本到文件上传、命令执行涵盖了Web安全中最常见、最经典的漏洞类型。更重要的是它允许你自由调整安全等级从“毫无防护”到“有基础防护”让你能清晰地看到不同防御措施下攻击手法需要如何调整和绕过。对于初学者而言这比直接去研究一个真实的、复杂的、且违法的网站要友好和安全得多。而Kali Linux则是进行这一切操作的“手术台”。它预装了海量的安全工具从信息收集、漏洞扫描到渗透利用一应俱全。很多人觉得Kali很神秘甚至有点畏惧但其实它的本质就是一个专门为安全测试优化的Linux发行版。通过搭建DVWA这个具体任务你能亲手操作Kali理解它的包管理、服务控制、网络配置等基础操作把抽象的工具箱变成解决具体问题的趁手兵器。这个过程能帮你快速建立信心从“看教程”过渡到“自己动手”为后续更深入的学习打下坚实的实操基础。2. 环境准备在Kali Linux上配置LAMP服务栈在开始下载DVWA之前我们必须先为它准备好一个“家”——一个能够运行PHP网站的环境。在Linux世界里最经典的组合就是LAMPLinux操作系统我们用的是Kali、ApacheWeb服务器、MySQL数据库在Kali的新版本中通常是MariaDB和PHP。Kali Linux默认已经安装了许多组件但为了确保DVWA能完美运行我们需要进行系统性的检查和配置。2.1 更新系统与安装核心组件首先打开你的Kali Linux终端。无论你是实体机安装、虚拟机运行还是使用了WSL第一步永远是确保系统是最新的。这能避免很多因软件包版本过旧导致的兼容性问题。sudo apt update sudo apt upgrade -y这条命令做了两件事apt update刷新软件包源列表获取最新的版本信息apt upgrade -y则自动升级所有可升级的软件包。-y参数表示自动确认省去手动输入的麻烦。更新完成后我们开始安装LAMP的核心组件。sudo apt install apache2 mariadb-server mariadb-client php php-mysql libapache2-mod-php php-gd php-curl -y这里我们详细拆解一下每个包的作用apache2: Web服务器负责处理HTTP请求将我们的网站内容呈现给浏览器。mariadb-servermariadb-client: 数据库服务器和客户端。DVWA需要用数据库来存储用户数据、登录会话等信息。MariaDB是MySQL的一个流行分支在Kali中已作为默认替代。php: 服务器端脚本语言DVWA本身是由PHP编写的。php-mysql: 让PHP能够连接和操作MySQL/MariaDB数据库的扩展模块没有它DVWA无法与数据库通信。libapache2-mod-php: Apache的PHP模块确保Apache能解析和执行PHP代码。php-gd: PHP的图像处理库某些功能可能会用到。php-curl: PHP的cURL库用于处理URL请求在一些高级模块中可能会被调用。安装完成后我们需要启动Apache和MariaDB服务并设置它们开机自启。sudo systemctl start apache2 sudo systemctl enable apache2 sudo systemctl start mariadb sudo systemctl enable mariadb你可以使用sudo systemctl status apache2和sudo systemctl status mariadb来检查服务是否正在活跃运行。看到绿色的“active (running)”字样就说明成功了。2.2 安全配置MariaDB数据库刚安装好的MariaDB root用户是没有密码的这存在安全风险。我们需要运行一个安全配置脚本。sudo mysql_secure_installation运行后脚本会引导你完成一系列设置输入当前root密码直接按回车因为初始密码为空。设置root密码输入Y然后为数据库的root用户设置一个强密码。请务必记住这个密码后续配置DVWA时会用到。建议不要使用过于简单的密码。移除匿名用户输入Y。匿名用户允许任何人无需密码登录数据库必须移除。禁止root远程登录输入Y。这可以防止从网络其他位置用root身份登录数据库增加安全性。移除测试数据库输入Y。默认的test数据库可以被任何人访问应该移除。重新加载权限表输入Y。使上述所有安全更改立即生效。实操心得很多新手在这一步设置的数据库密码过后就忘记了导致后续配置DVWA时连接失败。建议你用一个文本文件临时记录一下这个密码或者使用一个你绝对不会忘记的、专用于本地测试的密码。毕竟这只是本地靶场安全性和易记性需要做个平衡。2.3 为DVWA创建专用数据库和用户虽然可以用root用户但最佳实践是为每个应用创建独立的数据库和用户权限最小化。我们登录MariaDB来操作sudo mysql -u root -p输入你刚才设置的root密码。成功后会进入MariaDB的命令行界面提示符变为MariaDB [(none)]。然后依次执行以下SQL命令CREATE DATABASE dvwa; CREATE USER dvwa_userlocalhost IDENTIFIED BY pssw0rd; GRANT ALL PRIVILEGES ON dvwa.* TO dvwa_userlocalhost; FLUSH PRIVILEGES; EXIT;我们来解释一下CREATE DATABASE dvwa;创建了一个名为dvwa的数据库。CREATE USER dvwa_userlocalhost IDENTIFIED BY pssw0rd;创建了一个用户名为dvwa_user且只能从本机localhost连接的用户密码设置为pssw0rd。你可以将pssw0rd改为更复杂的密码。GRANT ALL PRIVILEGES ON dvwa.* TO dvwa_userlocalhost;将dvwa数据库的所有权限ALL PRIVILEGES授予给dvwa_user用户。FLUSH PRIVILEGES;立即刷新权限使授权生效。EXIT;退出MariaDB命令行。3. 获取与部署DVWA靶场源码环境准备好了现在可以把“房客”——DVWA程序请进来了。我们需要从官方或可靠的源获取其源代码。3.1 下载DVWA最新版本最推荐的方式是使用Git从官方仓库克隆这样可以确保获得最新版本也便于后续更新。cd /var/www/html sudo git clone https://github.com/digininja/DVWA.git这条命令将DVWA的源代码克隆到了Apache的默认网站根目录/var/www/html下的DVWA文件夹中。如果网络较慢或Git失败你也可以从其GitHub发布页面手动下载ZIP包然后解压到/var/www/html/dvwa目录下注意目录名可能不同。注意事项务必确保DVWA文件的所有者能让Apache读取。通常克隆或解压后文件属于当前用户。我们需要将其所有权变更为Apache运行的用户通常是www-datasudo chown -R www-data:www-data /var/www/html/DVWA-R参数表示递归处理目录下的所有文件和子目录。3.2 关键配置文件修改DVWA提供了一个配置模板我们需要根据本地环境进行修改。cd /var/www/html/DVWA/config sudo cp config.inc.php.dist config.inc.php sudo nano config.inc.php我们使用nano编辑器打开配置文件如果你习惯vim也可以用vim。找到以下关键部分进行修改数据库连接配置$_DVWA[ db_server ] 127.0.0.1; $_DVWA[ db_database ] dvwa; $_DVWA[ db_user ] dvwa_user; $_DVWA[ db_password ] pssw0rd;确保这里的db_database、db_user和db_password与你之前在MariaDB中创建的一致。db_server保持127.0.0.1或localhost即可。安全级别与PHP配置可选但重要$_DVWA[ default_security_level ]可以设置默认安全等级建议新手先设为low方便练习。确保$_DVWA[ recaptcha_public_key ]和$_DVWA[ recaptcha_private_key ]在你不使用reCAPTCHA功能时保持为空字符串否则某些页面可能报错。修改完成后按CtrlX然后输入Y保存再按回车确认文件名退出。3.3 解决PHP函数禁用与文件权限问题DVWA需要一些特定的PHP函数支持而Kali的默认PHP配置可能禁用了其中一些比如allow_url_fopen和allow_url_include用于远程文件包含漏洞演示。我们需要编辑PHP配置文件。sudo nano /etc/php/8.2/apache2/php.ini注意你的PHP版本号可能不是8.2可以通过php -v查看。常见的有7.4、8.1、8.2等请进入对应的目录。在文件中搜索以下配置项并确保它们设置为以下值allow_url_fopen On allow_url_include On safe_mode Off display_errors On # 方便调试生产环境应设为Off disable_functions # 确保这一行是空的或者不包含DVWA需要的函数如passthru保存并退出后必须重启Apache服务以使PHP配置生效sudo systemctl restart apache2接下来DVWA需要一个可写的目录来存储上传的文件和日志。我们需要设置hackable和external目录的权限。cd /var/www/html/DVWA sudo chmod 777 hackable/uploads/ sudo chmod 777 external/chmod 777赋予了所有用户所有者、组、其他读、写、执行的权限。这在生产环境中是极度危险的但在本地学习靶场中为了方便可以暂时这样设置。4. 初始化与访问DVWA靶场所有配置完成后我们就可以通过浏览器访问并初始化DVWA了。4.1 运行安装向导打开你的浏览器Kali自带Firefox在地址栏输入http://127.0.0.1/DVWA/setup.php如果一切顺利你会看到DVWA的安装页面。页面会进行一系列检查通常会有几个红色的“警告”或“失败”提示这很正常我们需要逐一解决。PHP函数allow_url_include警告如果你按照上一步修改了php.ini并重启了Apache刷新页面后这个警告应该会变成绿色“通过”。如果没有请再次确认修改和重启步骤。数据库连接失败这是最常见的问题。请回头检查config.inc.php中的数据库用户名、密码、数据库名是否正确。MariaDB服务是否正在运行 (sudo systemctl status mariadb)。是否成功创建了dvwa数据库和dvwa_user用户可以重新登录MariaDB用SHOW DATABASES;和SELECT user FROM mysql.user;命令查看。reCAPTCHAkey missing 警告这个可以忽略除非你需要测试带验证码的表单。它不会影响核心功能。当所有检查项除了reCAPTCHA都变为绿色或可接受的警告后滚动到页面最下方点击“Create / Reset Database”按钮。这个按钮会执行一个SQL脚本在之前创建的dvwa数据库中建立所需的数据表并插入默认的用户数据如用户名admin密码password。如果成功页面会提示“Setup Successful”。4.2 首次登录与安全级别设置现在访问DVWA的主页http://127.0.0.1/DVWA/或http://127.0.0.1/DVWA/login.php使用默认凭证登录用户名admin密码password登录成功后你首先应该做的是修改默认密码。点击左侧导航栏的“Brute Force”模块然后在页面下方找到“Change Password”部分为admin用户设置一个强密码。虽然靶场在本地但养成好习惯很重要。接下来关注页面左侧的“DVWA Security”选项。这里是DVWA的精华所在。点击进入后你可以看到一个下拉菜单包含四个安全级别Low完全无防护。代码中存在最原始、最明显的漏洞适合理解漏洞最基础的原理和利用方式。Medium引入了基础的防护措施但存在明显的缺陷可以被绕过。适合学习基础的绕过技巧。High实现了较强的防护需要更精巧的利用技术或结合其他漏洞才能突破。适合进阶挑战。Impossible理论上已修复了漏洞代表了当前的最佳安全实践。用于学习正确的防御代码怎么写。对于纯新手强烈建议从“Low”级别开始。在这个级别下你可以最直观地看到漏洞是如何产生的以及最简单的攻击载荷是如何生效的。逐步通关Low级别下的所有模块如SQL Injection、Command Injection、File Upload等建立起基本概念后再逐步提升难度去挑战如何绕过Medium和High级别的防护。5. 核心漏洞模块初探与学习路径成功搭建并登录后面对左侧十几个漏洞模块新手可能会感到茫然。我建议按照一个由浅入深、逻辑连贯的顺序进行学习而不是盲目地从上到下点开。5.1 入门首选Brute Force暴力破解与 Command Injection命令注入Brute Force暴力破解是理解“自动化攻击”和“会话管理”的绝佳起点。在Low级别下你可以使用Kali自带的工具如hydra来尝试破解登录密码。这个过程会让你理解什么是字典攻击、请求重放以及一个不设防的登录表单有多么脆弱。同时你可以通过Burp Suite这类代理工具拦截登录请求观察Cookie和Session是如何工作的。Command Injection命令注入则能让你立刻感受到“漏洞”的威力。在Low级别下输入框原本可能用于执行ping命令但如果你输入8.8.8.8; whoami你会发现后面的whoami命令也被执行了并返回了当前Web服务的运行用户通常是www-data。这个直观的反馈非常震撼能让你立刻理解“用户输入被当作代码执行”的危险性。你可以尝试拼接更多命令如ls -la查看目录cat /etc/passwd查看系统用户但请务必只在本地靶场进行。5.2 理解Web安全基石SQL InjectionSQL注入与 XSS跨站脚本这是两个最经典、危害也最大的Web漏洞必须深入理解。SQL InjectionSQL注入在DVWA的SQL注入模块Low级别下你会发现输入一个用户ID如1页面返回用户信息。尝试输入1带一个单引号如果页面报错说明存在SQL注入漏洞。进一步你可以尝试构造永真条件1 OR 11。通过使用Burp Suite的Repeater模块或者学习使用sqlmap这个自动化注入工具Kali已预装你可以系统地学习如何判断注入类型、获取数据库名、表名、列名最终拖取数据。这个过程是理解“攻击链”的完美范例。XSS跨站脚本分为反射型Reflected和存储型Stored。反射型XSS就像在搜索框输入scriptalert(XSS)/script脚本立即执行并弹窗。存储型XSS则是把恶意脚本比如一段窃取Cookie的JavaScript写入到数据库如留言板当其他用户浏览时触发。在DVWA中你可以分别体验这两种类型。理解XSS的关键在于明白浏览器无法区分一段文本是可信的内容还是恶意脚本只要它被当作HTML和JavaScript解析了就会执行。5.3 文件相关漏洞File Upload文件上传与 File Inclusion文件包含File Upload文件上传Low级别下网站几乎不检查你上传的文件。你可以直接上传一个PHP Webshell例如一个包含?php system($_GET[cmd]);?的shell.php文件。上传成功后访问这个文件的URL你就能在服务器上执行任意命令。这直观地展示了“控制服务器”的过程。在Medium和High级别你需要学习如何绕过前端检查、MIME类型检查、文件扩展名检查甚至图片马将恶意代码嵌入图片的技巧。File Inclusion文件包含分为本地文件包含LFI和远程文件包含RFI。LFI允许你通过参数包含服务器本地的其他文件比如../../../../etc/passwd来读取系统敏感文件。RFI则更危险允许包含远程服务器上的恶意文件需要allow_url_includeOn。这个漏洞揭示了程序在动态加载文件时如果未对输入进行严格过滤会带来多么严重的后果。6. 进阶工具联动将DVWA与Kali工具生态结合单独使用DVWA的Web界面进行手工测试是基础但Kali的强大在于其工具生态。学会将DVWA与这些工具结合你的学习效率会倍增。6.1 信息收集与代理工具Burp SuiteBurp Suite是Web安全测试的“瑞士军刀”。在测试DVWA前先将浏览器代理设置为Burp默认127.0.0.1:8080并安装Burp的CA证书以拦截HTTPS流量虽然DVWA是HTTP但养成习惯。然后你在DVWA中的所有操作请求和响应都会经过Burp。Proxy/History查看所有流量记录分析请求参数。Repeater选中一个请求比如一个包含可疑参数的GET请求发送到Repeater。你可以随意修改参数比如将id1改为id1然后重放Send观察响应变化。这是手工测试SQL注入、XSS、命令注入的利器。Intruder用于自动化攻击比如对登录表单进行暴力破解或者对某个参数进行模糊测试Fuzzing插入大量Payload观察异常响应。Scanner社区版功能有限但可以用于基础的主动扫描帮你发现一些明显的漏洞点。6.2 自动化漏洞利用sqlmap当你手工确认某个参数存在SQL注入漏洞后就可以请出sqlmap了。它是一个开源的自动化SQL注入检测与利用工具。假设DVWA的SQL注入页面URL是http://127.0.0.1/DVWA/vulnerabilities/sqli/?id1SubmitSubmit并且你已登录Cookie需要保持。你可以使用如下命令进行探测sqlmap -u http://127.0.0.1/DVWA/vulnerabilities/sqli/?id1SubmitSubmit --cookiePHPSESSID你的会话ID; securitylow--cookie参数至关重要因为DVWA需要登录状态和特定的安全级别设置。sqlmap会自动识别注入类型、数据库类型并可以帮你获取数据库、表、列信息甚至直接导出数据。通过观察sqlmap的Payload和攻击流程你能反向学习到很多高级的注入技巧。6.3 综合渗透测试框架Metasploit虽然DVWA主要是Web漏洞但某些漏洞如命令注入、文件上传获取Webshell可以帮你拿到一个低权限的shell例如www-data用户。这时你可以尝试使用Metasploit进行权限提升提权或横向移动。例如如果你通过文件上传获得了Webshell并发现系统存在一个已知的内核漏洞可以通过uname -a查看内核版本然后用searchsploit搜索漏洞你可以在Metasploit中搜索对应的提权模块search exploit linux/local配置并运行尝试将权限提升至root。这个过程将Web漏洞利用与系统漏洞利用串联起来形成了一个完整的渗透测试链条。7. 常见问题排查与优化配置实录即使按照步骤操作搭建过程中也难免会遇到问题。这里记录了一些我反复遇到并解决的典型问题。7.1 数据库连接失败问题汇总这是最高频的问题其表现和解决方法如下问题现象可能原因解决方案点击“Create / Reset Database”后页面报错提示“Access denied for user...”1.config.inc.php中密码错误。2. 数据库用户未创建或授权失败。3. MariaDB服务未启动。1. 仔细核对config.inc.php中的db_password。2. 重新登录MariaDB执行SHOW GRANTS FOR dvwa_userlocalhost;检查授权。3. 执行sudo systemctl status mariadb确认服务状态。页面提示“Could not connect to the database service.”MariaDB服务未运行或PHP的php-mysql扩展未安装。1. 启动服务sudo systemctl start mariadb。2. 安装扩展sudo apt install php-mysql并重启Apache。登录DVWA时提示数据库连接错误但Setup页面曾成功。DVWA的config.inc.php配置文件权限问题导致Web用户无法读取。检查文件权限sudo ls -l /var/www/html/DVWA/config/config.inc.php确保Apache用户www-data可读。或直接sudo chmod 644 config.inc.php。7.2 PHP配置与函数禁用问题问题现象可能原因解决方案访问Setup页面allow_url_include始终显示为“OFF”。修改的php.ini文件不正确或未重启Apache。1. 确认修改的是Apache使用的PHP配置sudo php -i执行Command Injection或File Inclusion时无反应或报错。关键PHP函数如exec,system,passthru被disable_functions列表禁用。检查php.ini中的disable_functions项确保其值为空或者至少不包含DVWA需要用到的函数。修改后重启Apache。7.3 文件权限与访问问题问题现象可能原因解决方案文件上传File Upload模块上传文件失败提示“目录不可写”。hackable/uploads/目录权限不足。进入DVWA目录执行sudo chmod 777 hackable/uploads/。注意777权限仅用于本地测试。访问http://127.0.0.1/DVWA显示403 Forbidden。Apache没有该目录的访问权限或目录索引文件index.php配置问题。1. 检查目录所有权sudo chown -R www-data:www-data /var/www/html/DVWA。2. 检查Apache配置文件确保/var/www/html目录的AllowOverride和Require设置正确通常默认即可。7.4 安全级别切换不生效或会话问题问题现象可能原因解决方案在“DVWA Security”页面切换了安全级别但测试漏洞时发现级别没变。浏览器Cookie问题或者PHP会话session未正确工作。1. 清除浏览器Cookie和缓存重新登录DVWA。2. 检查/var/www/html/DVWA目录下sessions文件夹如果有的权限确保Web用户可写。通常PHP会话文件存储在/var/lib/php/sessions/检查其权限sudo chmod 733 /var/lib/php/sessions/。登录后很快又掉线。PHP会话生存时间过短。可以修改php.ini中的session.gc_maxlifetime值单位秒并重启Apache但这在靶场环境中不是主要问题更可能是浏览器或上述权限问题。8. 从靶场到实战思维转变与后续学习建议成功搭建并玩转DVWA的Low级别只是万里长征的第一步。靶场和真实世界的最大区别在于“未知性”。在DVWA里你知道这里一定有漏洞并且知道是什么类型的漏洞。但在真实测试中你需要自己去找入口、识别的技术、判断漏洞类型、构造利用链。思维转变一从“利用已知”到“发现未知”。下一步你应该尝试一些更接近真实的漏洞靶场比如bWAPP包含100多种漏洞覆盖更广。WebGoatOWASP出品带有详细的教学指导更像一个互动课程。PentesterLab的在线练习提供从易到难的各类漏洞场景。这些靶场不会直接告诉你“这里是SQL注入点”需要你使用Burp Suite等工具进行爬虫、扫描、手动测试自己去发现和验证漏洞。思维转变二理解漏洞原理与修复方案。不要只满足于利用漏洞。在DVWA中切换不同的安全级别对比查看源代码在Setup页面可以点击“View Source”。看看Low级别的漏洞代码长什么样Medium和High级别又增加了哪些过滤和校验Impossible级别是如何从根本上杜绝漏洞的。理解防御代码才能在未来开发中避免写出有问题的代码。学习建议建立知识体系系统学习OWASP Top 10理解每类漏洞的原理、危害、利用方式和修复方案。工具深度学习不要只停留在Burp Suite和sqlmap的简单使用上。深入学习Burp Suite的扩展Extensions、Intruder的四种攻击模式、sqlmap的Tamper脚本用于绕过WAF。参与合法实战在技能提升后可以尝试参与一些合法的众测平台、漏洞赏金计划Bug Bounty的入门项目或者CTF比赛中的Web题目在规则允许的范围内检验自己的学习成果。搭建DVWA靶场就像拿到了一把打开网络安全大门的钥匙。门后的世界庞大而复杂但有了这个安全、可控的起点你可以放心大胆地去尝试、去失败、去理解每一个攻击背后的原理。记住所有的技术都应该用于合法、合规的测试和学习这是每一位安全从业者必须坚守的底线。