[normaltic 취업반 5기] 2024-02-07 14주차 내용 정리

2024. 2. 8. 03:20normaltic 취업반 5기/내용 정리

 

파일 업로드(File Upload) 취약점

 

  파일 업로드 취약점은 파일 업로드 기능이 존재하는 웹 사이트에서 업로드 파일에 대한 검사가 미흡하여 서버단에서 실행될 수 있는 파일들이 업로드되는 취약점을 의미한다. 업로드된 파일들 중 웹 상에서 직접 실행할 수 있는 경우 서버가 공격자에 의해 장악될 수도 있다.

 

파일 업로드 공격

 

 

 파일 업로드 공격 시나리오

 

  파일 업로드 취약점으로 인한 공격 과정은 다음과 같다.

 

  1. 공격대상 웹 사이트에 파일 업로드 기능이 존재하는지 확인한다.
  2. 해당 웹 사이트에서 사용하고 있는 벡엔드 언어를 확인한다.(php, jsp, asp 등)
  3. 확인한 벡엔드 언어로 작성한 악성 코드 파일을 해당 웹 사이트에 업로드 한다.
  4. 업로드한 악성 코드 파일이 존재하는 경로를 확인한다.
  5. 경로가 파악되었으면 웹 브라우저 주소창에 경로를 입력하여 업로드된 악성 코드 파일을 요청한다.
  6. 공격대상 웹 서버를 장악한다.

 

파일 업로드 공격 예시 : 웹쉘

 

  웹쉘 공격이란 파일 업로드 취약점이 존재하는 웹 사이트에 악성 코드 파일을 업로드하여 웹 상에서 공격대상 서버에 명령을 내릴 수 있는 공격을 의미한다. 주로 GET 메서드 방식으로 서버에 명령을 내릴 수 있는 명령어를 파라미터로 받는 방법으로 진행된다. 

 

1) 웹쉘 공격 페이로드

 

1
2
3
4
5
<?php
 
    echo system($_GET['cmd']);
 
?>
cs

 

  테스트에 사용될 웹 사이트는 PHP를 서버 측 언어로 사용하며 이에 맞춰 업로드 파일을 PHP 파일로 작성한다. 해당 코드는 GET 메서드 방식으로 'cmd'란 파라미터에 서버 명령어를 입력하여 웹 브라우저 주소창에 입력하면 서버에 명령을 내릴 수 있는 코드이다.

 

2) 웹쉘 공격 과정

 

[1] 파일 업로드 웹 페이지 찾기

 

  공격대상 웹 사이트에서 파일 업로드 기능이 존재하는 웹 페이지를 찾는다. 해당 웹 사이트에서는 게시판에 올리는 게시글에서 파일을 업로드할 수 있다.

 

[2] 간단한 웹쉘 파일 작성

 

 

  간단한 웹쉘 코드를 메모장에 입력 후 다른 이름으로 저장하여 .php 확장자를 가진 php 파일로 저장한다.

 

[3] 웹쉘 파일 업로드

 

 

  웹쉘 파일을 등록 후 게시글을 작성한다.

 

[4] 파일 업로드 경로 찾기

 

 

  파일 업로드 경로는 첨부파일에 존재하는 '다운로드'  문자에 마우스 커서를 올리면 툴팁으로 알려주는 경우가 더러 있다. 그로 인해 파일 업로드 경로를 찾았으며 파일 업로드 경로는 /file/uploads이다.

 

[5] 웹쉘 파일 실행

 

 

  서버 명령어를 cmd 파라미터에 입력하여 업로드된 파일 경로와 함께 웹 브라우저 주소창에 입력하면 서버에 명령을 내린 결과가 웹 상에 출력된다.

 

 

파일 업로드 공격 대응 방안 및 우회 방법

 

  파일 업로드 공격에 대한 대표적인 대응 방안은 다음과 같다.

 

  • 파일 유형(Content-Type) 제한
  • 실행 권한 제한
  • 파일 확장자 검사
  • 파일 시그니쳐(File Signature) 검사

 

1) 파일 유형(Content-Type) 제한

 

  서버에서는 요청 헤더 내의 Content-Type 헤더 값으로 업로드되는 파일의 종류를 확인할 수 있다. 파일 업로드 공격을 방지하기 위해서 서버에서는 Content-Type 헤더 값을 검사하여 적합하지 않은 파일은 업로드되지 못하도록 만들 수 있다.

 

=> 우회 방법 : 데이터 전달 시 프록시툴(Burp Suite 등)로 전달되는 데이터를 중간에 가로채어 Content-Type 헤더 값을 서버에서 화이트리스트에 등록한 값으로 변경하여 성공적으로 파일을 업로드할 수 있다.

 

 

2) 실행 권한 제한

 

  파일이 업로드되는 디렉터리 /upload_files가 존재할 때 해당 디렉터리 내에서 실행 권한을 제거하여 파일 업로드 경로가 유출되어도 실행이 불가능하게 하여 파일 업로드 공격을 방지한다.

 

=> 우회 방법 : 등록하는 파일명을 '../webshell.php' 형태로 변경하면 /upload_files 디렉터리의 상위 디렉터리에 파일을 업로드시킬 수 있다. 상위 디렉터리는 실행 권한이 제거되지 않을 가능성이 농후하여 파일 업로드 공격이 가능하다.

 

 

3) 파일 확장자 검사

 

  파일 업로드 시 등록되는 파일의 확장자를 검사하여 특정 확장자만을 등록할 수 있도록 하여 파일 업로드 공격을 방지한다.

 

=> 우회 방법 : 파일 확장자 검사를 화이트리스트 기반이 아닌 블랙리스트 기반으로 수행할 경우 확장자명을 변경하여 우회할 수 있다. 이로 인해 파일이 업로드되어 공격이 가능하다.

 

 

4) 파일 시그니쳐(File Signature) 검사

 

  파일들은 각 확장자마다 가지고 있는 시그니쳐 값이 존재하는데 이는 Hex editor를 통해 확인이 가능하다. 서버에서 전달되는 파일의 종류를 파일 시그니쳐를 통해 확인하여 파일 업로드 공격을 방지할 수 있다.

 

=> 우회 방법 : 파일 시그니쳐만으로 파일의 종류를 확인하는 경우 Hex editor로 업로드되는 파일 hex data 마지막에 웹쉘 PHP 코드를 삽입하여 등록하게 되면 파일 업로드 공격이 가능하다.