웹/모의해킹 스터디 복습

모의해킹 스터디 15주차(2): 파일 업로드 공격 대응 방안

whydontyoushovel 2025. 2. 12. 04:39

목차

  • 파일 업로드 대응 방안

        1) 파일 이름 난독화

        2) 확장자 화이트리스트 기반 필터링

        3) DB에 파일을 저장

        4) NAS 서버

  • 파일 다운로드 취약점

 


 File Upload 

공격자가 원하는 임의의 파일을 서버에 업로드할 수 있는 공격

웹쉘은 대표적인 File Upload 공격 시나리오 중 하나

 

 

   File Upload 대응 방안       

실행 파일이 실행되지 않게 하기!

  • 파일 이름 난독화
  • 확장자 화이트리스트 기반 필터링
  • DB에 파일 저장
  • NAS 서버에 파일 저장

 

1) 파일 이름 난독화

경로와 파일 이름, 확장자를 난독화시켜서 요청하기 어렵게 만듦

 

  • 내가 만든 조잡 서버

(**왜 png 파일이 웹쉘로 실행되는지 궁금하시면 이 블로그의 "이미지 웹쉘의 실체" 게시글을 추천드립니다.)

파일명과 저장된 디렉토리가 그대로 보이고 있음
이미지 태그 소스를 사용하면 경로가 노출되기 쉽지만
파일명까지 그대로 사용하면 공격자가 업로드한 악성 파일을 특정하기 쉬워지고
파일을 요청하면 파일 내의 악성 스크립트가 실행될 수 있음

 

(+ 이미지 태그 없이 이미지를 출력하는 방법도 많은가 봄)

 

  • 파일 이름 난독화
https://example.com/download.php?boardId=qw23%awega%uh35dgaw353a
위와 같이 파일에 ID를 부여해서 해당 식별값을 기준으로 DB 조회
색출한 파일의 저장 경로를 토대로 파일 다운로드 진행

 

  • 파일 이름 난독화의 장점과 단점
장점 1) 공격자가 자신이 업로드한 파일을 특정하기 어려움
2) 비교적 ... 품삯이 덜 드는 느낌
단점 1) SQL Injection 등의 다른 취약점이 발견되면 파일 경로를 알아낼 수 있음

 

  • 파일 이름을 난독화하면 공격자는 자신이 업로드한 파일이 무엇인지 몰라 실행하기 어려워짐
  • 하지만 다른 취약점을 통해 경로가 노출될 우려가 있으므로 추천하는 방법은 아님

 

 

2) 확장자 화이트리스트 기반 필터링

.jpg / .pdf / .txt 이런 것만 통과시킴

 

(자바스크립트 및 php 필터링 코드 업데이트할 예정)

  • 확장자 화이트리스트 기반 필터링의 장점과 단점
장점 1) 업로드 자체를 막을 수 있음
2) 얘도 품삯이 비교적 덜...
단점 1) 필터링은 우회의 여지가 있음
2) 시스템 환경에 따라 널 바이트 인젝션으로 우회할 위험이 있음

 

  • 확장자를 화이트리스트 기반으로 필터링하면 업로드 자체를 제한할 수 있음
  • 하지만 언제나 그렇듯 필터링은 우회 가능성이 존재함

 

 

 

3) DB에 파일 저장

파일을 바이너리째로 DB에 저장
  • 근본적인 대응 방법임

(BLOB/ CLOB 자료형으로 DB에 저장하기 실습 추가할 예정)

  • DB에 파일을 저장하는 방법의 장점과 단점
장점 1) 파일을 읽으려면 백엔드에서 바이너리 파일을 다른 형식으로 변환해야하므로 url로 접근할 수 없음
2) 파일이 서버에 저장될 때와 달리 php 엔진이 실행될 여지가 없음
  -> 즉, 웹쉘 등의 코드가 실행될 여지가 전혀 없음
단점 1) DB 환경에 따라 파일을 바이너리로 저장하기 부담스러울 수 있음

 

  • DB에 파일을 바이너리 형태로 직접 저장하는 방식은 사용자가 파일에 직접 접근할 가능성을 차단함
  • 하지만 DB 서버에 부하가 발생할 수 있고 속도가 감소할 수 있음

 

 

 

4) NAS 서버에 파일 저장

php 등을 실행시키지 못하는 서버를 파일 저장 경로로 설정

 

  • 파일만 저장하는 외부 서버를 둠
  • 해당 서버에선 php 등 서버측 스크립트 엔진을 설치하지 않음
장점 1) 뭘 올리든 NAS 서버에 서버측 스크립트가 설치되어있지 않은 이상 실행시킬 수 없음
단점 1) 서버 유지 비용..?

 

  • 사용자가 업로드한 파일을 외부 서버에 저장하고 스크립트 엔진을 설치하지 않아 악성 코드가 실행될 염려가 없음

이 서버에 대한 보안도 더해야하는 거 아닌가..? 침투테스트 관점에서 보기에 어떨지 모르겠음

NAS 서버에 대한 정보를 더 찾아봐야겟음

 

 

 

   File Download 취약점       

파일 업로드랑 아아아주 유사

대응 방안도 또이또이

 

  • 관련 코드
<?php
    $filepath = "./uploads";
    $filename = $_GET['filePath'];
    $realFile = $filepath . $filename;
    
    //$realFile 경로에서 파일 가져와서 다운로드
?>

 

  • 위와 같이 파일 경로를 GET 방식으로 받을 경우 공격자는 서버에 있는 임의의 파일을 다운로드할 수 있음
예시 download.php?fileName=/../../../../../../../../etc/passwd 로 서버측 passwd 파일을 다운받을 수 있다는 뜻
장점 서버의 소스코드를 다운받을 수 있으며 이를 통해 추가 취약점을 발견할 수도 있음
단점 웹쉘이나 파일 인클루드 취약점 등과 달리 소스코드를 실행시킬 수는 없음

 

  • 다운로드 취약점이 있다는 건 파일 업로드 취약점에서 완전히 자유롭진 않다는 뜻인 것 같음

 

▷ POC

1) 리눅스: 

/etc/passwd

 

2) windows:

\boot.ini

\winnt\win.win