Sql-lab 的搭建

正文索引 [隐藏]

本文的填的坑

  • php7 不兼容 原版 sql-lab 问题
  • mysql 远程访问问题(我菜鸡,逃。。。。)
  • php7 未开启 mysqli 模块导致连接不上 mysql 问题

环境

  • ubuntu-18.04.3-live-server-amd64
  • apache2
  • mysql
  • php7

一、Apache 的安装

sudo apt-get install apache2

1565338731059

小常识:

  • 产生的启动和停止文件是:/etc/init.d/apache2

  • 配置文件是:/etc/apache2/apache2.conf

  • 启动:service apache start

  • 停止:service apache stop

  • 重新启动:service apache restart

  • 状态检查:service apache status

二、MySQL

sudo apt-get install mysql-server

使用新的安装策略配置:

mysql_secure_installation

1565340556763

1. 开放远程登陆

不开也行,我开是后面出 bug 到怀疑人生,试着开了一下

mysql 的配置文件比较迷,好几个.cnf,默认读取的 .cnf 在 /etc/mysql/mysql.conf.d 下,文件名 mysqld.cnf,进去之后把 bind-address 的注释去掉(不然强制只监听本地访问,这其实是安全策略来着,不过反正是搭靶机,搞就完事了)

1565493532566

2.1 关于不能使用普通用户登陆 root 的问题:

1565402659507

这里由于 root 的认证方式是 auth_socket(也就是 Unix socket),所以就只能 sudo 到 root 权限再登陆,更新一下表就行啦

USE mysql;
SELECT user, plugin, authentication_string FROM user;
UPDATE user SET plugin='mysql_native_password', authentication_string=PASSWORD('******') WHERE user='root'; 
exit

1565405884485

弄成上面这个样子就行啦。

2.2 我就是不想用 root 的解决办法

woc 动 root 一时爽,爽完火葬场。。。。新建个高权限用户不好吗

GRANT ALL PRIVILEGES ON *.* TO 'drk'@'%' IDENTIFIED BY '*****' WITH GRANT OPTION;
  • all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
  • on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
  • to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。
  • identified by:指定用户的登录密码
  • with grant option:表示允许用户将自己的权限授权给其它用户

三、安装 PHP

php7 安装

apt 大法好

sudo apt-get install php -y
sudo apt-get install libapache2-mod-php
sudo service apache2 restart

写一个简单的 php 文件测试一下:

<?php
    phpinfo();
?>

把这个文件搁到 /var/www/html 目录下,用浏览器访问一下,出现下面界面就配置成功啦(测试完记得删除这个测试文件):

1565410068655

启用 mysqli 模块

ps:千万别相信网上有些坑说的改 php.ini,尼玛那是在 windows 下的,改了之后会出现更大的 bug(别问我怎么知道的 mmp,另外 StackOverflow 万岁)

这个模块用来让 php 能够连接 mysql,不启用会出现恐怖的坑,像是这样:

1565495867595

测试用代码:

<?php
$conn=mysqli_connect("127.0.0.1","drk","123456");
 if($conn){
  echo "连接mysql数据库ok";
 }else {
  echo "连接mysql数据库失败";
 }
?>

解决办法是 apt 大法好:

sudo apt-get install php-mysql

再次测试就 O98K 啦:

1565496002494

php5 安装(虽然推荐但我没测试成功。。。)

安装 php7 会导致后面一堆破事儿,所以推荐安装 php5,如果已经不幸安装了 php7,还无法用 apt-get 一键卸载,就用下面这个办法暴力删除(暴躁,敲里吗)

# 删除php的相关包及配置
sudo apt-get autoremove php7*

# 删除关联
sudo find /etc -name "*php*" |xargs  rm -rf 

# 清 dept 表
sudo apt purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`

# 检查是否卸干净(无返回就是卸载干净了)
dpkg -l | grep php7.0

不过现在貌似 php5 已经被从仓库中移除了。。。所以安装的时候稍微麻烦一点:

sudo add-apt-repository -y ppa:ondrej/php # 使用PHP PPA 与 PHP7 一起安装 PHP 5.6
sudo apt-get update
sudo apt-get install php5.6

1565430994416

这里留个心眼,apache2 支不支持呢:

apache2ctl -M # 查看 apache2 加载的模块

1565431118228

啊,可以了,不用装了,直接上测试,稳了(并不,可能也存在要下载 php-mysql 的问题):

1565431540166

四、sqli-labs 的安装

注意用 php -v 看一眼 php 版本

1.1 如果装的是 php5

从 github 上面把项目薅下来,搁到 apache2 目录下/var/www/html

git clone https://github.com/Audi-1/sqli-labs.git sqli-labs # 不适用 php7
mv sqli-labs /var/www/html

1.2 如果装的是 php7

git clone https://github.com/skyblueee/sqli-labs-php7.git sqli-labs # 不适用 php7
mv sqli-labs /var/www/html

2 配置数据库连接

配一下数据库连接的密码,让 lab 能访问到 mysql:

sudo vim /var/www/sqli-labs/sql-connections/db-creds.inc 
# 将 $dbuser 变量值修改成”root” 
# 将 $dbpass 变量值修改成”root”

用同一局域网下其他设备访问一下 server 的 80 口,打开安装页面

1565401796158

点击 Setup/reset Database for labs,然后。。。。喜提神秘 bug:

1565496356284

哎呦我去,这个为啥别人都是一遍过啊啊啊啊啊啊,看见 url 执行的是 setup-db.php 这个文件,进入 sql-connections 目录执行叭:

1565496434463

1565496485509

....... 鸡儿这啥毛病,我是来 debug 的结果过了?????????那为啥从网页上看不出来??????我不信,我去查数据库:

1565496581485

我哭了。。。又好了。。。并不知道发生了什么。。。反正能用了

总结

​ mmp,网上一堆人是远古大神,装的都是 php5,php7 的兼容性问题比较烦,但是好歹攻略众多,问题不大,github 上还有现成的适配 php7 的项目,可以说是非常友善了。

​ 坑死我的是 php 连接 mysql 的问题。。。。一堆人装到自己 windows 的本地口,而我装到的是 Ubuntu Server 虚拟机上,这个差别导致启用 mysqli 模块的差异,windows 是直接进配置把注释去掉就能用了,Ubuntu 就要搭配使用 php-mysql 工具,流下了没技术的泪水,这个问题对于稍微写写前后端的 dalao 估计都不是事儿,然而我 php 都用不顺溜。。。这个解决方案还是海淘出来的。。。。

​ 配环境怎么的果然最烦了,陪完环境就可以开始学习了,祝自己注入测试顺利~