rootme - PHP - register globals

2021. 4. 25. 03:08WarGame/Rootme

backup파일이 존재할 것이라고 말한다.

센스있게 index.php.bak파일을 url에 검색해서 가져온다.

<?php


function auth($password, $hidden_password){
    $res=0;
    if (isset($password) && $password!=""){
        if ( $password == $hidden_password ){
            $res=1;
        }
    }
    $_SESSION["logged"]=$res;
    return $res;
}



function display($res){
    $aff= '
      <html>
      <head>
      </head>
      <body>
        <h1>Authentication v 0.05</h1>
        <form action="" method="POST">
          Password&nbsp;<br/>
          <input type="password" name="password" /><br/><br/>
          <br/><br/>
          <input type="submit" value="connect" /><br/><br/>
        </form>
        <h3>'.htmlentities($res).'</h3>
      </body>
      </html>';
    return $aff;
}



session_start();
if ( ! isset($_SESSION["logged"]) )
    $_SESSION["logged"]=0;

$aff="";
include("config.inc.php");

if (isset($_POST["password"]))
    $password = $_POST["password"];

if (!ini_get('register_globals')) {
    $superglobals = array($_SERVER, $_ENV,$_FILES, $_COOKIE, $_POST, $_GET);
    if (isset($_SESSION)) {
        array_unshift($superglobals, $_SESSION);
    }
    foreach ($superglobals as $superglobal) {
        extract($superglobal, 0 );
    }
}

if (( isset ($password) && $password!="" && auth($password,$hidden_password)==1) || (is_array($_SESSION) && $_SESSION["logged"]==1 ) ){
    $aff=display("well done, you can validate with the password : $hidden_password");
} else {
    $aff=display("try again");
}

echo $aff;

?>

코드를 확인해보면 flag를 획득하기 위해서는 맨 마지막에 있는 조건문이 가장 중요해 보인다.

if (( isset ($password) && $password!="" && auth($password,$hidden_password)==1) || (is_array($_SESSION) && $_SESSION["logged"]==1 ) ){
    $aff=display("well done, you can validate with the password : $hidden_password");
} else {
    $aff=display("try again");
}

 

앞부분 또는 뒷부분중 하나만 참을 만들어주면 slove가 가능하기에 뒷부분에 session을 1로 만들어줘서 참으로 만들어주는 방법을 선택했다.

 

> challenge01.root-me.org/web-serveur/ch17/?_SESSION[logged]=1

 

위와 같은 페이로드를 작성하게 되면 flag획득이 가능하다!!

 

 

'WarGame > Rootme' 카테고리의 다른 글

rootme - PE x86 - 0 protection  (0) 2021.04.28
rootme - ELF x86 - 0 protection  (0) 2021.04.26
rootme - PHP - assert()  (0) 2021.04.23
rootme - Javascript - Obfuscation 1  (0) 2021.03.29
rootme - JSON Web Token (JWT) - Introduction  (0) 2021.03.14