今天在虚拟机里安装 sqli-labs SQL 注入练习靶场,本来以为就是下个源码、导个数据库、改个配置文件的事,结果因为 PHP 版本问题卡了半天,记录一下。(后面附sqlilabs靶场下载链接)
一、我的初始操作(通用版靶场)
-
下载源码:从网上下载了通用的 sqli-labs-master.zip,解压后导入 VS Code,方便查看和编辑文件。
-
导入数据库:在源码文件夹里找到 sql-lab.sql我用的是 Navicat 这个 MySQL 管理工具,有两种方式导入:
· 方式一:直接在 Navicat 里点击“运行 SQL 文件”,选中刚才的 .sql 文件,点击开始,等它执行完就自动建好库和表了。
· 方式二:在 VS Code 里打开那个 SQL 文件,全选复制所有内容,然后打开 Navicat 新建一个查询,把内容粘贴进去,点击运行,效果一样。
-
修改配置文件:找到 sql-connections/db-creds.inc 文件,把里面的数据库用户名和密码改成自己的(用户名 root,密码 输入你的密码),host 保持 localhost。保存。
-
部署到虚拟机:把整个源码文件夹上传到虚拟机的网站根目录 /var/www/html/ 下,重命名为 sqli-labs。
-
初始化:浏览器访问 你的sqlilabs文件,点击页面上的 Setup/reset Database for labs,期待它自动完成剩余配置。
二、踩坑:初始化报错
点击初始化后,页面直接报错,大意是 Uncaught Error: Call to undefined function mysql_connect(),系统找不到 mysql_connect 这个函数。
我当时一愣,数据库明明在 Navicat 里都能连上,配置文件密码也没错,怎么这里就报函数不存在呢?
三、排查原因
查了一下才知道,mysql_connect 是 PHP 5.x 时代的旧函数,从 PHP 7.0 开始就被官方废弃并移除了。而我虚拟机上安装的是 PHP 7.4,根本不认识这个函数。通用版的 sqli-labs 源码还是用 mysql_* 系列函数写的,所以在高版本 PHP 环境下就直接报错。
四、解决方案:更换适配 PHP 7 的版本
既然问题出在版本不兼容,那就找专门适配 PHP 7 的靶场版本。
- 下载适配版:GitHub 上有个 skyblueee/sqli-labs-php7,作者已经把里面的 mysql_* 函数全部替换成了 mysqli_*,完美兼容 PHP 7+。
- 重新部署:把克隆下来的文件夹上传到 /var/www/html/ 下,同样重命名为 sqli-labs(覆盖原来的或者单独起名都可以)。
- 再次配置数据库连接:进入 sqli-labs/sql-connections/,找到 db-creds.inc(如果没有就手动创建),填入正确的数据库信息:
<?php $dbuser = 'root'; $dbpass = '你的密码'; $dbname = "security"; $host = 'localhost'; $dbname1 = "challenges"; ?> - 初始化成功:浏览器访问 http://你的ip/sqli-labs/,点击 Setup/reset Database for labs,这次 SQL 文件顺利执行完毕,security 数据库和所有关卡表全部创建成功。
五、补充
配置文件里 host 直接写 localhost 是最稳定、速度最快的方式。改回 localhost 后,立刻就能连上了。
sqlilabs下载地址:
(1)通用版本 访问 SQLI-LABS 的 GitHub 仓库:github.com/Audi-1/sqli…
(2)PHP7版本 访问 SQLI-LABS 的 GitHub 仓库:github.com/skyblueee/s…
点击绿色的 "Code" 按钮,然后选择 "Download ZIP"。将压缩包下载到电脑上。
链接是在CSDN找到的,原文链接:blog.csdn.net/mooyuan/art…
本人真实踩坑记录,文章部分由ai润色。