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

2024. 2. 15. 07:37normaltic 취업반 5기/내용 정리

 

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

 

1) 정의

 

  공격자가 임의의 파일을 웹 서버에 업로드 가능한 공격 => 서버 측에서 실행될 수 있는 파일을 업로드하는 것이 핵심

 

2) 원리

 

  1. 공격자는 공격대상 서버에서 사용하고 있는 벡엔드 언어로 이루어진 파일 작성한다.
  2. 공격대상 서버의 파일 업로드 기능으로 파일을 업로드한다.
  3. 업로드된 파일의 저장된 경로를 확인한다.
  4. 저장된 경로를 웹 브라우저에 입력하여 파일을 요청한다. 
  5. 요청된 파일이 웹 서버에서 실행되어 그 결과가 웹 브라우저에 출력된다.

 

 

파일 업로드(File Upload) 취약점 우회 방법

 

1) .htaccess 파일 업로드

 

  파일이 저장되는 디렉터리에 .htaccess 파일을 업로드하여 특정 확장자로 이루어진 파일을 설정한 확장자로 실행되도록 한다. 예를 들어 .jpg 파일을 .htaccess 파일이 저장된 경로에서는 .php로 실행되도록 만든다. 이는 AddType application/x-httpd-php .jpg 코드를 .htaccess 파일에 입력하면 된다. 물론 .jpg 뿐만 아니라 임의로 만든 확장자 이름도 적용시킬 수 있으며 php 뿐만 아니라 다른 타입으로도 변경 가능하다.

 

2) Null Byte Extension 우회 방법

 

 파일명에 널 바이트를 삽입하여 필터링을 우회한다. 예를 들어 webshell.php%00.jpg로 이루어진 웹쉘 파일을 웹 서버에 업로드한다. 업로드한 파일 요청 시 '%00' 문자는 리눅스로 이루어진 서버에서 종단문자로 인식하여 .jpg 문자는 무시해 버린다. 그렇게 되면 결국 webshell.php%00.jpg 파일은 php 파일로 실행이 되어 웹쉘 파일이 실행된다.

  

3) Content-Type 필터링 우회

 

  Content-Type을 필터링 기준으로 사용하는 경우 업로드 시 Content-Type을 위조하여 우회한다. 파일 업로드 시 전달되는 Content-Type을 프록시툴로 인터셉트하여 위조하면 우회하여 파일을 업로드 가능하다. 

 

업로드 파일의 Contet-Type이 application/octet-stream으로 인식
Contet-Type을 image/png로 위조하여 필터링 우회

 

 

파일 인클루젼(File Inclusion) 취약점

 

  파일 인클루젼 취약점은 임의의 파일을 특정 웹 페이지에 포함시켜 공격자가 원하는 응답 결과 혹은 데이터를 출력시킨다. 이때 가져오는 파일의 위치에 따라 LFI(Local File Inclusion)RFI(Remote File Inclusion)로 분류된다. 

 

  파일을 가져오는 함수로 인해 취약점이 발생하는데, php를 예를 들어 include(), include_once(), require(), require_once() 등의 함수의 매개변수로 입력가능한 파일이 존재한다면 공격이 가능하다.

 

1
2
3
4
5
<?php
 
    include($_GET['page']);
 
?>
cs

 

  예시로 위 코드를 포함하고 있는 파일에서 GET 메서드로 page 파라미터값에 포함하고자 하는 파일 경로를 입력하여 웹 브라우저에 요청하면 가져온 파일을 실행하여 응답 결과를 해당 페이지에 출력한다.

 

  파일 인클루젼 취약점을 이용한 공격 예로 웹 서버 로그 파일을 가져오는 공격 방법이 존재한다.

 

  1. 웹 브라우저 주소창에 <?php system($_GET['cmd']); ?>를 입력한다. (웹쉘 코드뿐만 아니라 실행하고자 하는 코드 모두 가능)
  2.  입력한 코드는 에러로 분류하여 웹 서버 내 로그에 기록된다.
  3. 로그는 /opt/lampp/logs/access_log 파일에 기록된다.(에러를 기록한 로그는 시스템마다 다를 수 있기 때문에 꼭 확인한다.)
  4. LFI 취약점으로 파라미터 값에 '../../../../../../../../../opt/lampp/logs/access_log&cmd=명령어'를 입력한다.
  5. 웹쉘 코드가 실행되어 공격에 성공한다.

 

  파일 인클루젼 취약점은 내외부에서 파일을 가져오긴 하지만 가져온 파일을 실행시킨 결과가 출력되는 것이기 때문에 소스코드 자체를 가져오진 못한다. 

 

 

파일 다운로드(File Download) 취약점

 

  파일 다운로드 취약점은 웹 서버 혹은 외부에서 임의의 파일을 다운로드할 수 있는 취약점이다. 이를 통해 중요한 정보가 포함된 파일이 다운로드된다면 2차 피해로 이어져 위험하다. 주로 다운로드 시 파라미터 값으로 파일 경로를 받는 경우 파일 다운로드 취약점이 발생할 가능성이 높다.