Covenant

본 포스트는 https://www.udemy.com/의 강좌 화이트헤커가 되기 위한 8가지 웹 해킹 기술 강좌를 바탕으로 작성했습니다.


파일업로드 공격이란?

 파일이 업로드 되는 페이지에 악성파일(웹셀 - 웹을 통해 시스템 명령어를 실행할 수 있는 웹 페이지)을 업로드한다.

 

공격시나리오

이미지를 업로드하는 페이지가 있다. 웹페이지가 이미지파일인지를 검사하지 않는 경우 해커는 이미지 파일 대신 웹셀을 업로드 할 수 있다. 해커가 웹 셀에 접근하면 웹셀이 실행된다. 그 이후 웹셀을 통해 해커가 원하는 대로 시스템 명령어를 실행할 수 있다.

 

파일 업로드 공격 실습

Low Level

git에서 root 디렉토리에 webshell.php를 가져온다.

webshell.php는 사용자 입력을 받는 폼을 출력한다.

뒷부분에는 cmd파라미터가 있으면 cmd로 실행하는 것이다. 폼에 값을 입력하면 시스템 명령으로 실행한다.

File Upload메뉴에 들어가서 업로드 한다.

localhost/dvwa/hackable/uploads/webshell.php에 들어간다.

커멘드 입력창이 있고 그것을 통해 시스템 명령어를 입력할 수 있다.

cat /etc/passwd입력하면 비밀번호가 나온다.

 

Medium Level

업로드에 실패한다.

버프스위프트 실행 -> Proxy -> Intercept -> Intercept is on -> 파일 업로드

Raw를 보면 Content-Type : application/x-php라고 나온다.

Content-Type: image/jpeg 로 바꾸면 된다.

 

High Level


확장자를 확인하고, 업로드 크기를 확인한다.


filename="webshell.php.jpg" 로 수정한다.

<?php 위에 GIF89a 입력

이것이 이미지 파일인 것처럼 속일 수 있다.

다만 localhost/dvwa/hackable/uploads/webshell.php.jpg 로 접근해야 하므로 실행되지는 않는다.

파일 인클루젼으로 이를 실행할 수 있다.

File Inclusion으로 가서 ?page=file/../../../hackable/uploads/webshell.php.jpg입력하면

webshell을 실행할 수 있다. 웹페이지에서 실행하면 안 되고

?page=file/../../../hackable/uploads/webshell.php.jpg&cmd=cat /etc/passwd

 

Impossible Level


이미지 파일인지 확인하고 최종적으로 이미지 파일을 다시 생성한다.

다른 방법으로 업로드 된 파일의 이름을 랜덤하게 생성해서 해커가 자기가 만든 파일에 접근하지 못하게 한다.

업로드 서버를 웹 에플리케이션 서버와 분리한다.

업로드 폴더의 실행권한을 완전히 제거하고 파일인클루젼 공격에서 완전히 대응해서 업로드 파일이 웹 에플리케이션에서 실행하는 것을 완전히 차단한다.