Tags
PHP - register globals
Estimated time to read: 2 minutes
May 09, 2023
Tài nguyên và link challenge
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 <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"]==1 thì sẽ lấy được password. Ta tiến hành truy xuất password bằng ?_SESSION[logged]=1
Yeahhh, flag cần tìm là NoTQYipcRKkgrqG