login
과 home
이 있는 홈페이지에 접속된다.
경로를 바꿔서 상위 경로로 접근을 시도해본다.(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를 확인할 수 있다.