Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Песочница (https://forum.antichat.xyz/forumdisplay.php?f=189)
-   -   Совет по заливке Шелла (https://forum.antichat.xyz/showthread.php?t=459853)

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
crlf said:

Код выше модифицированный или старая версия?
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
ArtS12 said:

К сожалению исходника imager.php нет.

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

Цитата:

Сообщение от ArtS12
ArtS12 said:

Там при в ходе стоит проверка по ip адресу и в админку можно попасть только с определенного ip.

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

Цитата:

Сообщение от t0ma5
t0ma5 said:

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

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

ArtS12 25.01.2018 19:06

Цитата:

Сообщение от t0ma5
t0ma5 said:

если глаза мне не врут
Код:

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
crlf said:

Тогда так потыкай, возможно прочитаешь патченную версию загрузчика.
Каким образом определил?
+ ещё
pht
можно попробовать

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

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

ekaterina333 27.01.2018 14:20

если еще не разобрался пиши в лс свою телегу


Время: 05:36