파일 업로드 취약점 (File Upload Vulnerability)
사용자가 파일을 서버에 업로드할 때, 서버 측에서 업로드되는 파일의 확장자나 내용을 제대로 검증하지 않아 발생하는 취약점
- 공격 방법: 공격자는 PHP, ASP, JSP 등의 서버 측 스크립트가 포함된 악성 파일(웹 쉘)을 업로드하여 서버에 침투하고 원격으로 명령을 실행하거나 서버를 장악할 수 있음
- 대응 방안:
- 화이트리스트(Whitelist) 방식으로 허용된 확장자만 업로드를 허용
- 업로드된 파일이 저장되는 디렉토리에서 실행 권한을 제거하여 악성 코드가 실행되지 않도록 함
웹 쉘이란?
웹 쉘은 주로 서버 측 스크립트 언어(예: PHP, ASP, JSP)로 작성되며, 매우 간단한 형태
-
예시)이 스크립트는 URL의 cmd 파라미터로 받은 명령어를 서버에서 실행하고 그 결과를 웹 페이지에 출력함
<?php system($_GET['cmd']); ?>
웹 쉘 사용한 공격 과정
- 취약점 악용: 파일 업로드 취약점이나 기타 웹 애플리케이션의 취약점을 이용해 서버에 웹 쉘 파일을 은밀하게 업로드함
- 접속 및 실행: 공격자가 웹 브라우저를 통해 업로드된 웹 쉘 파일의 URL로 접속
- 원격 제어: URL의 쿼리 파라미터(예: cmd=ls -al)를 통해 서버에 명령을 전달하면, 웹 쉘 스크립트가 해당 명령을 서버 시스템에서 실행하고, 그 결과를 웹 브라우저로 반환
실습 - php 웹 쉘 작성하고 반환 값 확인하기
"this is test2"라는 문자열 반환하는 php 파일 업로드해 반환 값 확인하기

먼저 printf.php 파일을 만들었음
- 코드 설명
| <?php | php 코드 시작 알리는 태그 |
| echo | 문자열 출력하는 php 명령어 |
| "this is test2" | 출력하려는 문자열 |
| ; | php 문장의 끝 |
| ?> | php 코드의 끝 알리는 태그 |

결괏값은 다음과 같이 잘 나왔음
추가 - 웹 쉘 관련 php 명령어
| 명령어 | 기능 | 설명 |
| system() | 쉘 명령 실행 및 출력 | 서버의 운영체제 쉘 명령을 실행하고 그 출력 결과를 브라우저에 표시(가장 흔한 웹 쉘 명령어) |
| exec() | 쉘 명령 실행 | 쉘 명령을 실행하지만, 마지막 라인의 출력만 반환 |
| shell_exec() | 쉘 명령 실행 | 쉘 명령의 모든 출력 결과를 문자열로 반환 |
| file_get_contents() | 파일 내용 읽기 | 파일 또는 URL 전체 내용을 문자열로 읽어서 반환 |
'swuforce 심화팀 > 워게임 스터디' 카테고리의 다른 글
| Command Injection (0) | 2025.11.04 |
|---|---|
| [드림핵] command-injection-1 (0) | 2025.11.04 |
| [드림핵] image-storage (0) | 2025.10.28 |
| Web Goat를 통한 XSS 실습 (0) | 2025.09.30 |
| [드림핵] xss-1 (0) | 2025.09.30 |