swuforce 심화팀/워게임 스터디

파일 업로드 취약점 실습

ran831 2025. 10. 28. 20:23

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

사용자가 파일을 서버에 업로드할 때, 서버 측에서 업로드되는 파일의 확장자나 내용을 제대로 검증하지 않아 발생하는 취약점

  • 공격 방법: 공격자는 PHP, ASP, JSP 등의 서버 측 스크립트가 포함된 악성 파일(웹 쉘)을 업로드하여 서버에 침투하고 원격으로 명령을 실행하거나 서버를 장악할 수 있음
  • 대응 방안:
    • 화이트리스트(Whitelist) 방식으로 허용된 확장자만 업로드를 허용
    • 업로드된 파일이 저장되는 디렉토리에서 실행 권한을 제거하여 악성 코드가 실행되지 않도록 함

 

웹 쉘이란?

웹 쉘은 주로 서버 측 스크립트 언어(예: PHP, ASP, JSP)로 작성되며, 매우 간단한 형태

  • 예시)
    <?php system($_GET['cmd']); ?>
    
    이 스크립트는 URL의 cmd 파라미터로 받은 명령어를 서버에서 실행하고 그 결과를 웹 페이지에 출력함

웹 쉘 사용한 공격 과정

  1. 취약점 악용: 파일 업로드 취약점이나 기타 웹 애플리케이션의 취약점을 이용해 서버에 웹 쉘 파일을 은밀하게 업로드함
  2. 접속 및 실행: 공격자가 웹 브라우저를 통해 업로드된 웹 쉘 파일의 URL로 접속
  3. 원격 제어: 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