1. 前言
我们在刚学习 SQL 注入的时候,往往都需要一个能 SQL 注入的网站进行 SQL 注入学习。如果直接去网上寻找存在 SQL 注入的网站对新手来说有些难度,因此我们一般都是在本地搭建一个能 SQL 注入测试的网站。
这里就来讲解一下 SQLi-Labs 的下载,安装,搭建教程。
注意: PHP 版本一定要设置成 PHP5 以上,PHP7 以下,PHP5 以上才有 information_schema 库,PHP7 之后的 mysql_ 都改成了 mysqli_** 了,所以用其他版本的 PHP 可能会出错。
2. SQLi-Labs
2.1 SQLi-Labs 是什么
SQLi-Labs 是一个专业的 SQL 注入练习平台,它适用于 GET 和 POST 等多场景的注入。
2.2 SQLi-Labs 注入场景
- 基于错误的注入(Union Select)
- 字符串
- 整数
- 基于误差的注入(双查询注入)
- 盲注入
- 基于 Boolean 数据类型注入
- 基于时间注入
- 更新查询注入(update )
- 插入查询注入(insert )
- Header 头部注入
- 基于 Referer 注入
- 基于 UserAgent 注入
- 基于 cookie 注入
- 二阶注入,也可叫二次注入
- 绕过 WAF
- 绕过黑名单\过滤器\剥离\注释剥离 OR&AND 剥离空格和注释剥离 UNION 和 SELECT
- 隐瞒不匹配
- 绕过 addslashes() 函数
- 绕过 mysql_real_escape_string() 函数(在特殊条件下)
- 堆叠注入(堆查询注入)
- 二级通道提取
3. SQLi-Labs 下载
在下载源码前我们首先需要知道自己的 PHP 是什么版本:
- 如果是 php5.x,请访问 sqli-labs
- 如果是 php7.x,请访问 sqli-labs-php7
下图是 php5.x 版本源码
4. SQLi-Labs 安装
4.1 Windows 环境安装
环境:Windows 10 + PHP 5.45 + MySQL 5.5.53
由于 SQLi-Labs 需要 PHP+MySQL 的环境,我们使用的是 phpStudy 这个软件。
4.1.1 解压
首先我们将刚才下载的源码压缩包解压到 phpStudy 的网站根目录下,如我的:C:\phpStudy\PHPTutorial\WWW\sqli-labs-master(为了方便访问我将目录更名为 sqli)
4.1.2 修改配置文件
修改 \sqli\sql-connections 目录下的 db-creds.inc 文件内容,将数据库默认的信息修改为自己数据库的信息
<?php
//give your mysql connection username n password
$dbuser ='root';
$dbpass ='';
$dbname ="security";
$host = 'localhost';
$dbname1 = "challenges";
主要是修改 dbpass 的内容,部分 linux 下默认为空,phpStudy 的 Windows 版中默认为 root,如果使用其他环境则根据具体环境修改即可。
4.1.3 安装
打开浏览器访问「http://127.0.0.1/sqli/」并点击「Setup/reset Database for labs」来初始化创建数据库
4.1.4 访问
在浏览器打开 http://127.0.0.1/sqli/
就看到 SQLi-Labs 的内容了,分为基础 SQL 注入、高级 SQL 注入、SQL 堆叠注入、挑战四个部份,总共约 75 个 SQL 注入漏洞。
4.2 Linux 环境安装
环境:Ubuntu 18.04 + PHP 7.2.24 + MySQL 5.7.30
所以需要安装 LAMP 环境,可以查看 Ubuntu 18.04 搭建 Lamp 环境。
4.2.1 下载源码
根据自己服务器上 php 的版本下载相应的源码,我这里是 php7 的环境。
sudo apt-get install git
sudo git clone https://github.com/skyblueee/sqli-labs-php7 /var/www/html/sqli-labs
4.2.2 修改配置文件
下载完成后进入 /var/www/html/sqli-labs 文件夹,找到 sql-connections/db-creds.inc 文件并修改其中的内容为我们的数据库用户名和密码。
<?php
//give your mysql connection username n password
$dbuser ='root'; //修改成你数据库的用户名
$dbpass =''; //修改成你数据库的密码
$dbname ="security";
$host = 'localhost';
$dbname1 = "challenges";
?>
4.2.3 安装
修改完成后打开浏览器访访问 ip/sqli-labs,点击 Setup/reset Database for labs 进行安装
如果遇到以下情况,多半是因为配置文件的问题,Linux 默认没有密码,所以需要设置一下 MySQL 的密码。
看到以下页面说明安装成功。
4.3 Docker 环境安装
这里我使用的是 Docker version 19.03.6
4.3.1 搜索镜像
首先需要搜索镜像
docker search sqli-labs
4.3.2 拉取镜像
这里我选择 acgpiano
docker pull acgpiano/sqli-labs
4.3.3 创建容器
创建一个新的容器并运行,这里的名字 sqli-labs 和端口 9999 大家可以自行修改
docker run -dt --name sqli-labs -p 9999:80 --rm acgpiano/sqli-labs
4.3.4 安装
访问 ip:port,同样的点击 Setup/reset Database for labs 初始化创建数据库,然后再次访问点击下面的题目即可。