前言:本文是对phpstduy(版本8.1.3)集成环境下部署sqli-labs时会因兼容性问题产生报错的解决方案,方法较为繁琐,但确实可以解决问题。
1.如何配置环境
相信大家在根据网上教程下载低版本php时会遇到如下情况:

而如果改成其他版本又会显示网络不稳定,我网上查找了但依旧找不到相应的解决方案,这里采用低版本环境其实涉及到一个函数问题,如果我们最开始不部署低版本环境直接进会遇到如下报错:
php
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in
D:\phpstudy_pro\WWW\sql\sql-connections\setup-db.php:29 Stack trace: #0 {main} thrown in
D:\phpstudy_pro\WWW\sql\sql-connections\setup-db.php on line 29
遇到这个错误,是因为我们使用的 PHP 版本过高(PHP 7.0 及以上),而 sqli-labs 靶场原先的代码是基于 PHP 5 版本编写的,使用了已被高版本 PHP 移除的 mysql_connect() 函数 。
因为此时我们无法切换低版本的php环境,那么就需要手动将代码中所有旧的 mysql_* 函数替换为新的 mysqli_* 函数 。这需要修改多个文件,稍微复杂一些。
可以参考下面的对照表,将报错文件(setup-db.php)以及 sql-connections 和 sql-connect 文件夹下相关文件中的数据库操作函数进行替换 :
| 废弃的 mysql 函数 | 对应的 mysqli 函数(面向过程) | 修改说明 |
|---|---|---|
mysql_connect() |
mysqli_connect() |
连接数据库,需要传入服务器、用户名、密码等参数 |
mysql_select_db() |
mysqli_select_db() |
选择数据库,需要在连接成功后调用 |
mysql_query($sql) |
mysqli_query($conn, $sql) |
执行SQL语句,必须把数据库连接对象 $conn 作为第一个参数传进去 |
mysql_error() |
mysqli_error($conn) |
获取错误信息,同样需要传入数据库连接对象 $conn |
mysql_fetch_array() |
mysqli_fetch_array() |
从结果集中取得一行作为数组,用法基本一致 |
其实这里面如果装了vscode的话很好看出来的,如果是以前的mysql这样的话会标注出来,如下图所示:

我们只要根据提示进行相应修改就行了。
然后这里面首先要改的是最基本的配置文件夹即sql-connections,我这里的文件路径如下:
D:\phpstudy_pro\WWW\sql\sql-connections
进入之后我们要对如下文件都进行相应修改:

完成后我们再回到sqli-labs主界面点击Setup DB,如果看到如下内容且无报错则证明修改完成:

这时候我们进入第一关可以看到页面看起来很正常:

但是我们下一步进行?id=1'时,页面不会有任何回显,这是因为每一关使用的mysql函数都是低版本的,这就导致了在高版本下无法有任何输出,因此我们在每一关中也要修改index.php中已经被高版本弃用的mysql函数:

完成相应修改之后再回到我们的第一关,开始相应测试:
2.实战试水
首先找列数:


4显示未知,3正常,则此处无问题。
union查询找回显位:

然后这里有一个比较难绷的:

我这里用的php环境是默认的7.3.4,但可能是数据库的配置文件里面写的是5.7.26所以就显示了这个
然后是爆表:

接着爆字段:

最后脱个库:

3.总结
整套流程做下来没问题的话那后续应该也正常,后面做的时候记得把index.php里面的mysql都改成mysqli,要不然做着做着还以为是盲注(bushi)。如果这篇文章对你有帮助的话,劳烦点个赞支持一下o(* ̄▽ ̄*)ブ