Web-Server) LFI -(1),(2)
Wargame/Root-Me

Web-Server) LFI -(1),(2)

1. File upload- Double extensions

=> Your goal is to hack this photo gallery by uploading PHP code.

Retrieve the validation password in the file .passwd at the root of the application.

 

-> 일단 파일을 업로드하여 웹쉘을 올려야 할 듯 싶었다. 업로드 창을 자세히 살펴보니 화이트리스트 방식으로 jpeg등의 이미지 파일만 허용하는 식이었다. 제목에도 double extension이라 나와있으니까 확장자를 두개 연결해주는 식으로 업로드했더니 우회가 가능했다. 물론 이 방법은 요즘은 잘 안먹힐 듯 싶다..!

<?php
  system($_GET['cmd']);
  ?>

                                  => 간단하게 웹 쉘 코드를 짜서 올렸다.

 

 -> 이 파일을 업로드 하고 확인해보았더니 빈 커맨드를 실행할 수 없다는 경고가 떴다. 웹쉘이 정상적으로 올려진 것이다.

 

: 일단 구조를 파악하기 위해 pwd 명령어를 사용하였더니 이렇게 디렉토리가 떴다.

: 이제는 .passwd를 찾아야 하므로 노가다이다. cd ../ 명령어를 굉장히 많이 붙이면 root라는 디렉토리가 있어서 접근 가능한줄 알았지만, 그건 실패했다. .passwd를 숨겨놓았을 것 같아서 cd ../;ls -a; 명령어를 입력해보면서 상위 디렉토리로 세번 정도 이동하면 진짜 .passwd; (중간에 빈 가짜가 있다) 파일을 찾아서 cat하면 문제가 풀린다.

 

 

2, File Upload- MIME type

 : 문제는 아까와 동일하다.

-> 아까와는 다르게 파일의 mime type 까지 확인을 할수가 있다. 그래서 일단 attack.php.jpeg파일로 업로드 하고

 

-> content-Type:image/jpeg에서 text/html로 바꿔 주었는데 업로드가 안됐다. mime type과 확장자를 둘다 필터링 하는 모양이다. 그런데 생각을 해보니 복잡하게 할 필요 없이 그냥 간단하게 php파일을 업로드하고 거기서 content type을 image/jpeg로 바꾸면 될 듯 싶었다.

 

application~로 되어있던 content type을 바꾸면

 

성공!희희

역시 동일하게 /challenge/web-serveur/ch21/ 디렉토리에서 .passwd파일을 찾아서 업로드할 수 있다.

-> 파일 업로드 취약점을 여러가지 알게 된것 같다!