Skip to content
Tags

PHP - register globals

Estimated time to read: 2 minutes

May 09, 2023


Tài nguyên của challenge này tại https://www.root-me.org/en/Challenges/Web-Server/PHP-register-globals

Link challenge này tại http://challenge01.root-me.org/web-serveur/ch17/

Tổng quan

Trong challenge này, mục tiêu của ta là tìm được thông tin các tệp sao lưu. Đến với website challenge, ta đoán là cần tìm password.

Kịch bản tấn công

Theo luồng challene, ta thử download file index.php backup thử, thì nó có thể download được và ta được sourcecode như sau

<?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;

?>

Từ sourcecode trên, ta thấy nếu $_SESSION["logged"]==11 thì sẽ lấy được password. Ta tiến hành truy xuất password bằng ?_SESSION[logged]=1

Image title

Hình ảnh website challenge

Yeahhh, flag cần tìm là NoTQYipcRKkgrqG

Flag

NoTQYipcRKkgrqG


  1. Xem thêm về biến $_SESSION tại https://www.php.net/manual/en/reserved.variables.session.php 

Comments