使用 docker 架設 sqli-lab

Posted by summer on February 21, 2021

Sqli-lab

sqli-lab 是一個 sql 注入的練習平台,這次我使用 docker 來架設這個環境

sqli-lab 所需要的環境為 apache php5.3 mysql

尤其是 php5.3,因為 sqli-lab 使用了舊語法,所以對 php 版本有要求

Docker LAMP

LAMP 是 Linux Apache php phpmyadmin 的縮寫,要在 Docker 上架設一個 LAMP server 需要編寫 docker-compose

Docker pull

首先要先把會用到的 docker image pull 下來

1
2
3
docker pull php:5.3-apache
docker pull mysql
docker pull phpmyadmin/phpmyadmin

Dockerfile 編寫

因為 pull 下來的 php 內並沒有含 php.ini,必須自行加入,寫一份 dockerfile 來加入 php.ini

先建立資料夾

1
2
3
4
+-- phpini-php5.3-apache
    +-- dockerfile
    +-- php.ini

dockerfile 內容

1
2
3
FROM php:5.3-apache
COPY php.ini /usr/local/lib
EXPOSE 80

FROM 是基底,然後將 php.ini 複製進 /usr/local/lib 目錄內,最後宣告對外 port 為 80

接下來就可以利用這個 dockerfile 建立新的 docker image 了

1
docker build -t phpini-php5.3-apache .

-t 是名子與tag 可以用 “:” 來加上 tag 如 name:tag . 是指用當前目錄的 dockerfile

docker-compose

image 準備好了後就可以開始準備 docker-compose 了

version: '3.3'

services:
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
    ports:
      - "3306:3306"
  phpapache:
    image: phpini-php5.3-apache
    ports:
      - "8081:80"
    depends_on:
      - db
    volumes:
      - ./sqli-labs:/var/www/html
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8082:80"
    depends_on:
      - db
    environment:
      PMA_HOST: db
      PMA_PORT: 3306

docker-compose 有三項服務,各自加上環境變數

接下來透過 docker-compose up 啟動

sqli-lab 設定

sql-connections 資料夾內有 db-creds.inc 需要設定資料庫 ip 和帳號。 資料庫 ip 可以用 docker insect 來得到 ip 地址

問題

在第一次測試 sqli-lab 時,遇到無法注入的問題,這是 php 魔法引號的原因,把 php.ini 中設定

magic_quotes_gpc = Off

magic_quotes_runtime = Off

magic_quotes_sybase = Off

就能解決