정보 보안/모의해킹

SQL 인젝션 실습 1편 - DVWA 환경 구성 (Docker)

y0.0ns 2026. 7. 14. 20:08

들어가며

SQL 인젝션 개념 글에서 원리를 정리했는데, 직접 실습해보고 싶어서 DVWA를 Docker로 띄워봤다. 버퍼 오버플로우 실습 때처럼 Docker를 활용하면 내 PC에 영향 없이 취약한 환경을 만들 수 있다. 생각보다 환경 구성이 간단해서 금방 실습까지 들어갈 수 있었다.

⚠️ 주의: DVWA는 의도적으로 취약하게 만들어진 실습용 애플리케이션이다. 반드시 로컬 환경에서만 사용하고 인터넷에 노출되는 서버에는 절대 올리지 말 것.

SQL 인젝션 개념 글: CWE-89: SQL 인젝션 완전 정리


1. DVWA란?

Damn Vulnerable Web Application의 줄임말
→ 의도적으로 취약하게 만들어진 웹 애플리케이션

목적:
→ SQL 인젝션, XSS, CSRF, Command 인젝션 등
  다양한 웹 취약점을 안전한 환경에서 실습
→ 난이도 조절 가능 (Low / Medium / High)

 

왼쪽 메뉴에서 확인 가능한 취약점 목록:

항목 설명
SQL Injection SQL 인젝션 실습
SQL Injection (Blind) Blind SQL 인젝션 실습
XSS (DOM/Reflected/Stored) XSS 세 가지 유형 실습
Command Injection OS 명령어 인젝션 실습
Brute Force 무차별 대입 공격 실습
File Upload 악성 파일 업로드 실습

2. 사전 준비

Docker가 설치되어 있어야 한다. Docker 설치 방법은 아래 글 참고.

Docker 환경 구성 글: 버퍼 오버플로우 실습 1편 - 환경 구성


3. DVWA 실행

CMD에서 아래 명령어 입력:

bash
docker run -it --privileged -p 80:80 --name dvwa vulnerables/web-dvwa

 

명령어 설명:

-it          : 터미널 입출력 활성화
--privileged : 컨테이너에 높은 권한 부여
               (Apache, MySQL 내부 서비스 실행 목적)
-p 80:80     : 컨테이너 80 포트를 내 PC 80 포트로 연결
               → 브라우저에서 http://localhost 로 접속 가능
--name dvwa  : 컨테이너 이름 지정
vulnerables/web-dvwa : Docker Hub의 DVWA 공식 이미지

4. 브라우저에서 접속 및 로그인

브라우저에서:

http://localhost

접속하면 로그인 화면이 뜬다.

ID: admin
PW: password

 


5. DB 초기화

로그인하면 Database Setup 화면으로 이동한다.

Create / Reset Database 버튼 클릭.

클릭하면 DB가 생성되고 로그인 화면으로 이동


6. 다시 로그인

ID: admin
PW: password


7. 메인 화면 확인

로그인하면 DVWA 메인 화면이 뜬다. 좌측 하단에서 현재 설정을 확인할 수 있다.

Username: admin
Security Level: low
PHPIDS: disabled

 

Security Level 설명:

레벨 설명
Low 입력값 검증 없음. 가장 취약한 상태. 실습 시작에 적합
Medium 일부 필터링 적용. 우회 기법 필요
High 강한 보안 적용. 고급 우회 기법 필요

PHPIDS란?

PHP Intrusion Detection System
→ SQL 인젝션, XSS 같은 공격 패턴을 탐지/차단하는 보안 모듈
→ disabled = 꺼진 상태 → 공격이 그대로 통과
→ 실습에 최적화된 상태

8. SQL Injection 메뉴 접속

왼쪽 메뉴에서 SQL Injection 클릭.

User ID 입력창이 있는 화면이 뜨면 환경 구성 완료.


9. 컨테이너 재접속 방법

Docker Desktop을 껐다가 다시 켤 때:

bash
docker start dvwa

브라우저에서 http://localhost 접속하면 바로 사용 가능하다.


마무리

DVWA 환경 구성이 완료됐다. 다음 글에서는 실제로 SQL 인젝션 공격을 단계별로 진행한다. Low 레벨에서 기본 공격부터 시작해서 DB 전체 정보를 추출하는 과정까지 다룬다.

다음 글: SQL 인젝션 실습 2편 - DVWA Low 레벨 공격