Web 공부/개념정리
파일 업로드란?
sniffy-fanta
2025. 7. 10. 14:25
1. 파일 업로드 공격이란?
파일 업로드 공격이란 웹 서비스의 파일 업로드 기능이나 설정의 취약점을 이용해, 악성 스크립트(웹셸 등)를 서버에 업로드하는 방식의 공격이다. 공격자는 이렇게 업로드한 파일을 실행함으로써 서버 내부에 침투하거나 시스템을 제어할 수 있으며,
이로 인해 데이터 유출이나 추가적인 공격 도구 설치 등 다양한 피해로 이어질 수 있다.
2. 공격 목적
2.1. 웹서버 침투
- 웹서버에 침투해 DB 연결정보를 확보할 수 있고, 이를 통해 2차로 DB 쿼리를 조작할 수 있다.
2.2. 내부망(포탈, 로그서버 등) 추가 공격
- 포트포워딩/터널링 기반으로 내부 시스템까지 접근이 가능하다.
2.3. 부가 공격
- 웹사이트 변조(`Deface`), 피싱 페이지 업로드, 파일 삭제/수정/유출, `XSS`, `DoS` 등 다양한 피해가 발생할 수 있다.
3. 공격 방법
3.1. 파일 저장
✅첨부한 파일이 실제 서버 경로에 저장돼야 한다.
3.2. 웹셸 업로드
✅실행 가능한 파일(웹셸)을 업로드한다.
✅이때, 반드시 서버와 동일한 언어의 파일이어야 한다.
3.3. 업로드 경로 파악
✅파일 다운로드 기능이 제공되는 게시글이나 페이지로 이동하여, 업로드된 파일의 실제 저장 경로를 확인한다.
3.4. 웹셸 접속
✅앞서 파악한 파일의 경로를 URL로 요청을 보내 파일에 접근한다.
4. 기본 방안
4.1. 확장자 제한
- `.png`, `.jpg`, `.docx` 등만 허용한다. (화이트 리스트 필터링)
- `.php`, `.jsp`, `.asp`, `.exe` 등 거부한다. (블랙 리스트 필터링)
4.2. MIME 타입 검사
- `image/jpeg`, `image/png` 등 업로드 파일의 `Content-Type`으로 제한한다.
4.3. 파일 크기 제한
- 큰 웹셸이나 바이너리 업로드 막기 위해 `php.ini`, `nginx.conf` 에서 `max_upload_filesize`을 지정한다.
4.4. 업로드 파일명 난수화/무작위화
- 업로드 시 파일명을 난수화 한 후 저장한다.
4.5. 업로드 디렉토리 실행권한 제한
- `Apache/nginx conf`에서 `php_admin_flag engine off`, `Options -ExecCGI`으로 실행 자체를 차단한다.
- 이 경우 파일은 업로드되지만 실행은 불가능하다.
5. 우회 방법
5.1. 확장자 검사 우회
- 대소문자를 혼용한다. (`phP`, `pHP` 등)
- 대체 확장자(`phtml`, `php3`, `php5` 등)를 사용한다.
- 멀티확장자(`webshell.png.php` )를 사용한다.
- 개발자가 첫 `.`만 기준으로 확장자를 검사할 때 우회가 가능하다. - NULL 바이트 주입(`.php%00.png`)을 이용한다.
- 최신 언어/프레임워크 버전에서는 불가능하다. - 디렉터리 설정 파일(`.htaccess`)을 업로드하여, 허용된 확장자(예: `.jpg`)로 웹쉘 파일 업로드가 가능하도록 설정하고, 실제로는 웹쉘 코드를 가진 `.jpg` 파일을 업로드해 우회한다.
5.2. MIME 타입 검사 우회
- `Burp Suite` 등 프록시 툴로 `Content-Type: image/png` 등으로 요청을 조작한다.
5.3. 파일 크기 제한 우회
- 최소한의 원리만 갖춘 웹쉘을 업로드 한다.
5.4. 이미지 헤더+웹셸코드 혼합
- 정상 이미지 파일의 `hex(시그니처)` 앞부분은 그대로 두고 끝에 웹쉘 코드를 삽입한다.
- 확장자는 서버언어로 변경한다.
- 서버가 헤더만 검사한다면 이미지+웹셸 혼합 파일도 실행될 수 있다.
5.5. 경로이동(Path Traversal)
- 파일명을 `../webshell.php`로 입력해 상위 디렉토리에 업로드를 시도한다.
- 상위 디렉토리에 실행 권한이 있으면 해당 위치로 우회 업로드가 가능하다.
- 단, `path traversal` 취약점이 있어야 한다.
6. 대응 방안
6.1. DB에 파일 저장 (BLOB/CLOB)
- 파일을 DB의 BLOB 또는 CLOB 컬럼에 저장해 웹서버 파일 직접 접근을 차단한다.
6.2. NAS 서버 사용
- NAS 등 별도 파일 서버에 파일을 저장하여 웹서버와 파일 저장소를 분리한다.