1. 필수 패키지 설치
SQLi-Labs는 구형 PHP 함수를 사용하므로, Ubuntu 24.04의 기본 PHP 버전 대신 PHP 8.1을 설치해야 합니다. 먼저 저장소를 추가하고 필요한 패키지들을 설치합니다.
# 시스템 업데이트 및 PPA 추가
sudo apt update && sudo apt upgrade -y
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
# PHP 8.1 및 관련 모듈 설치
sudo apt install php8.1 php8.1-fpm php8.1-mysql php8.1-gd php8.1-mbstring php8.1-curl -y
# Nginx 및 MariaDB 설치
sudo apt install nginx mariadb-server -y
2. SQLi-Labs 소스 코드 다운로드
웹 루트 디렉토리에 실습용 소스 코드를 클론합니다.
sudo mkdir -p /var/www/html/sqli-labs
sudo git clone https://github.com/Audi-1/sqli-labs.git /var/www/html/sqli-labs
sudo chown -R www-data:www-data /var/www/html/sqli-labs
3. PHP 8.1 호환성을 위한 코드 수정
기존 소스 코드는 구형 mysql_* 함수를 사용하므로, mysqli_* 라이브러리를 사용하도록 일괄 변경해야 합니다.
# 모든 PHP 파일에서 mysql_ 함수를 mysqli_로 교체
sudo find /var/www/html/sqli-labs -type f -name "*.php" -exec sed -i 's/mysql_/mysqli_/g' {} \;
이후 데이터베이스 연결 설정을 담당하는 sql-connections/db-creds.inc 파일을 수정합니다.
sudo nano /var/www/html/sqli-labs/sql-connections/db-creds.inc
<?php
$dbuser = 'sqli_admin';
$dbpass = 'strong_password';
$dbname = 'security';
$host = 'localhost';
?>
4. MariaDB 데이터베이스 초기화
실습 전용 데이터베이스 사용자를 생성하고 권한을 부여합니다.
sudo mysql -u root
-- 데이터베이스 사용자 생성
CREATE USER 'sqli_admin'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON *.* TO 'sqli_admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
5. Nginx 가상 호스트 설정
SQLi-Labs를 위한 별도의 서버 블록 설정을 생성합니다.
sudo nano /etc/nginx/sites-available/sqli-labs
server {
listen 8080;
server_name localhost;
root /var/www/html/sqli-labs;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
# 설정 활성화 및 서비스 재시작
sudo ln -s /etc/nginx/sites-available/sqli-labs /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
6. PHP 환경 설정 최적화
일부 실습 환경에서 에러 메시지를 확인하고 원격 파일 포함 기능을 사용하기 위해 php.ini를 수정합니다.
sudo nano /etc/php/8.1/fpm/php.ini
display_errors = On
allow_url_include = On
sudo systemctl restart php8.1-fpm
7. 실습 환경 최종 구성
웹 브라우저를 열고 http://서버_IP:8080/sql-connections/setup-db.php에 접속합니다. "Setup/reset Database" 버튼을 클릭하여 테이블 생성과 데이터 삽입이 정상적으로 완료되는지 확인합니다.
성공 메시지가 출력되면 이제 SQL 인젝션 공격 기법을 단계별로 학습할 수 있는 환경이 준비된 것입니다.