Bypass $_FILES['0']['type']

dakata__92

Super Moderator
Сигурно ли е това сравнение за откриване вида на файла. Най-прост пример давам с pdf:
PHP:
if($_FILES['0']['type'] == 'application/pdf'){
	return true;
}else{
	return false;
}

Тази проста проверка може ли да бъде премината? Интересуваме просто защото на база mime type за момента правя такива проверки и нещо не ми вдъхва много доверие. На теория и практика си работи всичко точно но ме съмнява, че само с такава проверка и примерно за разширението на файла е има голяма вероятност да бъде премината. Струва ми се, че с Live Header ще преминем тази проверка...
 
http://www.phocean.net/2013/09/29/file-upload-vulnerabilities-appending-php-code-to-an-image.html

Тази тема може и да ти помогне. Един от начините е да аднеш .htaccess на папките където съхраняваш файловете и в този htaccess да определиш какви типове файлове са достъпни в тази папка
 
mapka7a каза:
http://www.phocean.net/2013/09/29/file-upload-vulnerabilities-appending-php-code-to-an-image.html

Тази тема може и да ти помогне. Един от начините е да аднеш .htaccess на папките където съхраняваш файловете и в този htaccess да определиш какви типове файлове са достъпни в тази папка
Това не е голямо решение на проблема. Ако можеш да прекратиш инклудването на шелове от самият код това е решението :) Htaccess е просто превантивната мярка :)
 
Винаги съм ползвал
PHP:
<?php
$ok = array("jpg","jpeg","png","bmp","gif");
$ext =  end(explode(".",$file)); # като $file е файлът
if(!in_array($ext,$ok)){
unlink("$file");
die("Този тип файлове не е позволен");
}
else
{
#нещоситам
}
?>

И като няма file inclusions, като съм задал да възприема за изпълними от сървъра само .pl, .php, и подобните тривиални, как би могло това да представлява опасност за мен ?
 
PHP файловете са изплъними. Оправи си привилегиите над upload папката и всички под файлове.

Дори и PHP файл да се качи, той не би трябвало да се изпълни.
Може да се include-не, но това, вече е съвсем друг вектор за нападение.
 
eLite каза:
PHP файловете са изплъними. Оправи си привилегиите над upload папката и всички под файлове.

Дори и PHP файл да се качи, той не би трябвало да се изпълни.
Може да се include-не, но това, вече е съвсем друг вектор за нападение.
E представи си че качвам снимки. Ако се инклудне файла в изображението как да спра това?
 
eLite каза:
Защо ти е да include-ваш файл с изображение?

<img src='<?php echo $dirandfilename?>' alt='blabla'/> Така се стартират шеловете стига за знаеш къде ще се изведе снимката която си качил. Дали ще е на профилната ти снимка просто проследяваш отваряш и си бог.
 
Не, не е сигуно. Мога да ти изпратя каквото си искаш там. За по-сигурно (макар и не на 100%) ползвайте функциите/методите от модула fileinfo (http://php.net/manual/en/book.fileinfo.php). Разгледайте функцията finfo_file (http://php.net/manual/en/function.finfo-file.php) - ще си спестите главоболия :)
 
dakata__92 каза:
eLite каза:
Защо ти е да include-ваш файл с изображение?

<img src='<?php echo $dirandfilename?>' alt='blabla'/> Така се стартират шеловете стига за знаеш къде ще се изведе снимката която си качил. Дали ще е на профилната ти снимка просто проследяваш отваряш и си бог.

Това няма да се изпълни ако $dirandfilename няма правата за това.
 
eLite каза:
dakata__92 каза:
eLite каза:
Защо ти е да include-ваш файл с изображение?

<img src='<?php echo $dirandfilename?>' alt='blabla'/> Така се стартират шеловете стига за знаеш къде ще се изведе снимката която си качил. Дали ще е на профилната ти снимка просто проследяваш отваряш и си бог.

Това няма да се изпълни ако $dirandfilename няма правата за това.
В грешка си. Има начини да се заобиколи, както и ламерко каза в горният коментар. :)
 
Код:
$antishell = array(".php", ".phtml", ".php3", ".php4");
 
    foreach ($antishell as $item) {
      if(preg_match("/$item\$/i", $_FILES['0']['type'])) {
         echo "Nqma kak\n";
         exit;
      }
    }

Ако това ти помогне с нещо ? :lol:
 

Back
Горе