Study/Web

[DVWA] File Upload

seomj 2021. 6. 14. 13:46

File Upload

Low

view source)

$target_path 를 통해 저장할 경로를 지정

$target_path 에 업로드한 파일 저장하는 조건문을 확인

 

 

Step 1) 사진 파일 업로드(테스트용)

업로드된 경로가 노출됨

 

해당 경로로 이동하면 업로드한 이미지 파일이 존재

 

 

Step 2) 간단한 웹쉘 작성

dvwa_low.php

 

 

Step 3) 웹쉘 업로드 후 해당 경로로 이동

cd 명령어가 실행됨

 

 

 

Medium

view source)

low에서 추가된 부분

업로드한 파일의 이름, 형식, 크기를 받아옴

조건문을 통해 형식을 image의 jpeg, png만 허용하고 파일의 크기가 100000미만이도록 설정

 

 

Step 1) 웹쉘(php) 업로드

jpeg나 php가 아니라서 업로드 할 수 없다고 뜸

 

 

Step 2) request 변조

Content-Type 변조

 

 

 

High

view source)

medium에서 추가된 부분

uploaded_ext라는 변수가 추가됨 -> 파일의 확장자명을 변수에 저장

조건문을 보면 strtolower()를 통해 모두 소문자로 변환한 뒤 getimagesize()로 이 파일이 이미지인지 검증

 

*getimagesize(): 이미지의 크기나 형식에 대한 정보를 반환

 

 

Step 1) request 변조

확장자명에 .png 를 추가

-> getimagesize()에 의해 파일이 업로드되지 않음

 

이를 우회하기 위해 'GIF89a' 추가

 

*GIF89a: GIF 파일 헤더, 업로드된 콘텐츠를 검색하는 경우 이 헤더 항목을 맨 위에 올려놓고 검사를 무시할 수 있음

 

 

Step 2) 정상적으로 업로드

 

해당 경로로 이동

-> .jpg로 바꿔주어 해당 경로의 웹쉘이 실행되지 않음

 

 

Step 3) LFI 취약점 이용

*LFI(Local File Inclusion) 공격: 공격 대상 서버의 내부에 존재하는 파일을 이용하여 공격하는 방법

 

 

 

 

Impossible

High 추가

MD5 알고리즘을 사용해 파일명을 암호화하여 저장

 

또한 이미지만을 가지고 새로운 이미지를 생성해주며 기존의 이미지 파일은 파괴시킴