Ubuntu 24.04 환경에서 PHP 8.1과 Nginx를 이용한 SQLi-Labs 취약점 실습 환경 구축

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 인젝션 공격 기법을 단계별로 학습할 수 있는 환경이 준비된 것입니다.

태그: ubuntu nginx PHP8.1 MariaDB SQL-Injection

7월 16일 22:55에 게시됨