尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Kali Linux下DVWA靶场搭建全攻略:从LAMP环境配置到渗透测试实战

Kali Linux下DVWA靶场搭建全攻略:从LAMP环境配置到渗透测试实战 1. 从零开始为什么要在Kali上搭建DVWA如果你刚开始接触网络安全或者想找一个安全、可控的环境来练习Web渗透测试那么DVWADamn Vulnerable Web Application绝对是你绕不开的“新手村”。它是一个故意设计得漏洞百出的PHP/MySQL应用包含了SQL注入、XSS、文件上传、命令执行等十几种常见漏洞让你可以合法地、反复地“攻击”它而不用担心法律问题。那么为什么要把DVWA搭在Kali Linux上呢Kali本身就是一个为渗透测试和安全研究而生的Linux发行版预装了海量的安全工具。在Kali上搭建DVWA相当于把“靶场”直接建在了“武器库”里。你不需要再费心去配置各种扫描器、代理工具Kali已经为你准备好了Burp Suite、sqlmap、nmap等全套装备。更重要的是整个过程——从环境配置到漏洞利用——都在一个封闭的虚拟机或物理机里完成形成了一个完美的学习闭环。你不用去折腾复杂的网络配置也不用担心误操作影响到真实服务器可以心无旁骛地专注于漏洞原理和利用技巧本身。我见过很多新手一上来就直接去网上找现成的在线靶场这当然方便但往往知其然不知其所以然。自己动手在Kali上从零搭建一遍DVWA你会深刻理解一个Web应用是如何跑起来的Apache、PHP、MySQL的协同知道配置文件在哪里、日志怎么看、服务怎么启停。这些看似基础的操作恰恰是后续进行更复杂漏洞分析和利用的基石。当你遇到一个“500 Internal Server Error”时你知道该去/var/log/apache2/error.log里找原因当你修改了PHP配置后你知道需要重启Apache服务才能生效。这种对环境的掌控感是直接使用在线平台无法获得的。2. 环境准备Kali Linux的基础配置与检查在开始搭建DVWA之前我们需要确保Kali Linux这个“地基”是稳固的。很多人拿到Kali后直接开干结果在后续步骤中遇到各种稀奇古怪的问题根源往往就在于基础环境没配好。2.1 系统更新与网络连通性首先打开终端第一件事永远是更新系统软件包列表并升级已安装的包。这能确保我们使用的是最新的软件源和补丁避免因版本过旧导致的兼容性问题。sudo apt update sudo apt upgrade -y这个命令会运行一段时间期间可能会询问你是否继续输入Y并回车即可。sudo apt update是刷新本地软件包索引让它与远程仓库同步sudo apt upgrade -y则是实际升级所有可升级的软件包-y参数表示自动确认所有提示让过程更流畅。注意如果你的Kali是通过虚拟机如VMware或VirtualBox安装的请务必确认虚拟机网络适配器设置为“NAT模式”或“桥接模式”并确保宿主机可以正常访问互联网。一个简单的测试方法是ping 8.8.8.8如果能看到连续的回复说明网络通畅。2.2 LAMP环境核心组件检查与安装DVWA是一个基于PHP和MySQL的Web应用需要LAMPLinux, Apache, MySQL, PHP环境来运行。Kali默认已经安装了Apache和PHP但MySQL被其分支MariaDB所替代我们需要手动安装并启动这些服务。安装Apache2和PHP虽然Kali可能预装了但为了确保完整性我们显式安装一遍。sudo apt install apache2 php -y安装MariaDB数据库服务器MariaDB是MySQL的一个完全兼容的分支在Kali中是默认的数据库选择。sudo apt install mariadb-server mariadb-client -y安装PHP连接MySQL所需的扩展PHP需要通过特定的扩展模块才能与MariaDB/MySQL通信。sudo apt install php-mysql php-gd libapache2-mod-php -yphp-mysql: 让PHP支持MySQL/MariaDB。php-gd: 图形处理库DVWA的某些功能如验证码可能需要。libapache2-mod-php: Apache的PHP处理模块让Apache能解析PHP代码。安装完成后我们需要启动这些服务并设置它们开机自启这样每次重启Kali后DVWA才能自动运行。sudo systemctl start apache2 sudo systemctl enable apache2 sudo systemctl start mariadb sudo systemctl enable mariadb现在打开你的浏览器访问http://127.0.0.1或http://localhost。如果能看到Apache2的默认欢迎页面通常显示“It works!”或“Apache2 Debian Default Page”那么恭喜你Web服务器已经成功运行了。2.3 数据库安全初始化刚安装的MariaDB root用户默认没有密码这是一个巨大的安全风险即使是在本地环境。我们必须立即进行安全加固。运行以下命令来启动一个交互式的安全配置脚本sudo mysql_secure_installation你会被问到一系列问题我的建议配置如下Enter current password for root (enter for none):直接按回车因为初始没有密码。Switch to unix_socket authentication [Y/n]:输入n然后回车。这一步是关于使用操作系统认证我们暂时不需要。Change the root password? [Y/n]:输入Y然后回车。这是最关键的一步。New password:设置一个强密码例如Dvwa123!#并牢记它。输入时不会显示字符这是正常的。Re-enter new password:再次输入相同的密码。Remove anonymous users? [Y/n]:输入Y然后回车。删除匿名用户提高安全性。Disallow root login remotely? [Y/n]:输入Y然后回车。禁止root用户远程登录防止网络攻击。Remove test database and access to it? [Y/n]:输入Y然后回车。删除测试数据库。Reload privilege tables now? [Y/n]:输入Y然后回车。使所有更改立即生效。完成这一步后你的MariaDB环境就基本安全了。记住你设置的root密码后续配置DVWA时会用到。3. 获取与部署DVWA源码的下载与配置基础环境就绪现在让我们把“靶子”——DVWA应用本身——放到合适的位置。3.1 下载DVWA最新源码官方推荐从GitHub仓库获取DVWA这样可以确保拿到最新的版本包括漏洞修复和功能更新。在终端中执行cd /var/www/html sudo git clone https://github.com/digininja/DVWA.git这条命令做了两件事首先cd /var/www/html切换工作目录到Apache的默认网站根目录所有可以通过Web访问的文件都应放在这里或其子目录下然后使用git clone命令将远程GitHub仓库的DVWA代码克隆到本地在当前目录下生成一个名为DVWA的文件夹。如果提示git命令未找到你需要先安装它sudo apt install git -y。克隆完成后你可以通过ls -la命令查看/var/www/html目录应该能看到DVWA文件夹。3.2 配置文件权限与所有权Linux系统严格的权限管理是安全的基础但也常常是新手搭建环境时的“拦路虎”。DVWA需要向特定目录写入数据如上传文件、记录日志因此我们必须正确设置文件夹权限。将DVWA目录的所有权赋予Web服务器用户在Debian/Ubuntu/Kali系统中Apache默认以www-data用户和用户组的身份运行。我们需要让这个用户有权读写DVWA目录。sudo chown -R www-data:www-data /var/www/html/DVWAchown命令用于改变文件所有者-R参数表示递归处理目录下的所有文件和子目录。www-data:www-data表示将所有者设为www-data用户所属组也设为www-data组。设置合理的目录权限我们不需要给所有人others写权限通常给所有者www-data读写执行给同组用户读执行给其他用户读执行即可。对于需要上传文件的目录权限要特殊设置。sudo chmod -R 755 /var/www/html/DVWAchmod 755是常见的目录权限表示所有者可读、写、执行7同组用户可读、执行5其他用户可读、执行5。特别处理文件上传目录DVWA有一个hackable/uploads/目录用于文件上传漏洞练习它需要Web服务器有写入权限。sudo chmod 777 /var/www/html/DVWA/hackable/uploads/chmod 777意味着所有者、组用户、其他用户都有读、写、执行权限。这是一个非常宽松的权限仅在本地学习环境可以这样设置在生产环境中是绝对禁止的。之所以在这里使用777是为了避免在练习文件上传漏洞时因权限问题导致利用失败干扰学习重点。实操心得权限问题Permission Denied是Linux环境下Web开发最常见的错误之一。如果后续访问DVWA页面时出现“无法创建配置文件”或“无法写入日志”等错误十有八九是权限没设对。回头检查相关目录的所有者是否为www-data以及是否有相应的读写权限。3.3 配置数据库连接DVWA需要连接我们刚才安装的MariaDB数据库。其配置文件位于/var/www/html/DVWA/config/config.inc.php.dist。我们需要复制一份并修改它。复制配置文件模板sudo cp /var/www/html/DVWA/config/config.inc.php.dist /var/www/html/DVWA/config/config.inc.php编辑配置文件使用你喜欢的文本编辑器例如nanosudo nano /var/www/html/DVWA/config/config.inc.php找到以下关键配置项并进行修改$_DVWA[ db_server ] 127.0.0.1; // 数据库服务器地址本地就用127.0.0.1 $_DVWA[ db_database ] dvwa; // 数据库名可以保持默认 $_DVWA[ db_user ] dvwa; // 连接数据库的用户名我们稍后会创建 $_DVWA[ db_password ] pssw0rd; // 对应用户的密码为了安全强烈建议不要使用默认的pssw0rd作为密码。你可以把它改成另一个强密码比如DvwaUserPass123!并记住它。同时将db_user也从默认的root改为一个专用用户如dvwa这是遵循数据库安全的最小权限原则。创建DVWA专用数据库和用户现在我们需要登录MariaDB按照配置文件里的设定创建数据库和用户。sudo mysql -u root -p输入你之前为root用户设置的密码例如Dvwa123!#。成功进入MariaDB命令行后提示符变为MariaDB [(none)]依次执行以下SQL语句-- 创建一个名为dvwa的数据库 CREATE DATABASE dvwa; -- 创建一个名为dvwa的用户并设置密码请替换为你在config.inc.php里设置的密码 CREATE USER dvwalocalhost IDENTIFIED BY DvwaUserPass123!; -- 授予dvwa用户对dvwa数据库的所有权限 GRANT ALL PRIVILEGES ON dvwa.* TO dvwalocalhost; -- 刷新权限使更改生效 FLUSH PRIVILEGES; -- 退出MariaDB命令行 EXIT;这样我们就创建了一个名为dvwa的数据库以及一个只能从本地登录、且只对dvwa数据库有完整权限的dvwa用户。这比直接使用root用户安全得多。4. 初始化与访问完成DVWA安装并解决常见问题所有组件都已就位现在是时候启动靶场并处理首次运行时可能遇到的“拦路虎”了。4.1 重启服务与访问安装页面在修改了配置和创建了数据库之后最好重启一下Apache服务确保所有更改生效。sudo systemctl restart apache2现在打开浏览器访问http://127.0.0.1/DVWA/setup.php。你应该会看到DVWA的安装和设置页面。这个页面会执行一系列检查通常包括PHP版本是否 5.4.0是否启用了必要的PHP扩展如mysql,gd配置文件config.inc.php是否可写能否连接到指定的数据库127.0.0.1用户dvwa密码DvwaUserPass123!数据库dvwa如果所有检查都是绿色的勾那么页面最下方会出现一个“Create / Reset Database”按钮。4.2 执行数据库初始化点击“Create / Reset Database”按钮。这个操作会做两件重要的事在dvwa数据库中创建所有必要的表结构如users,guestbook等。向表中插入初始数据包括默认的用户名和密码。完成后页面会自动跳转到DVWA的登录页面http://127.0.0.1/DVWA/login.php。默认的登录凭证是用户名:admin密码:password输入并登录你就成功进入了DVWA的主界面4.3 排查与解决常见安装错误很少有人能一次点亮所有绿灯。下面我列出几个最常见的错误及其解决方法这几乎是每个新手都会踩的坑。错误1PHP函数allow_url_include被禁用 (红色叉叉)现象在setup.php页面allow_url_include检查项显示为红色。原因这是一个重要的安全设置默认被关闭以防止远程文件包含漏洞。但DVWA的某些练习如RFI需要它开启。解决编辑PHP的配置文件。在Kali上主要的PHP配置文件通常是/etc/php/8.2/apache2/php.ini版本号可能不同如7.4、8.1等可以用php -v查看版本然后到/etc/php/下找对应目录。sudo nano /etc/php/8.2/apache2/php.ini使用CtrlW搜索allow_url_include找到这一行allow_url_include Off将其改为allow_url_include On保存文件后必须重启Apache服务才能使更改生效sudo systemctl restart apache2刷新setup.php页面该项应该变绿了。错误2无法连接到数据库 (红色叉叉)现象ReCAPTCHA key或数据库连接检查失败。排查步骤检查配置文件再次确认/var/www/html/DVWA/config/config.inc.php中的db_password是否与你创建dvwa用户时设置的密码完全一致注意大小写和特殊字符。测试数据库连接在终端尝试用配置文件中的信息手动连接数据库mysql -u dvwa -p -h 127.0.0.1 dvwa输入密码看是否能成功登录MariaDB命令行。如果不能说明用户创建或授权有问题。检查用户权限以root用户登录MariaDB检查dvwa用户的权限sudo mysql -u root -p SELECT Host, User FROM mysql.user WHERE Userdvwa; SHOW GRANTS FOR dvwalocalhost;确保用户存在且拥有对dvwa.*数据库的权限。检查MariaDB服务状态确保mariadb服务正在运行。sudo systemctl status mariadb如果没运行用sudo systemctl start mariadb启动它。错误3setup.php页面显示空白或PHP代码现象访问setup.php时浏览器显示空白页或者直接显示了PHP源代码。原因Apache没有正确解析PHP文件。通常是因为PHP模块未启用或者文件后缀与处理模块的映射关系不对。解决确保libapache2-mod-php模块已安装并启用sudo a2enmod php8.2 # 启用对应PHP版本的模块版本号需匹配 sudo systemctl restart apache2检查Apache的配置文件是否包含了对.php文件的处理。通常默认是配置好的但如果修改过可以检查/etc/apache2/mods-enabled/php8.2.conf文件是否存在。错误4点击“Create / Reset Database”按钮无反应或报错现象点击按钮后页面没有跳转或者显示数据库错误。原因可能是之前数据库里已经存在同名的表导致创建冲突或者是用户权限不足。解决最彻底的方法是先清理旧数据。登录MariaDB的root用户执行DROP DATABASE IF EXISTS dvwa; CREATE DATABASE dvwa; GRANT ALL PRIVILEGES ON dvwa.* TO dvwalocalhost; FLUSH PRIVILEGES; EXIT;然后回到setup.php页面再次点击按钮。5. 安全加固与进阶配置让靶场更贴近真实环境默认安装的DVWA为了方便练习安全设置是最低的。为了让你的练习环境更贴近真实情况或者增加一点挑战性可以进行以下调整。5.1 调整DVWA安全等级登录DVWA后在左侧菜单点击“DVWA Security”。这里你可以设置整个应用的安全级别Low:毫无防护。所有漏洞利用起来最简单适合完全新手理解漏洞原理。Medium:加入了一些基础的、但很容易绕过的防护如简单的输入过滤。适合练习绕过技巧。High:防护较强需要更精巧的利用方式。适合进阶挑战。Impossible:理论上无法利用的防护级别。展示了从开发层面如何彻底修复该漏洞具有极高的学习价值。我的建议是从Low级别开始逐个漏洞学习原理和利用方法。掌握后切换到Medium和High研究防护机制并尝试绕过。最后一定要看Impossible级别的代码理解真正的安全解决方案是什么。5.2 修改默认凭证并创建多用户永远不要使用默认密码这是安全第一课。登录DVWA后点击“Brute Force”模块然后点击“View Source”查看前端代码你会发现默认的用户名/密码就硬编码在页面的HTML注释里。这太不真实了。我们应该修改它使用默认凭证 (admin/password) 登录。点击左侧“Setup”拉到底部再次点击“Create / Reset Database”。这会重置数据库但不会重置config.inc.php中的数据库密码。重置后默认用户admin的密码会变回password。但我们可以用SQL注入或暴力破解模块在Low安全级别下来练习修改密码或者直接去数据库里改sudo mysql -u root -p dvwaUPDATE users SET password MD5(MyNewStrongPassword123!) WHERE user admin;这样就把admin用户的密码改为了MyNewStrongPassword123!DVWA使用MD5存储密码。更进一步你可以在数据库里创建多个用户模拟一个真实的用户系统用于练习垂直越权、水平越权等漏洞。5.3 配置PHP错误报告与日志为了更好的调试和学习建议调整PHP的错误报告级别并学会查看日志。 编辑/var/www/html/DVWA/config/config.inc.php找到以下行# 默认可能是关闭的 $_DVWA[ display_errors ] false;可以暂时改为true这样PHP错误和警告会直接显示在页面上方便你调试代码仅限本地学习环境。同时关注Apache的错误日志它是发现问题的金矿sudo tail -f /var/log/apache2/error.logtail -f命令会实时显示日志文件的最后几行并持续输出新内容。当你访问DVWA遇到白屏或500错误时另一个终端窗口开着这个命令就能立刻看到具体的错误信息。5.4 将DVWA与Kali工具链结合这才是Kali上搭建DVWA的精髓。你不再需要单独启动各种工具它们已经集成在系统中。使用Burp Suite代理流量启动Burp Suite配置浏览器代理为127.0.0.1:8080。然后所有访问DVWA的流量都会经过Burp你可以拦截、查看、修改每一个HTTP请求和响应这对于分析漏洞和构造攻击Payload至关重要。使用sqlmap自动化SQL注入测试在DVWA的SQL注入关卡先手工尝试找出注入点。然后复制这个请求可以从Burp中复制使用sqlmap进行自动化测试和利用sqlmap -u http://127.0.0.1/DVWA/vulnerabilities/sqli/?id1SubmitSubmit --cookiePHPSESSID你的会话ID; securitylow --batch你需要将URL和Cookie替换成你自己的。--batch参数会让sqlmap自动选择默认选项。使用nmap扫描自身虽然靶场在本地但你依然可以用nmap扫描127.0.0.1了解端口开放和服务指纹信息这是一种标准的侦查流程练习。6. 日常维护与重置保持靶场的整洁与可用经过一段时间的“狂轰滥炸”DVWA的数据库可能会变得混乱或者你想从头开始练习。以下是维护技巧。6.1 快速重置DVWA数据库最干净利落的方法就是回到“Setup”页面点击那个万能的“Create / Reset Database”按钮。这会将所有数据恢复到初始状态包括用户、留言板内容等。6.2 备份与恢复特定数据如果你配置了复杂的用户权限或者修改了某些数据想保留可以手动备份数据库。# 备份 sudo mysqldump -u root -p dvwa dvwa_backup_$(date %Y%m%d).sql # 恢复 (在重置数据库后) sudo mysql -u root -p dvwa dvwa_backup_20231027.sql6.3 彻底卸载与重新安装如果环境被彻底玩坏想推倒重来删除DVWA目录sudo rm -rf /var/www/html/DVWA登录MariaDB删除数据库和用户DROP DATABASE dvwa; DROP USER dvwalocalhost; FLUSH PRIVILEGES;然后从本文的第3章开始重新执行一遍克隆、配置、初始化的步骤即可。搭建DVWA靶场的过程本身就是一次绝佳的学习体验。你不仅得到了一个练习漏洞的平台更亲手实践了Linux系统管理、Web服务配置、数据库操作和安全加固等一系列技能。当你在Kali的命令行中敲下一个个指令并最终在浏览器中看到DVWA的登录界面时那种“从无到有”的掌控感是任何现成工具都无法替代的。现在靶场已就绪武器已在手是时候开始你的网络安全探索之旅了。记住在“攻击”你的DVWA之前先确保你已经完全理解并完成了上述所有配置步骤一个稳固的环境是高效学习的前提。
返回列表