ROOTME] PHP - filters

woounnan·2020년 3월 2일
1

wargame

목록 보기
6/59
post-thumbnail

문제

loginhome 이 있는 홈페이지에 접속된다.


풀이

경로를 바꿔서 상위 경로로 접근을 시도해본다.(LFI)
비허가된 경로라는 에러메시지가 출력된다.

Warning: file_exists(): open_basedir restriction in
effect. File(../asf) is not within the allowed path(s): (/challenge/web-serveur/ch12:/tmp) in /challenge/web-serveur/ch12/ch12.php on line 6

설정으로 막혀있는듯 하다.
상위 경로로 접근할 필요가 없는 문제라는 얘기..?

검색

LFI 취약점에 접근하는 방식 중에 php://filter를 이용하는 방식이 있다.
위의 문제처럼 입력받은 페이지 값을 include하는 경우에 filter를 사용해서 페이지 URL을 전달한다면, 해당 페이지의 내용을 인코딩 시킨 값을 얻을 수 있다.
(인코딩된 값은 php 처리가 되지 않기 때문이다.)

한 마디로, 페이지 코드를 읽을 수 있다.

문제 페이지에서 login.php의 코드를 읽어보자

php://filter/read=convert.base64-encode/resource=login.php

그러면 login.php의 base64 인코딩된 값이 페이지에 출력된다.

PD9waHAKaW5jbHVkZSgiY29uZmlnLnBocCIpOwoKaWYgKCBpc3NldCgkX1BPU1RbInVzZXJuYW1lIl0pICYmIGlzc2V0KCRfUE9TVFsicGFzc3dvcmQiXSkgKXsKICAgI....

이 값을 디코딩하면 로그인할 때 사용되는 config.php가 include된다는 것을 확인할 수 있다.

마찬가지로 config.php의 코드을 확인해보면
admin의 password를 확인할 수 있다.

0개의 댓글