본문으로 바로가기

DWVA Installation

category Web/DVWA 2018. 1. 24. 01:04

DVWA란?



Damn Vulnerable Web Application의 약자로 PHP와 MySQL로 만들어진 웹 애플리케이션 취약점을 구현한 웹 애플리케이션이다. 아래의 주소에서 자세한 정보를 확인할 수 있으며 최신버전을 다운받을 수 있다.





환경구성


DVWA를 설치하는 환경은 Ubuntu Xenial을 대상으로 한다.


패키지 설치

DVWA를 동작시키기 위해 웹 서버(여기서는 nginx를 사용)와 SQL 그리고 PHP를 설치한다.

DVWA의 설치 전 요구사항은 여기를 참고하자.


sudo apt install nginx

sudo apt install php php-mysqli php-gd

sudo apt install mysql-server


Nginx 및 php-fpm 설정

Nginx의 설정파일인 /etc/nginx/nginx.conf의 내용을 보면 다음과 같다.


user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##


...


        ##

        # Virtual Host Configs

        ##


        include /etc/nginx/conf.d/*.conf;

        include /etc/nginx/sites-enabled/*;

}


첫 줄은 nginx의 process를 www-data 권한으로 실행하는 것을 의미한다. 이를 참고하여 php-fpm의 설정에서 요구하는 실행 권한을 일치시켜야 된다. 위의 마지막 라인의 include 설정을 보면 sites-enabled 하위의 모든 파일을 설정파일로 지정하고 있다. 해당 경로에는 default 파일이 존재하며 이 default 파일은 sites-available/default 파일의 링크 파일이다.


결론은 sites-available/default 파일을 수정하면 된다는 말이다.


아래는 해당 파일의 기본 내용에서 PHP와 nginx 설정예시를 참고하여 작성한 설정파일이다. 볼드체로 표시된 부분을 작성해주면된다.


# Default server configuration

#

server {

        listen 80 default_server;

        listen [::]:80 default_server;


        # SSL configuration

        #

        # listen 443 ssl default_server;

        # listen [::]:443 ssl default_server;

        #

        # Note: You should disable gzip for SSL traffic.

        # See: https://bugs.debian.org/773332

        #

        # Read up on ssl_ciphers to ensure a secure configuration.

        # See: https://bugs.debian.org/765782

        #

        # Self signed certs generated by the ssl-cert package

        # Don't use them in a production server!

        #

        # include snippets/snakeoil.conf;


        root /var/www/html;


        # Add index.php to the list if you are using PHP

        index index.php index.html index.htm index.nginx-debian.html;


        server_name _;


        location / {

                # First attempt to serve request as file, then

                # as directory, then fall back to displaying a 404.

                try_files $uri $uri/ =404;

        }


        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #

        location ~* \.php$ {

                fastcgi_index   index.php;

                fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;

                include         fastcgi_params;

                fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;

                fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;

        }


...


index 지시자를 통해서 index.php 파일을 index 파일로 등록시켜주고 PHP파일을 사용하기위해 request가 php로 끝날경우 현재 설치된 php-fpm이 연 unix socket에 php파일을 전달하여 php 파일을 fpm이 처리할 수 있게 하는 내용이다.



php-fpm의 설정 파일은 Ubuntu(php7.0)의 경우 /etc/php/7.0/fpm/pool.d/www.conf에 위치한다.


; Unix user/group of processes

; Note: The user is mandatory. If the group is not set, the default user's group

;       will be used.

user = www-data

group = www-data


; The address on which to accept FastCGI requests.

; Valid syntaxes are:

;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on

;                            a specific port;

;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on

;                            a specific port;

;   'port'                 - to listen on a TCP socket to all addresses

;                            (IPv6 and IPv4-mapped) on a specific port;

;   '/path/to/unix/socket' - to listen on a unix socket.

; Note: This value is mandatory.

listen = /run/php/php7.0-fpm.sock


...


위의 설정파일에서 참고할 수 있듯 php-fpm의 유저 및 그룹 권한은 www-data로 실행되며 이는 nginx와 일치하여야 한다. 또한 php-fpm은 unix socket 형태로 listen하고 있음을 알 수 있다. 주소:포트 형태로 listen 할 수도 있다.


이렇게 설정을 완료했다면 php 파일이 제대로 웹서버에서 작동하는지 확인해보자.


Ubuntu에서 nginx의 기본 서비스 경로는 /var/www/html이며 nginx 설정 파일에서 확인할 수 있다. 다음과 같이 간단한 php파일을 생성한다.


echo "<?php phpinfo(); ?>" > /var/www/html/test.php


이런 화면이 나온다면 성공이다.



DVWA 설치

DVWA의 현재 github 프로젝트를 가져오기 위해 git clone 명령을 통하여 전체를 가져온다. 물론 해당 프로젝트를 nginx의 서비스 경로에 위치시켜야 한다.

원활한 실습을 위해서는 적절한 권한이 부여되야 된다. 그렇기 때문에 서버의 실행권한인 www-data의 소유로 DVWA 디렉터리 전체를 변경한다.


git clone https://github.com/ethicalhack3r/DVWA

sudo chown -R www-data:www-data DVWA


또한 DVWA의 설치 가이드에는 다음과 같은 사항이 언급되어 있다.


Please make sure your config/config.inc.php file exists. Only having a config.inc.php.dist will not be sufficient and you'll have to edit it to suit your environment and rename it to config.inc.php. Windows may hide the trailing extension.


DVWA의 디렉터리 하위 config/config.inc.php 파일이 존재하여야 만이 제대로 실행될 수 있다는 의미이다. 그러므로 config.inc.php.dist 파일을 복사하여 config.inc.php파일을 생성하고 해당 파일의 내용을 자신의 환경에 맞게(DB관련 설정) 수정하면 된다.


cp ./config/config.inc.php.dist ./config/config.inc.php



이렇게 설정이 다 완료되면 다음과 같이 초기 화면을 볼 수 있다.



Setup Check 항목에서 PHP관련 설정 상태를 확인 할 수 있다. 이러한 설정은 php-fpm의 php.ini 파일의 설정을 수정하면 즉각 해당 화면에 반영될 것이다.

이후 database setup 버튼을 통해 설정을 완료한다.


로그인 창에서 admin/password를 입력하고 로그인하면 DVWA를 이용할 수 있다.






참고