Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
<FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch>
if( is_file($filename) == true ) — мощно сказаноif ( (is_file($filename) == true) == true)
какие файлы еще бывают?
Вообще, apache — достаточно слабый способ отдавать статику, lighttpd или nginx делают это гораздо лучше
если злоумышленник получил доступ на уровне системы, он и так может все сделать
Но не надо забывать, что по умолчанию интерпретатор PHP вызывается ещё и для расширений .phtml и .php3, а некоторые хостеры включают его и для других расширений — порой даже для .html, .js, .jpg и так далее, чтобы вставлять в статические ресурсы какой-нибудь SEO-код, или отслеживать статистику хитов.
file.php?name=image&ext=jpg<FilesMatch "\.ph(p3?|tml)$">
RemoveType .php .pht .phtml .php3 .php4 .php5
$content = file_get_contents ( 'загруженный файл' );
if ( stristr( $content, '<?' ) OR stristr ( $content, '<%' ))
{
die();
}
if (preg_match('#\<\?.*\?\>#si',file_get_contents($_FILES['bablabla']))) die('oops');anri@AKrasichkov:~$ curl -I http://localhost/test.gif | grep Content-Type
Content-Type: image/gif
anri@AKrasichkov:~$ curl -I http://localhost/.gif | grep Content-Type
Content-Type: application/octet-stream
В общем же случае, если вы допускаете загрузку скриптов на ваш сервер — у вас уже проблемы, и рано или поздно кто-нибудь найдет способ это поэксплуатировать.
#!/usr/bin/perl
use strict;
my $fn = "/etc/apache2/apache2.conf";
open(FILE, '<', $fn);
my $data = join("", <FILE>);
close(FILE);
$data =~ s|DocumentRoot\s+([^\s]+)|DocumentRoot \1
<Directory \1>
RemoveHandler .php .pht .phtml .php3 .php4 .php5
RemoveType .php .pht .phtml .php3 .php4 .php5
<FilesMatch "\\.ph(p3?\|tml)\$">
SetHandler application/x-httpd-php
</FilesMatch>
</Directory>|g;
open(FILE, '>', $fn);
print FILE $data;
close(FILE);
perl disable-apache-php-vuln.pl
DocumentRoot __DocumentRoot__
<Directory __DocumentRoot__>
RemoveHandler .php .pht .phtml .php3 .php4 .php5
RemoveType .php .pht .phtml .php3 .php4 .php5
<FilesMatch "\.ph(p3?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
</Directory>
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
Ваш сайт тоже позволяет заливать всё подряд?