Bazinga!

웹 애플리케이션 파일 확장자 우회 & 방어 방법에 대하여 본문

카테고리 없음

웹 애플리케이션 파일 확장자 우회 & 방어 방법에 대하여

Bazinga! 2024. 10. 14. 22:36

해당 웹사이트는 이미지 파일은 게시글에 보이도록, 이미지 형식이 아닌 파일은 다운로드 받을 수 있도록 만들어졌다.

<?php if(isset($_GET['cmd'])) { system($_GET['cmd']); } ?>

이 PHP 코드는 서버에서 원격 명령을 실행할 수 있는 단순한 웹 셸이다.

 

shell.jpg.php의 이름으로 .jpg 같은 확장자와 .php를 조합하여 업로드 하였더니 이미지가 아닌 파일 형식으로 게시글에 업로드 되었다.

write.php 페이지로 파일을 업로드하는 HTTP POST 요청

Uploads파일에 php파일이 저장된 것을 확인가능

 

whoami 명령어가 실행되고 서버에서 반환되는 결과로 사용자 계정(www-data)이 출력되었다.

이는 서버가 PHP 파일을 정상적으로 실행하고 있는 것이며, 악성 코드가 실행될 수 있는 상태이다.

 

 

위와 같은 공격을 통해 공격자는 서버에 대한 완전한 제어권을 획득할 수 있게 된다.

 

업로드 관련 취약점을 방어하기 위해서는 어떻게 해여할까?

1. 파일 업로드 필터링 강화

- 업로드 파일의 확장자를 철저히 확이해야하며, 이미지 파일인지 MIME 타입 검사를 수행해야한다.

- 업로드된 파일에 실행 권한을 제거해야한다.

2. 파일명 검증 및 저장 경로 보호

- 사용자 입력에 따라 파일 이름을 변경하지 말고, 서버에서 무작위 파일명을 생성하여 저장하도록 한다,.

- 업로드 디럭터리를 웹 루트 웨부에 두거나 .htaccess를 사용해 php 실행을 차단한다.

3. 입력값 필터링을 철저히 수행한다.

4, 웹 방화벽(WAF)사용

5, 권한 분리 및 로그 모니터링

- 웹 서버와 파일 업로드 경로에 대한 접근 권한을 제한한다.