본문 바로가기

해킹과 보안 동향/DVWA

dvwa. 파일 업로드 공격 #5-2(medium, high, impossible)

728x90

 

medium

 - low단계처럼 파일을 업로드 했을 때 업로드 실패한 것으로 보아 검증 로직이 있다.

 - view-source를 보면 이미지인지 검증을 위해 uploaded_type이 image/jpeg, image/png인지 확인하고 있고 크기는 100000 미만으로 되어있다.

 - 필터링을 우회하기 위해 버프스위트로 인터셉트 후 content-Type을 image/jpeg로 바꿔주면 업로드 성공

 

 

확장자 변경

 - 다른 방법으로 php확장자를 강제로 jpeg로 바꾼 후 업로드 하면 업로드가 된다.(high에서 필터링됨)

 - 추가로 view-help를 보면 hidden 값이 있다고 해서 봤더니 이미지 사이즈를 변경할 수 있는 폼이 있다.

 

high

 - vie-source를 보면 정확히 jpg, jpeg 파일만 업로드 할 수 있도록 했다.

getimagesize함수 : 이미지 정보를 출력한다.

$_FILES['upload']['name'] : 업로드된 파일의 이름을 의미

$_FILES['upload']['type'] : 파일의 MIME 형식

$_FILES['upload']['size'] : 파일의 크기(바이트)

$_FILES['upload']['tmp_name'] : 서버에 저장된 임시파일명

$_FILES['upload']['error'] : 오류코드

파일을 이동시키는 함수 move_uploaded_file(임시파일명, 이동할 곳의 파일명)

즉, 확장자를 검사 후 getimagesize함수로 실제 파일 내용이 이미지인지 체크한다.

 

 

 - 프록시 툴로 webshell.php.jpeg로 확장자를 필터링하고 GIF89a로 getimagesize함수를 속인다.

GIF89a는 GIF 표준값으로 파일 내용 앞에 두면 이미지 파일처럼 속일 수 있다.

 

파일인클루션 조합

 - view-help를 보면 파일 인클루션 공격과 조합해서 공격할 수 있다고 나와있다. 

 - 파일 인클루션 high 우회 기법으로 page=file/를 넣어주고

파일이 업로드 되는 곳에 웹쉘을 업로드 하기 위해  ../../hackable/uploads/webshell.php에서

file -> vulnerabilities -> dvwa = ../../../를 넣어준다.

그리고 연속으로 LFI 공격을 위해 특수문자 &와 cmd명령을 입력

 - 파일 인클루션 - 파일 업로드 - path traversal 취약점

 

impossible

 

확장자 검사와 이미지 파일인지 검사후 업로드 후에 확장자만 변경한 쉘파일인지 구분하기 위해 다시 이미지 확장자를 검사한다

 

정리 마저 하기

 

 - 참고

https://homesi.tistory.com/entry/getimagesize