ArtS12
24.01.2018, 21:50
Всем привет) я можно сказать мало-опытный по взломам) любитель.
Попался мне как то сайт с объявлениями и вот получилось залить шелл через загрузку картинок. С помощью Tamper data подменил формат файла.
Пользовался я этой дыркой много месяцев, оставался не замеченным. Даже создал на всякий случай мини шеллы в разных места и запрятал от глаз админа. Но вот спустя почти 7 месяцев админ походу засек меня и удалил все. Плюс закрыл дыру по заливке картинок. Я в свое время успел закачать много файлов php себе на комп. И вот в поисках новых багов я нашел еще один загрузчик картинок который есть на сайте.
Собственно в чем вопрос: Кто что посоветует по обходу фильтрации в этом скрипте. Я особо в коде не силен, так по мелочи. Сайт полностью самописный! Тут подмена не проходит естественно, при заливке к имени файла добавляется Id. И кроме .jpg ничего не хочет... Может кто подскажет?
Приведу его код:
$value)
{
if ($_FILES["file"]["name"][$key] != "")
{
echo $_FILES["file"]["name"][$key];
$filename = htmlspecialchars ($_FILES['file']['name'][$key], ENT_QUOTES);
if ($value == UPLOAD_ERR_OK)
{
$result07 = mysql_query ("select max(id_picture) from picture;");
$row07 = mysql_fetch_array ($result07);
$number = $row07['max(id_picture)'] + 1;
//$uploaddir = "picture/";
//echo "
$filename
";
//$url="$uploaddir$filename";
//-------------------------------------------------------------
$origfilename = $_FILES["file"]["name"][$key];
//echo "$filename[0]_$number
";
$filename = $_FILES["file"]["name"][$key];
//уcho "$filename
";
//echo "$filename
";
$filename = explode (".", $_FILES["file"]["name"][$key]);
//echo "$filename[0] $filename[1]
";
$filenameext = $filename[count ($filename) - 1];
unset ($filename[count ($filename) - 1]);
$filename = implode (".", $filename);
$filename = substr ($filename, 0, 15) . "." . $filenameext;
//echo "END=$filename
";
//изменяем название файла
$filename = str_replace (".", "_id_$number.", $filename);
$file_ext_allow = FALSE;
for ($x = 0; $x 640 || $picturesize[1] > 480)
{
img_resize($url , $picturelink, 640, 480) ;
}
else
{
img_resize($url,$picturelink, $picturesize[0], $picturesize[1]) ;
}
*/
img_resize ($picturelink, $picturelink, 100, 75);
//echo("$url ;$picturelink; $picturelinksmall");
//unlink($url);
//---------------------------------------------------------------
echo("File uploaded successfully. - " . $filename . "
");
}
else
{
echo('' . $origfilename . " was not successfully uploaded
");
}
}
else
{
echo('' . $origfilename . " was too big, not uploaded
");
}
} // if
else
{
echo('' . $origfilename . " had an invalid file extension,
");
}
}
else
{
echo('' . $origfilename . " was not successfully uploaded
");
} // else
}
}
}
Попался мне как то сайт с объявлениями и вот получилось залить шелл через загрузку картинок. С помощью Tamper data подменил формат файла.
Пользовался я этой дыркой много месяцев, оставался не замеченным. Даже создал на всякий случай мини шеллы в разных места и запрятал от глаз админа. Но вот спустя почти 7 месяцев админ походу засек меня и удалил все. Плюс закрыл дыру по заливке картинок. Я в свое время успел закачать много файлов php себе на комп. И вот в поисках новых багов я нашел еще один загрузчик картинок который есть на сайте.
Собственно в чем вопрос: Кто что посоветует по обходу фильтрации в этом скрипте. Я особо в коде не силен, так по мелочи. Сайт полностью самописный! Тут подмена не проходит естественно, при заливке к имени файла добавляется Id. И кроме .jpg ничего не хочет... Может кто подскажет?
Приведу его код:
$value)
{
if ($_FILES["file"]["name"][$key] != "")
{
echo $_FILES["file"]["name"][$key];
$filename = htmlspecialchars ($_FILES['file']['name'][$key], ENT_QUOTES);
if ($value == UPLOAD_ERR_OK)
{
$result07 = mysql_query ("select max(id_picture) from picture;");
$row07 = mysql_fetch_array ($result07);
$number = $row07['max(id_picture)'] + 1;
//$uploaddir = "picture/";
//echo "
$filename
";
//$url="$uploaddir$filename";
//-------------------------------------------------------------
$origfilename = $_FILES["file"]["name"][$key];
//echo "$filename[0]_$number
";
$filename = $_FILES["file"]["name"][$key];
//уcho "$filename
";
//echo "$filename
";
$filename = explode (".", $_FILES["file"]["name"][$key]);
//echo "$filename[0] $filename[1]
";
$filenameext = $filename[count ($filename) - 1];
unset ($filename[count ($filename) - 1]);
$filename = implode (".", $filename);
$filename = substr ($filename, 0, 15) . "." . $filenameext;
//echo "END=$filename
";
//изменяем название файла
$filename = str_replace (".", "_id_$number.", $filename);
$file_ext_allow = FALSE;
for ($x = 0; $x 640 || $picturesize[1] > 480)
{
img_resize($url , $picturelink, 640, 480) ;
}
else
{
img_resize($url,$picturelink, $picturesize[0], $picturesize[1]) ;
}
*/
img_resize ($picturelink, $picturelink, 100, 75);
//echo("$url ;$picturelink; $picturelinksmall");
//unlink($url);
//---------------------------------------------------------------
echo("File uploaded successfully. - " . $filename . "
");
}
else
{
echo('' . $origfilename . " was not successfully uploaded
");
}
}
else
{
echo('' . $origfilename . " was too big, not uploaded
");
}
} // if
else
{
echo('' . $origfilename . " had an invalid file extension,
");
}
}
else
{
echo('' . $origfilename . " was not successfully uploaded
");
} // else
}
}
}