파일 업로드¶
파일 업로드 취약점에서 기본으로 활용되는 방법과 클라이언트 측 검증을 우회하는 방법에 대해서 설명하고자 한다.
백엔드: PHP
1. 파일 업로드 취약점¶
해당 취약점은 서버에 파일을 업로드할 때 확장자 검증 미흡으로 인해, 서버의 환경에 맞는 확장자 파일이 업로드되면서 임의 코드를 삽입해서 원격에서 실행시킬 수 있는 취약점을 의미한다.
취약점을 이용해 시스템 내부에 접근할 수 있기 때문에, 영향력/파급력이 상당히 높은 취약점에 해당된다.
가볍에 시도해 볼 수 있는 확장자는 PHP, JSP, ASP가 있으며 예시를 기반으로 설명하고자 한다.
- JavaScript 코드 및 함수에 명시된 확장자 우회
- 확장자 검증 기능 일시적 비활성화 및 삭제(새로고침 및 재접근 전까지 유지)
2. 취약점 예시¶
웹 서비스에서 사용자 프로필을 업로드하는 기능이 있다. 이때 파일 확장자를 검증하지 않아서 웹쉘 파일 업로드를 이용한 원격 코드 실행 취약점이 발생한다.
2.1. 서비스 기능 탐색¶
웹 서비스에서 이미지 등 프로필을 업로드할 수 있는 기능을 우선적으로 탐색한다.
다음 기능을 확인해보면 이미지를 업로드해서 사용자의 프로필이 변경되는 것을 알 수 있다.

이미지를 업로드하면 업로드 경로를 확인할 수 있고 이미지에 직접 접근할 수 있다.

2.2. 서버 확장자로 WebShell 업로드¶
프로필 이미지를 업로드할 때, .png 파일이 아닌 .php 확장자로 업로드를 시도한다.
- 이때, 클라이언트 또는 서버에서 확장자 검증을 수행한다면 우회를 시도해야 한다.

기본적으로 사용되는 PHP WebShell 코드는 다음과 같이 구성할 수 있다.
url?cmd={command}로 원격에서 임의 코드를 바로 실행시킬 수 있음
<?php system($_GET['cmd']); ?>
2.3. WebShell로 임의 명령어 실행¶
업로드한 웹쉘 파일을 이용해서 cmd 파라미터로 임의 명령어를 실행할 수 있다.
HTML코드를 이용해서 시각화할 수 있으며,Ctrl + U (소스보기)기능으로도 보기 쉽게 시각화할 수 있다.
