Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

뭉크테크

File Upload 모의해킹 본문

CERT

File Upload 모의해킹

뭉크테크 2024. 6. 22. 15:25

목차

  • File Upload 이론
  • File Upload 실습
  • File Upload 대응 방안

 

파일 업로드 이론

  • 파일 업로드 기능이 존재하는 웹 어플리케이션 상에서 업로드 파일에 대한 필터링 조치가 미흡하여 악성 서버 사이드 스크립트 파일 ( asp, jsp, php 등 )이 업로드 되어 실행될 수 있는 취약점

 

파일 업로드 실습

dvwa file upload 실습 화면
업로드할 웹셀 코드

  • 시나리오
    • 필터링 작업이 미흡한 dvwa 웹페이지의 파일 업로드 기능을 통해 서버 시스템에 명령어를 보낼 수 있는 웹셸 코드 파일을 업로드한 다음, 해당 파일을 실행시켜 서버에 명령어를 보낼 예정
    • Security Level을 Low -> Medium -> High 로 올리면서 취약점 분석 실습

 

DVWA File upload 페이지 Low 레벨 소스코드

  • 해당 페이지의 소스코드를 간단히 분석해보면
  • 파일이 업로드 되면, 업로드 되는 target 지점은 127.0.0.1/DVWA/hackable/uploads/[파일이름] 이런식으로 저장되는 것으로 보임.
  • 만약 임시 위치에서 파일을 target 지점으로 옮기는데 실패하면  Your image was not uploads 라면 실패 문구가 뜰 것이고, 옮기는데 성공하면, successfully uploaded 라며 성공 문구가 뜨는 것으로 보인다.
  • 그러나 해당 코드에는 확장자에 대한 필터링이 없는 것으로 보아, 웹쉘 파일을 올리는데 제한이 없는 것으로 보임.

 

  • 서버에 올려두었던 웹셀 코드가 정상적으로 실행되었음을 확인
  • 해당 명령어 입력 창에 cat ../../../../../../../../../etc/passwd 입력하여 루트디렉토리에 있는 passwd 파일을 확인해보도록 한다.
  • ../ 를 여러번 입력한 이유는 해당 웹셸 코드가 올라간 곳이 정확히 어느 계층의 폴더에 들어간 것인지 알 수 없기때문에 최대한 ../ 를 입력해본 것이다.
  • 실행 결과, 오른쪽 사진과 같이 passwd 파일을 열어볼 수 있었다.

 

  • low level과는 다르게 파일 타입을 jpeg와 png 파일만 올리도록 하며, 크기는 100000 Byte 이하로 제한 시킨 것으로 보인다

 

  • 그래서 아까와 같은 방식으로 시도해보면, 오른쪽 사진과 같은 실패 문구가 뜨며, 업로드 되지 않는 것을 확인할 수 있다.

 

  • 그래서 해당 php 파일을 업로드할 때, 패킷의 content-type을 바꿔보았다.
  • post 메소드를 사용한 패킷을 확인하여, content-type을 php 파일에서 png 형태로 바꾸었다.

 

  • 이번에는 content-type이 아닌, 파일 확장자가 jpg, jpeg, png 인지 확인하는 필터링이 있으며,
  • getimagesize() 함수를 통해 파일 타입과 이미지 사이즈 등을 확인하여 사용자가 올린 파일이 실제로 이미지 파일인지 재차 확인하는 코드도 있음을 확인했다.

 

첫 번째 우회방법

  • 요청을 BurpSuite로 인터셉트하여 임의로 확장자를 바꿔보았다.
  • 확장자를 .php.jpg로 변경하였고, getimagesize를 우회하기 위해 내용 앞에 'GIF89a'를 추가하였다.

 

 

  • 업로드에 성공하였지만, 현재 업로드된 파일명은 webshell.php.jpg이다.
  • 확장자가 jpg이므로 정상적으로 웹 쉘을 실행할 수 없었다.

 

 

두 번째 우회 방법 (File Inclusion + File Upload)

  • 업로드된 파일을 파일 인클루전을 통해 파일의 내용을 직접 웹 페이지에 삽입하는 방식이다.
  • 현재 DVWA는 High단계로 설정되어 있기 때문에 이전 파일 인클루전의 High단계도 우회해주어야 한다.
  • path traversal을 이용하여 업로드한 디렉토리로 접근하여 파일을 직접 삽입

 

  • High단계를 우회하기 위해 File Inclusion Attack과 File Upload Attack 두 가지 방법을 혼합하였고, 공격에 성공한 것을 볼 수 있다.

 

파일 업로드 대응방안

이미지로 재생성하는 코드

  • 1차적으로 업로드된 파일이 이미지인지 타입, 확장자명 등으로 확인한다.
  • 이미지 파일로 판별된다면 해당 파일의 내용으로 이미지 파일을 다시 생성(re-encoding)한다.
  • 이로써 껍데기만 이미지 파일이였던 파일은 본래 의도된 역할(악성스크립트)을 하지 못하게 된다.

 

업로드된 파일 네임 램덤화 시키는 코드

  • 업로드 되는 파일의 파일명을 저장하는 시점에 랜덤화하여 해커가 업로드 되는 파일에 쉽게 접근하지 못하는 방법도 있다.

 

윈도우 IIS 파일 실행 권한 설정 화면

  • 윈도우 IIS 서버 같은 경우 위 사진과 같은 설정에 들어가서 실행권한 설정 가능
  • 리눅스는 chmod 655 [파일명] 과 같이 다른 사용자가 접근 시, 실행권한 제한'

 

파일 확장자 화이트 리스트 및 크기 제한 코드

  • 위 사진의 빨간 색 박스와 같이 정해진 확장자 파일만 업로드할 수 있도록 설정
  • 위 사진의 파란 색 박스와 같이 파일 크기도 설정하여 서버 과부하도 방지

'CERT' 카테고리의 다른 글

BruteForce 모의해킹  (0) 2024.07.27
SQL Injection(Error Bases Injection) 모의해킹  (0) 2024.07.21
CSRF 모의해킹  (1) 2024.06.15
Command Injection 모의해킹  (3) 2024.06.15
Proxy  (1) 2024.05.27