PDA

Просмотр полной версии : Совет по заливке Шелла


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

}

}

}

spainet
25.01.2018, 02:07
Позже отпишу,помогу,если что в лс

pas9x
25.01.2018, 09:03
Код говно, но дыр в нём нет. Если ты конечно каким-то образом не протолкнёшь в $file_types_array расширение php.

Ещё тут есть странность: foreach ($_FILES["file"]["error"] as $key => $value) - таких массивов при загрузке файлов пхп не создаёт.

Похоже движок как-то изменяет массив $_FILES. Но всёравно это не даёт тебе шансов на взлом.

ArtS12
25.01.2018, 13:16
Да на счет я так и подозревал что мало шансов... Хотя в название файла можно вставить любой символ, почти любой.

Я уже и старый загрузчик фото где мне удалось подмену сделать смотрю, он он там по закрывал почти все и сейчас если файл не картинка просто не грузит его. Раньше еще получалось загрузить когда он закрыл только формат .php я подменял на .phtml это прокатывало. Потом он добавил еще и его. А вот сейчас вообще не хочет грузить ничего кроме картинки и Mime type тоже проверяет хорошо. Ну и запрещенные символы. Видимо он его еще модифицировал.

0)

{

if ($_FILES['file']['size'] [Удалить]

';

@$_SESSION['file'][] = $namefile;

}

else

{

echo '04'; // При загрузке файла произошла ошибка

}

}

else

{

echo '03'; // Файл с таким именем уже существует

}

}

else

{

echo '02'; // mime тип не соответствует разрешённым

}

}

else

{

echo '06'; // Количество картинок превышает 6

}

}

else

{

echo '05'; // В названии файла содержаться недопустимые символы

}

}

else

{

echo '07'; // Файл большого размера

}

}

else

{

echo '01'; // Выберите картинку

crlf
25.01.2018, 13:31
Код выше модифицированный или старая версия?

imager.php возможно читалка, сорец есть?

ArtS12
25.01.2018, 17:34
crlf said:
↑ (https://antichat.live/posts/4177236/)
Код выше модифицированный или старая версия?
imager.php
возможно читалка, сорец есть?


Код выше это предпоследняя версия, он походу после этого что то изменил в нем. К сожалению исходника imager.php нет. Этот скрипт показывает в маленьком размере изображение после загрузки.

ArtS12
25.01.2018, 17:37
Есть еще пароли от админки. Но воспользоваться не могу... Там при в ходе стоит проверка по ip адресу и в админку можно попасть только с определенного ip. Я так понимаю чуть ли не с домашнего ПК админа. Может кто знает как подменить именно на нужный IP?

t0ma5
25.01.2018, 17:49
если глаза мне не врут


Code:
if (preg_match ("/^[А-Яа-яЁё\w\s\.*+-]+$/i", $_FILES['file']['name']))

^

пропустит любое имя файла, без спецсимволов


Code:
$blacklistExtentions = array(".php", ".php3", ".php4", ".sh");

foreach ($blacklistExtentions as $item) {
if(preg_match("/$item\$/i", $namefile)) {
echo '08'; //неверное расширение файла
exit();

^ валидация по черному списку

можно попробовать загрузить phml


Code:
if ($_FILES['file']['type'] == 'image/pjpeg' ||
$_FILES['file']['type'] == 'image/gif' ||
$_FILES['file']['type'] == 'image/jpeg' ||
$_FILES['file']['type'] == 'image/png')
{

^ нужно грузить валидную картинку


Code:
img_resize ($filename, $filename, 420, 420);

^ попробовать обойти этим https://rdot.org/forum/showthread.php?t=2780


Code:
$name = rand (1000, 10000) . '_bla_' . date ("Y-m-d H:i:s");

^ если имя файла не рандомится(говоришь код меняли), ресайз можно попробовать обойти загрузкой нескольких больших файлов, может поймаешь момент когда он ещё не начал ресайз

crlf
25.01.2018, 18:28
ArtS12 said:
↑ (https://antichat.live/posts/4177324/)
К сожалению исходника imager.php нет.


Тогда так потыкай, возможно прочитаешь патченную версию загрузчика.


ArtS12 said:
↑ (https://antichat.live/posts/4177327/)
Там при в ходе стоит проверка по ip адресу и в админку можно попасть только с определенного ip.


Каким образом определил?


t0ma5 said:
↑ (https://antichat.live/posts/4177335/)
можно попробовать загрузить phml


+ ещё pht можно попробовать

ArtS12
25.01.2018, 19:06
t0ma5 said:
↑ (https://antichat.live/posts/4177335/)
если глаза мне не врут

Code:
if (preg_match ("/^[А-Яа-яЁё\w\s\.*+-]+$/i", $_FILES['file']['name']))

^
пропустит любое имя файла, без спецсимволов

Code:
$blacklistExtentions = array(".php", ".php3", ".php4", ".sh");

foreach ($blacklistExtentions as $item) {
if(preg_match("/$item\$/i", $namefile)) {
echo '08'; //неверное расширение файла
exit();

^ валидация по черному списку
можно попробовать загрузить phml

Code:
if ($_FILES['file']['type'] == 'image/pjpeg' ||
$_FILES['file']['type'] == 'image/gif' ||
$_FILES['file']['type'] == 'image/jpeg' ||
$_FILES['file']['type'] == 'image/png')
{

^ нужно грузить валидную картинку

Code:
img_resize ($filename, $filename, 420, 420);

^ попробовать обойти этим
https://rdot.org/forum/showthread.php?t=2780

Code:
$name = rand (1000, 10000) . '_bla_' . date ("Y-m-d H:i:s");

^ если имя файла не рандомится(говоришь код меняли), ресайз можно попробовать обойти загрузкой нескольких больших файлов, может поймаешь момент когда он ещё не начал ресайз



Сейчас любой файл гружу не важно какой формат пусто ничего не пишет. Раньше хоть ошибка была, а сейчас ничего, только можно изображения грузить.

Имя картинки рандомиться (bla потом дата и время, а потом уже формат файла) и загружаеться в папку temp_files. Потом после подачи обьявления этот файл копируеться в папку pictures и опять перемейновуеться c номером id.

На счет расайза не пробовал

ArtS12
25.01.2018, 19:19
crlf said:
↑ (https://antichat.live/posts/4177355/)
Тогда так потыкай, возможно прочитаешь патченную версию загрузчика.
Каким образом определил?
+ ещё
pht
можно попробовать


Я определил сначала зашел по паролю оно написало что ошибка ip так вот, в папке с админкой скачал тогда еще index.php вот его код

[FONT="Tahoma"][COLOR="#4dff4d"]

ekaterina333
27.01.2018, 14:20
если еще не разобрался пиши в лс свою телегу