|
点下“Create / Reset Database”按钮,靶场页面刷新,搭建顶部弹出一行红字:Could not connect to MySQL。无法这是创建DVWA搭建时最常见的一堵墙。我见过太多人卡在这里,数据包括我自己第一次配环境的靶场时候——明明phpMyAdmin能打开,偏偏DVWA说连不上数据库。搭建 问题通常出在三个地方,无法按出现频率排:数据库服务没跑起来、创建config.inc.php里的数据账号密码不对、MySQL用户权限没给够。靶场听起来简单,搭建但排查起来容易绕弯。无法 先确认MySQL到底活着没有 很多人装完PHPStudy或者XAMPP,创建看到Apache绿灯就以为万事大吉。数据MySQL可能是红的。Windows下打开服务面板,找mysql或者mariadb,看状态。Linux下直接systemctl status mysql。如果服务停了,DVWA当然连不上。 还有一种情况:服务在跑,但端口不对。DVWA默认连localhost:3306,你要是改过MySQL端口,比如改成3307,那config.inc.php里也得跟着改。这个坑不常见,但一旦踩上,查半天查不出来。 config.inc.php 里的那些字段 打开DVWA的config/config.inc.php,默认内容大概长这样: $_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'root'; $_DVWA[ 'db_password' ] = 'p@ssw0rd'; $_DVWA[ 'db_port' ] = '3306'; 注意db_password。DVWA默认写的是p@ssw0rd,但你的MySQL root密码大概率不是这个。改成你实际设置的密码。如果MySQL root没设密码,留空字符串。别笑,我见过有人对着默认密码折腾了四十分钟,最后发现自己的root密码是空的。 另外db_server用127.0.0.1比localhost更稳。某些系统上localhost会走socket连接,而PHP配置里socket路径不对,就会报连不上。改成127.0.0.1强制走TCP,少一层幺蛾子。 MySQL 8 的认证插件是个隐藏杀手 如果你用的是MySQL 8.x,root用户的默认认证插件是caching_sha2_password。老版本的PHP(比如PHP 5.x或7.0)连不上这个。DVWA很多教程推荐的环境恰好是旧版PHP。表现就是密码明明对,但DVWA报连接失败。 解决办法有两个。一是改root的认证方式: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES; 二是单独给DVWA建一个用户,用mysql_native_password插件,然后把这个用户填进config.inc.php。第二种更干净,不影响其他应用。 权限问题别忽略 DVWA需要的不只是连接权限,它还要创建数据库、建表、插入数据。如果你给DVWA配了一个低权限用户,连接能成功,但点“Create / Reset Database”的时候会失败,报的是另一个错——Access denied for user。这时候要确认该用户对dvwa库有ALL PRIVILEGES,或者至少有CREATE、INSERT、SELECT、DROP权限。 我一般直接给DVWA单独建用户: CREATE USER 'dvwa'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'dvwa123'; GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'127.0.0.1'; GRANT CREATE ON *.* TO 'dvwa'@'127.0.0.1'; FLUSH PRIVILEGES; 注意那个GRANT CREATE ON *.*。DVWA第一次运行时要创建dvwa数据库本身,如果只给了dvwa.*的权限,库还不存在,授权就无从谈起。这个细节很多人漏掉。 一个真实案例 上周帮人远程看一个DVWA环境。phpMyAdmin正常,MySQL服务正常,config.inc.php里的密码也对。但就是连不上。最后发现db_server写的是localhost,而这台机器上/etc/mysql/my.cnf里bind-address被注释掉了,socket文件路径跟PHP默认找的不一样。改成127.0.0.1,立刻通了。 这种问题没有通用答案,只能一个个排除。我的习惯是:先用命令行mysql -u root -p -h 127.0.0.1试连接,通了再去看PHP那边。命令行都连不上,DVWA更连不上。命令行能连上而DVWA连不上,问题就在PHP配置或者config.inc.php里。 搭建靶场本身不是目的,但连数据库都连不上,后面SQL注入的练习就无从谈起。花十分钟把连接问题理清楚,比后面反复重装环境划算得多。 |