CentOS 7 系统(已装 Docker)SQLi-Labs 容器安装教程

一、推荐方式:直接拉取镜像(1分钟启动,首选)

无需复杂配置,直接使用社区成熟镜像,包含 Apache + PHP + MySQL 完整环境:

1. 拉取 SQLi-Labs 镜像

打开 CentOS 7 终端,执行以下命令拉取镜像(维护活跃、兼容 CentOS):

docker pull acgpiano/sqli-labs

2. 启动容器(映射端口+后台运行)

docker run -d -p 80:80 -p 3306:3306 --name sqli-labs --restart=always acgpiano/sqli-labs
  • 参数说明:
    • --restart=always:CentOS 重启后容器自动启动(避免手动重启);
    • -p 80:80:主机 80 端口映射容器 Apache 端口(访问网页用);
    • -p 3306:3306:主机 3306 端口映射容器 MySQL 端口(可选,如需本地连接数据库);
    • --name sqli-labs:容器命名,方便后续管理。

3. 验证容器状态

执行命令查看容器是否正常运行:

docker ps

若输出中包含 sqli-labsSTATUSUp(如 Up 5 minutes),则启动成功。

二、访问并初始化靶场

1. 访问靶场页面

打开本地浏览器(或其他设备浏览器),输入地址:

http://你的CentOS主机IP  # 如 http://192.168.1.100

在这里插入图片描述

  • 若 CentOS 7 开启了防火墙,需放行 80 端口(否则无法访问),执行以下命令:
    # 放行 80 端口(永久生效)
    sudo firewall-cmd --permanent --add-port=80/tcp
    # 重启防火墙使配置生效
    sudo firewall-cmd --reload
    

2. 初始化数据库

首次访问会进入 SQLi-Labs 配置页面,点击底部绿色按钮 Setup/reset Database,自动创建靶场所需的 security 数据库、测试表和数据。

  • 若提示「数据库连接失败」:默认 MySQL 密码为 root,无需修改配置,刷新页面重试即可(镜像已预设好连接参数)。

3. 开始练习

初始化成功后,点击顶部 Home 回到首页,即可选择 Less-1 ~ Less-65 进行 SQL 注入练习(Less-1 是最基础的联合查询注入)。

三、CentOS 专属操作与避坑

1. 端口冲突解决(CentOS 常见)

  • 80 端口被占用(如 Apache、Nginx):修改映射端口为 8080(或其他闲置端口),例如:

    # 停止原有冲突容器
    docker stop sqli-labs
    # 重新启动,映射 8080 端口
    docker run -d -p 8080:80 -p 3306:3306 --name sqli-labs --restart=always acgpiano/sqli-labs
    # 放行 8080 端口(防火墙)
    sudo firewall-cmd --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
    

    访问地址改为:http://你的CentOSIP:8080

  • 3306 端口被本地 MySQL 占用:修改 MySQL 映射端口为 3307,例如:

    docker run -d -p 80:80 -p 3307:3306 --name sqli-labs --restart=always acgpiano/sqli-labs
    

    不影响靶场使用(靶场内部已自动连接容器内 MySQL)。

2. 容器常用管理命令(CentOS 终端执行)

操作命令
停止容器docker stop sqli-labs
重启容器docker restart sqli-labs
查看容器日志(排错)docker logs sqli-labs
进入容器内部(调试)docker exec -it sqli-labs /bin/bash
删除容器(需先停止)docker rm sqli-labs

3. 防火墙额外说明

CentOS 7 默认启用 firewalld,若后续无法访问靶场,可检查端口是否放行:

# 查看已放行端口
sudo firewall-cmd --list-ports
# 若未显示 80/tcp 或 8080/tcp,重新执行放行命令

四、可选:自定义 MySQL 配置(Docker Compose 方式)

若需修改 MySQL 密码、持久化数据,可使用 Docker Compose(CentOS 7 需先安装):

1. 安装 Docker Compose

# 下载最新版本
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

2. 创建配置文件

# 新建文件夹存放配置
mkdir -p /opt/sqli-labs && cd /opt/sqli-labs

# 新建 docker-compose.yml 文件
sudo vi docker-compose.yml

粘贴以下内容(自定义 MySQL 密码、端口):

version: '3'
services:
  mysql:
    image: mysql:5.7  # 兼容 SQLi-Labs,避免 MySQL 8.0 权限问题
    container_name: sqli-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: yourpass123  # 自定义 root 密码
      MYSQL_DATABASE: security
    ports:
      - "3307:3306"  # 映射 3307 端口,避免冲突
    volumes:
      - mysql-data:/var/lib/mysql  # 持久化数据
    networks:
      - sqli-net

  sqli-labs:
    image: acgpiano/sqli-labs
    container_name: sqli-labs
    restart: always
    ports:
      - "80:80"
    depends_on:
      - mysql
    networks:
      - sqli-net

volumes:
  mysql-data:
networks:
  sqli-net:

3. 启动服务

# 后台启动
docker-compose up -d

# 查看状态
docker-compose ps

访问和初始化步骤同上,若数据库连接失败,需进入容器修改配置:

# 进入 sqli-labs 容器
docker exec -it sqli-labs /bin/bash

# 编辑数据库配置文件
vi /var/www/html/sql-connections/db-creds.inc

# 修改 $dbpass 为你自定义的 MySQL 密码(如 yourpass123)
$dbpass = 'yourpass123';

# 保存退出(按 Esc,输入 :wq 回车)

总结

CentOS 7 已装 Docker 时,方式一(直接拉取镜像) 最便捷,执行 2 条命令即可启动靶场,配合防火墙放行 80 端口就能正常访问。若需自定义配置,再用 Docker Compose 方式,全程无需担心环境冲突,专注 SQL 注入学习即可~

更多推荐