WebHacking

[root-me] File upload - MIME type

BIGFROG 2020. 1. 6. 17:50

php 파일 업로드 취약점.

 

우선, MIME타입에 대해서 알아보자.

 

MIME :

Multipurpose Internet Mail Extensions

 

보통 파일을 검사할 때 파일의 확장명으로 구분하는데,

 

여기서는 HTTP Response에 정의된 Content-Type Header값을 이용하여

 

인터넷 상의 파일을 특성 및 형식에 따라 식별하는 방법을 말한다.

 

간단히 말해, 확장자 말고도 파일을 검증할 방법이 있다는 소리이다. double extention 취약점이 통하지 않을 것을 예상할 수 있다.

 

php코드를 짜서 .php파일로 업로드 시켜보자.

 

잘못된 확장자라고 출력된다.

 

이번엔 double extension을 이용해보자. 

 

.php.png로 php코드를 짜서 업로드 시키면,

 

업로드는 정상적으로 되는데 파일이 이미지 파일로 인식돼서 php 코드가 실행되지 않는다.

 

그래서 이번엔 burpsuite로 잡아놓고 Content type을 수정해보려고 한다.

 

일단 확장자가 이미지 파일이면 안되니까, .php로 코드를 짜서 저장한다.

 

passwd파일이 숨겨진 디렉토리를 찾아야 한다.

이번에도 Command Injection을 이용해서 코드를 짠다.

 

<?php echo exec('cd ..;cat .passwd'); ?>

이런식으로 코드를 짜서 업로드할 때 버프스위트를 이용해서

Content-type : image/png

따위로 수정해서 이 파일이 이미지 파일로 인식되도록 한다. 확장자는 .php여야 한다.

 

파일은 .php확장자인데도 MIME을 수정해줬기 때문에 서버는 이를 PNG파일로 인식하게 된다.

 

업로드는 성공했고, 디렉토리를 찾기만 하면 된다.

 

한두번만 더 테스트하면 답을 금방 찾을 수 있을 것으로 생각된다.

 

최종적으로 상위 디렉토리로 세 번 이동하고 나서야 .passwd 파일을 열 수 있게 되었다.

 

.passwd파일을 열면 flag를 획득할 수 있다.

'WebHacking' 카테고리의 다른 글

[root-me] Local File Inclusion  (0) 2020.01.06
[root-me] PHP register globals  (0) 2020.01.06
[root-me] PHP filters  (0) 2020.01.06
[root-me] File upload - null byte  (0) 2020.01.06
[root-me] File upload - double extensions  (0) 2020.01.06