뭉크테크
File Upload 모의해킹 본문
목차
- File Upload 이론
- File Upload 실습
- File Upload 대응 방안
파일 업로드 이론

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


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

- 해당 페이지의 소스코드를 간단히 분석해보면
- 파일이 업로드 되면, 업로드 되는 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 서버 같은 경우 위 사진과 같은 설정에 들어가서 실행권한 설정 가능
- 리눅스는 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 |