PDA

Просмотр полной версии : Обход расширения файла при UPLOAD


jangle
07.07.2013, 19:38
Доброго времени суток!

Помогите пожалуйста обойти проверку расширения файла при загрузке. Загружать файлы с любым содержанием возможно, но вот обойти расширение файла не могу. Задача загрузить файл с последующим выполнением кода. Векторы: 1 - обойти расширение файла, и загрузить что то типа 1.jpg.php, 2 - загрузить графический файл таким обзором что бы при обращении в последствии к нему выполнялся код, что то типа 1.php%00.jpg. Помогите с вариантами. Код формы загрузки:


case'uploadFiles':

$canOverwrite= ("1"==$_REQUEST['canOverwrite']) ?true:false;

$doSimulate= ("1"==$_REQUEST['doSimulate']) ?true:false;

$newDir= ($_REQUEST['d']) ?trim($_REQUEST['d']) :null;

$currDir=$newDir;

$target=AdminFileManager::buildPath($newDir);

if ($target[strlen($target) -1] !='/')

$target=$target.'/';

$count=0;

$report=array();

$tagRed="";

$tagEnd="";

$singleReport.="Opzioni attive:
Permetti sovrascrizione file: ".( ($canOverwrite)?"SI":$tagRed."NO".$tagEnd)."
";

$singleReport.="Simulazione attiva: ".( ($doSimulate)?$tagRed."SI".$tagEnd:"NO")."
";

$report[]=$singleReport;

// FIXME unificare gestione array

$arrayext=array ('jpg','jpeg','gif','txt','png',' JPG','PDF','pdf');

$array_lang_code=array ('_IT','_ES','_PT','_RU',' _FR','_EN');

foreach ($_FILES['uplfile'] ['name'] as$filename) {

$singleReport="-$filename: ";

$fileInfo=pathinfo($filename);

$ext= (strlen($fileInfo['extension'] ) >0) ?$fileInfo['extension'] :null;



// controllo 0) - estesione file

if (in_array(strtolower($ext),$arrayext)) {

// controllo sul codice lingua

$fname= (strlen($fileInfo['filename'] ) >0) ?$fileInfo['filename'] :null;

$lang_code=substr($fname, -3);

if (!in_array($la ng_code,$array_lang_code)) {

$temp=$target;

$tmp=$_FILES['uplfile'] ['tmp_name'] [$count];

// controlli

// 1) file proveniente da un http

if (is_uploaded_file($tmp)) {

// 2) c'è stato qualche errore nell'upload

if ($_FILES['uplfile'] ['error'] [$count] ==UPLOAD_ERR_OK) {

$count=$count+1;

$temp=$temp.basename($filename);

$overWrite=false;

$doMove=false;

if (file_exists($temp)) {

$overWrite=true;

if ($canOverwrite) {

// copia

$doMove=true;

} else {

$singleReport.="ERR! FILE ESISTENTE!";

}

} else {

// copia

$doMove=true;

}

if ($doMove) {

if ($doSimulate) {

// simula risultato true

$res=1;

} else {

$res=move_uploaded_file($tmp,$temp);

}

if ($res) {

$singleReport.=" OK! ". (($overWrite) ?" (sovrascritto!) ":"");

} else {

$singleReport.=$tagRed." ERR! ERRORE NEL COPIARE IL FILE DA$tmp".$tagEnd;

}

}

$temp='';

$tmp='';

} else {

$singleReport.=$tagRed." ERR! - CODICE ERRORE ".$_FILES['uplfile'] ['error'] [$count].$tagEnd;

}

} else {

$singleReport.=$tagRed." ERR! - File non proveniente da protocollo HTTP.".$tagEnd;

}

} else {

$singleReport.=$tagRed." ERR! - File con codice lingua in maiuscolo!".$tagEnd;

}

} else {

$singleReport.=$tagRed." ERR! - Estensione del file non supportata `$ext` !".$tagEnd;

}

$report[]=$singleReport;



$cod=base64_encode(gzcompress(json_encode($report) )) ;

//var_dump ($cod,json_encode($report)); die ();

}

header("Location:$page.php?d=".$currDir."&op=upload&res=".urlencode($cod) );

exit (0);

break;

S3VD
07.07.2013, 19:56
Грузи .htaccess ...

Если грузится, дальше разберешься.

jangle
07.07.2013, 20:02
Увы, не могу загрузить .htaccess. Та же проблема что и с файлами не проходящие фильтрацию. А идея хорошая, спс.

pharm_all
07.07.2013, 20:11
А такое

jpg.file.php.pjpeg

?

jangle
07.07.2013, 21:14
А такое
jpg.file.php.pjpeg
?


увы, нет


- 1.jpg.file.php.pjpeg : ERR! - Estensione del file non supportata `pjpeg` !

Romaz
07.07.2013, 21:35
Ну исходя из кода, вряд ли получится что-то сделать без загрузки .htaccess