шел достъп от файл в WP тема

Maverick

Well-Known Member
Според суперхостинг във файловете на темата или по-точно в php/thumb.php има зловреден скрипт.

Забелязахме отново злонамерен достъп до Вашия хостинг акаунт, като в него бяха разположени СПАМ скриптове, от които се изпращаха множество спам съобщения. ... Направихме и проверка относно пробива в сигурността на акаунта. Пробивът е направен посредством пропуск в сигурността на системата WordPress, която използвате за управление на съдържанието на сайта *********. Посредством пролука в приложението, чрез файла /public_html/wp-content/themes/monmarthe/php/thumb.php се разполагат PHP скриптове, т.н. shell файлове в акаунта, които дават пълен достъп до съдържанието на акаунта на всеки, без необходимост от потребителско име и парола.

Ето и съдържанието на файла

Код:
<?php
/**
 * TimThumb script created by Ben Gillbanks, originally created by Tim McDaniels and Darren Hoyt
 * http://code.google.com/p/timthumb/
 * 
 * GNU General Public License, version 2
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 *
 * Examples and documentation available on the project homepage
 * http://www.binarymoon.co.uk/projects/timthumb/
 */

define ('CACHE_SIZE', 250);					// number of files to store before clearing cache
define ('CACHE_CLEAR', 5);					// maximum number of files to delete on each cache clear
define ('CACHE_USE', TRUE);					// use the cache files? (mostly for testing)
define ('VERSION', '1.19');					// version number (to force a cache refresh)
define ('DIRECTORY_CACHE', './cache');		// cache directory
define ('MAX_WIDTH', 1000);					// maximum image width
define ('MAX_HEIGHT', 1000);				// maximum image height
define ('ALLOW_EXTERNAL', FALSE);			// allow external website (override security precaution)

// external domains that are allowed to be displayed on your website
$allowedSites = array (
	'flickr.com',
	'picasa.com',
	'blogger.com',
	'wordpress.com',
	'img.youtube.com',
);

// STOP MODIFYING HERE!
// --------------------

// sort out image source
$src = get_request ('src', '');
if ($src == '' || strlen ($src) <= 3) {
    display_error ('no image specified');
}

// clean params before use
$src = clean_source ($src);

// get mime type of src
$mime_type = mime_type ($src);

// check to see if this image is in the cache already
// if already cached then display the image and die
check_cache ($mime_type);

// cache doesn't exist and then process everything
// check to see if GD function exist
if (!function_exists ('imagecreatetruecolor')) {
    display_error ('GD Library Error: imagecreatetruecolor does not exist - please contact your webhost and ask them to install the GD library');
}

if (function_exists ('imagefilter') && defined ('IMG_FILTER_NEGATE')) {
	$imageFilters = array (
		1 => array (IMG_FILTER_NEGATE, 0),
		2 => array (IMG_FILTER_GRAYSCALE, 0),
		3 => array (IMG_FILTER_BRIGHTNESS, 1),
		4 => array (IMG_FILTER_CONTRAST, 1),
		5 => array (IMG_FILTER_COLORIZE, 4),
		6 => array (IMG_FILTER_EDGEDETECT, 0),
		7 => array (IMG_FILTER_EMBOSS, 0),
		8 => array (IMG_FILTER_GAUSSIAN_BLUR, 0),
		9 => array (IMG_FILTER_SELECTIVE_BLUR, 0),
		10 => array (IMG_FILTER_MEAN_REMOVAL, 0),
		11 => array (IMG_FILTER_SMOOTH, 0),
	);
}

// get standard input properties
$new_width =  (int) abs (get_request ('w', 0));
$new_height = (int) abs (get_request ('h', 0));
$zoom_crop = (int) get_request ('zc', 1);
$quality = (int) abs (get_request ('q', 90));
$align = get_request ('a', 'c');
$filters = get_request ('f', '');
$sharpen = (bool) get_request ('s', 0);

// set default width and height if neither are set already
if ($new_width == 0 && $new_height == 0) {
    $new_width = 100;
    $new_height = 100;
}

// ensure size limits can not be abused
$new_width = min ($new_width, MAX_WIDTH);
$new_height = min ($new_height, MAX_HEIGHT);

// set memory limit to be able to have enough space to resize larger images
ini_set ('memory_limit', '50M');

if (file_exists ($src)) {

    // open the existing image
    $image = open_image ($mime_type, $src);
    if ($image === false) {
        display_error ('Unable to open image : ' . $src);
    }

    // Get original width and height
    $width = imagesx ($image);
    $height = imagesy ($image);

    // generate new w/h if not provided
    if ($new_width && !$new_height) {

        $new_height = floor ($height * ($new_width / $width));

    } else if ($new_height && !$new_width) {

        $new_width = floor ($width * ($new_height / $height));

    }

	// create a new true color image
	$canvas = imagecreatetruecolor ($new_width, $new_height);
	imagealphablending ($canvas, false);

	// Create a new transparent color for image
	$color = imagecolorallocatealpha ($canvas, 0, 0, 0, 127);

	// Completely fill the background of the new image with allocated color.
	imagefill ($canvas, 0, 0, $color);

	// Restore transparency blending
	imagesavealpha ($canvas, true);

	if ($zoom_crop) {

		$src_x = $src_y = 0;
		$src_w = $width;
		$src_h = $height;

		$cmp_x = $width / $new_width;
		$cmp_y = $height / $new_height;

		// calculate x or y coordinate and width or height of source
		if ($cmp_x > $cmp_y) {

			$src_w = round (($width / $cmp_x * $cmp_y));
			$src_x = round (($width - ($width / $cmp_x * $cmp_y)) / 2);

		} else if ($cmp_y > $cmp_x) {

			$src_h = round (($height / $cmp_y * $cmp_x));
			$src_y = round (($height - ($height / $cmp_y * $cmp_x)) / 2);

		}

		// positional cropping!
		switch ($align) {
			case 't':
			case 'tl':
			case 'lr':
			case 'tr':
			case 'rt':
				$src_y = 0;
				break;

			case 'b':
			case 'bl':
			case 'lb':
			case 'br':
			case 'rb':
				$src_y = $height - $src_h;
				break;

			case 'l':
			case 'tl':
			case 'lt':
			case 'bl':
			case 'lb':
				$src_x = 0;
				break;

			case 'r':
			case 'tr':
			case 'rt':
			case 'br':
			case 'rb':
				$src_x = $width - $new_width;
				$src_x = $width - $src_w;
				break;

			default:
				break;
		}

		imagecopyresampled ($canvas, $image, 0, 0, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h);

    } else {

        // copy and resize part of an image with resampling
        imagecopyresampled ($canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    }

    if ($filters != '' && function_exists ('imagefilter') && defined ('IMG_FILTER_NEGATE')) {
        // apply filters to image
        $filterList = explode ('|', $filters);
        foreach ($filterList as $fl) {

            $filterSettings = explode (',', $fl);
            if (isset ($imageFilters[$filterSettings[0]])) {

                for ($i = 0; $i < 4; $i ++) {
                    if (!isset ($filterSettings[$i])) {
						$filterSettings[$i] = null;
                    } else {
						$filterSettings[$i] = (int) $filterSettings[$i];
					}
                }

                switch ($imageFilters[$filterSettings[0]][1]) {

                    case 1:

                        imagefilter ($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1]);
                        break;

                    case 2:

                        imagefilter ($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2]);
                        break;

                    case 3:

                        imagefilter ($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2], $filterSettings[3]);
                        break;

                    case 4:

                        imagefilter ($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2], $filterSettings[3], $filterSettings[4]);
                        break;

                    default:

                        imagefilter ($canvas, $imageFilters[$filterSettings[0]][0]);
                        break;

                }
            }
        }
    }

	// sharpen image
	if ($sharpen && function_exists ('imageconvolution')) {

		$sharpenMatrix = array (
			array (-1,-1,-1),
			array (-1,16,-1),
			array (-1,-1,-1),
		);

		$divisor = 8;
		$offset = 0;

		imageconvolution ($canvas, $sharpenMatrix, $divisor, $offset);

	}

    // output image to browser based on mime type
    show_image ($mime_type, $canvas);

    // remove image from memory
    imagedestroy ($canvas);

	// if not in cache then clear some space and generate a new file
	clean_cache ();

	die ();

} else {

    if (strlen ($src)) {
        display_error ('image ' . $src . ' not found');
    } else {
        display_error ('no source specified');
    }

}


/**
 *
 * @global <type> $quality
 * @param <type> $mime_type
 * @param <type> $image_resized 
 */
function show_image ($mime_type, $image_resized) {

    global $quality;

    // check to see if we can write to the cache directory
    $cache_file = get_cache_file ($mime_type);

	if (stristr ($mime_type, 'jpeg')) {
		imagejpeg ($image_resized, $cache_file, $quality);
	} else {
		imagepng ($image_resized, $cache_file, floor ($quality * 0.09));
	}

	show_cache_file ($mime_type);

}


/**
 *
 * @param <type> $property
 * @param <type> $default
 * @return <type> 
 */
function get_request ($property, $default = 0) {

    if (isset ($_GET[$property])) {

        return $_GET[$property];

    } else {

        return $default;

    }

}


/**
 *
 * @param <type> $mime_type
 * @param <type> $src
 * @return <type>
 */
function open_image ($mime_type, $src) {

	$mime_type = strtolower ($mime_type);

	if (stristr ($mime_type, 'gif')) {

        $image = imagecreatefromgif ($src);

    } elseif (stristr ($mime_type, 'jpeg')) {

        $image = imagecreatefromjpeg ($src);

    } elseif (stristr ($mime_type, 'png')) {

        $image = imagecreatefrompng ($src);

    }

    return $image;

}

/**
 * clean out old files from the cache
 * you can change the number of files to store and to delete per loop in the defines at the top of the code
 *
 * @return <type>
 */
function clean_cache () {

	// add an escape
	// Reduces the amount of cache clearing to save some processor speed
	if (rand (1, 100) > 10) {
		return true;
	}

	flush ();

    $files = glob (DIRECTORY_CACHE . '/*', GLOB_BRACE);

	if (count ($files) > CACHE_SIZE) {
		
        $yesterday = time () - (24 * 60 * 60);

        usort ($files, 'filemtime_compare');
        $i = 0;

		foreach ($files as $file) {

			$i ++;

			if ($i >= CACHE_CLEAR) {
				return;
			}

			if (@filemtime ($file) > $yesterday) {
				return;
			}

			if (file_exists ($file)) {
				unlink ($file);
			}

		}

    }

}


/**
 * compare the file time of two files
 *
 * @param <type> $a
 * @param <type> $b
 * @return <type>
 */
function filemtime_compare ($a, $b) {

	$break = explode ('/', $_SERVER['SCRIPT_FILENAME']);
	$filename = $break[count ($break) - 1];
	$filepath = str_replace ($filename, '', $_SERVER['SCRIPT_FILENAME']);

	$file_a = realpath ($filepath . $a);
	$file_b = realpath ($filepath . $b);

    return filemtime ($file_a) - filemtime ($file_b);

}


/**
 * determine the file mime type
 *
 * @param <type> $file
 * @return <type>
 */
function mime_type ($file) {

	$file_infos = getimagesize ($file);
	$mime_type = $file_infos['mime'];

    // use mime_type to determine mime type
    if (!preg_match ("/jpg|jpeg|gif|png/i", $mime_type)) {
		display_error ('Invalid src mime type: ' . $mime_type);
    }

    return $mime_type;

}


/**
 *
 * @param <type> $mime_type
 */
function check_cache ($mime_type) {

	if (CACHE_USE) {

		if (!show_cache_file ($mime_type)) {
			// make sure cache dir exists
			if (!file_exists (DIRECTORY_CACHE)) {
				// give 777 permissions so that developer can overwrite
				// files created by web server user
				mkdir (DIRECTORY_CACHE);
				chmod (DIRECTORY_CACHE, 0777);
			}
		}

	}

}


/**
 *
 * @param <type> $mime_type
 * @return <type> 
 */
function show_cache_file ($mime_type) {

	// use browser cache if available to speed up page load
	if (isset ($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
		if (strtotime ($_SERVER['HTTP_IF_MODIFIED_SINCE']) < strtotime('now')) {
			header ('HTTP/1.1 304 Not Modified');
			die ();
		}
	}

	$cache_file = get_cache_file ($mime_type);

	if (file_exists ($cache_file)) {

		// change the modified headers
		$gmdate_expires = gmdate ('D, d M Y H:i:s', strtotime ('now +10 days')) . ' GMT';
		$gmdate_modified = gmdate ('D, d M Y H:i:s') . ' GMT';

		// send content headers then display image
		header ('Content-Type: ' . $mime_type);
		header ('Accept-Ranges: bytes');
		header ('Last-Modified: ' . $gmdate_modified);
		header ('Content-Length: ' . filesize ($cache_file));
		header ('Cache-Control: max-age=864000, must-revalidate');
		header ('Expires: ' . $gmdate_expires);

		if (!@readfile ($cache_file)) {
			$content = file_get_contents ($cache_file);
			if ($content != FALSE) {
				echo $content;
			} else {
				display_error ('cache file could not be loaded');
			}
		}

		die ();

    }

	return FALSE;

}


/**
 *
 * @staticvar string $cache_file
 * @param <type> $mime_type
 * @return string
 */
function get_cache_file ($mime_type) {

    static $cache_file;
	global $src;

	$file_type = '.png';

	if (stristr ($mime_type, 'jpeg')) {
		$file_type = '.jpg';
    }

    if (!$cache_file) {
		// filemtime is used to make sure updated files get recached
        $cache_file = DIRECTORY_CACHE . '/' . md5 ($_SERVER ['QUERY_STRING'] . VERSION . filemtime ($src)) . $file_type;
    }

    return $cache_file;

}


/**
 *
 * @global array $allowedSites
 * @param string $src
 * @return string
 */
function check_external ($src) {

	global $allowedSites;

    if (stristr ($src, 'http://') !== false) {

        $url_info = parse_url ($src);

		// convert youtube video urls
		// need to tidy up the code
		
		if ($url_info['host'] == 'www.youtube.com' || $url_info['host'] == 'youtube.com') {
			parse_str ($url_info['query']);

			if (isset ($v)) {
				$src = 'http://img.youtube.com/vi/' . $v . '/0.jpg';
				$url_info['host'] = 'img.youtube.com';
			}
		}

		// check allowed sites (if required)
		if (ALLOW_EXTERNAL) {

			$isAllowedSite = true;

		} else {

			$isAllowedSite = false;
			foreach ($allowedSites as $site) {
				//$site = '/' . addslashes ($site) . '/';
				if (stristr($url_info['host'], $site) !== false) {
					$isAllowedSite = true;
				}
			}
			
		}

		// if allowed
		if ($isAllowedSite) {

			$fileDetails = pathinfo ($src);
			$ext = strtolower ($fileDetails['extension']);

			$filename = md5 ($src);
			$local_filepath = DIRECTORY_CACHE . '/' . $filename . '.' . $ext;

			if (!file_exists ($local_filepath)) {

				if (function_exists ('curl_init')) {

					$fh = fopen ($local_filepath, 'w');
					$ch = curl_init ($src);

					curl_setopt ($ch, CURLOPT_TIMEOUT, 15);
					curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");
					curl_setopt ($ch, CURLOPT_URL, $src);
					curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
					curl_setopt ($ch, CURLOPT_HEADER, 0);
					curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
					curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
					curl_setopt ($ch, CURLOPT_FILE, $fh);

					if (curl_exec ($ch) === FALSE) {
						if (file_exists ($local_filepath)) {
							unlink ($local_filepath);
						}
						display_error ('error reading file ' . $src . ' from remote host: ' . curl_error($ch));
					}

					curl_close ($ch);
					fclose ($fh);

                } else {

					if (!$img = file_get_contents($src)) {
						display_error ('remote file for ' . $src . ' can not be accessed. It is likely that the file permissions are restricted');
					}

					if (file_put_contents ($local_filepath, $img) == FALSE) {
						display_error ('error writing temporary file');
					}

				}

				if (!file_exists ($local_filepath)) {
					display_error ('local file for ' . $src . ' can not be created');
				}

			}

			$src = $local_filepath;

		} else {

			display_error ('remote host "' . $url_info['host'] . '" not allowed');

		}

    }

    return $src;

}


/**
 * tidy up the image source url
 *
 * @param <type> $src
 * @return string
 */
function clean_source ($src) {

	$host = str_replace ('www.', '', $_SERVER['HTTP_HOST']);
	$regex = "/^((ht|f)tp(s|):\/\/)(www\.|)" . $host . "/i";

	$src = preg_replace ($regex, '', $src);
	$src = strip_tags ($src);
	$src = str_replace (' ', '%20', $src);
    $src = check_external ($src);

    // remove slash from start of string
    if (strpos ($src, '/') === 0) {
        $src = substr ($src, -(strlen ($src) - 1));
    }

    // don't allow users the ability to use '../'
    // in order to gain access to files below document root
    $src = preg_replace ("/\.\.+\//", "", $src);

    // get path to image on file system
    $src = get_document_root ($src) . '/' . $src;

    return $src;

}


/**
 *
 * @param <type> $src
 * @return string
 */
function get_document_root ($src) {

    // check for unix servers
    if (file_exists ($_SERVER['DOCUMENT_ROOT'] . '/' . $src)) {
        return $_SERVER['DOCUMENT_ROOT'];
    }

    // check from script filename (to get all directories to timthumb location)
    $parts = array_diff (explode ('/', $_SERVER['SCRIPT_FILENAME']), explode ('/', $_SERVER['DOCUMENT_ROOT']));
    $path = $_SERVER['DOCUMENT_ROOT'];
    foreach ($parts as $part) {
        $path .= '/' . $part;
        if (file_exists ($path . '/' . $src)) {
            return $path;
        }
    }

    // the relative paths below are useful if timthumb is moved outside of document root
    // specifically if installed in wordpress themes like mimbo pro:
    // /wp-content/themes/mimbopro/scripts/timthumb.php
    $paths = array (
        "./",
        "../",
        "../../",
        "../../../",
        "../../../../",
        "../../../../../"
    );

    foreach ($paths as $path) {
        if (file_exists ($path . $src)) {
            return $path;
        }
    }

    // special check for microsoft servers
    if (!isset ($_SERVER['DOCUMENT_ROOT'])) {
        $path = str_replace ("/", "\\", $_SERVER['ORIG_PATH_INFO']);
        $path = str_replace ($path, '', $_SERVER['SCRIPT_FILENAME']);

        if (file_exists ($path . '/' . $src)) {
            return $path;
        }
    }

    display_error ('file not found ' . $src, ENT_QUOTES);

}


/**
 * generic error message
 *
 * @param <type> $errorString
 */
function display_error ($errorString = '') {

    header ('HTTP/1.1 400 Bad Request');
	echo '<pre>' . htmlentities ($errorString);
	echo '<br />Query String : ' . htmlentities ($_SERVER['QUERY_STRING']);
	echo '<br />TimThumb version : ' . VERSION . '</pre>';
    die ();

}

Някой може ли да ми каже къде е този код и може ли да се премахне?
 
От: шел достъп от файл в WP тема

Хората са ти писали, че този файл има пропуски в сигурността и чрез него се качват шеловете в акаунта, а не че той самия е шел или съдържа такъв. Твоя файл е версия 1.19 при актуална към момента 2.8.11. Обнови си скрипта, или свали най-актуаланта версия на темата, ако е закупена официално.
 
От: шел достъп от файл в WP тема

В интернет се изписа огромно количество информация
за въпросния файл и пропуските му.
Някой може ли да ми каже къде е този код и може ли да се премахне?
По добре недей :)

Съвет - изтегли си най новата версия на файла и я замени в хоста.
Прегледай си всички файлове за скорошни манипулации по тях.
Дръпни целия сайт и го сканирай.
Разгледай файловете за скрити линкове, eval base64, и разни други подобни на които не им е там мястото.
Обнови си инсталацията на WP и всички плъгини.
Ползвай само доказали се плъгини.
Защита чрез .htaccess някаква имаш ли ?


Офф още колко може да се напише по въпроса ................
Ето последната версия на файла: http://code.google.com/p/timthumb/
 
От: шел достъп от файл в WP тема

Темата е купена преди време, но не се продава вече и за това няма по-нова версия.
 
От: шел достъп от файл в WP тема

Днес ще смениш този файл утре друг и така докато не биеш шута на УП - На мен ми писна - нямам нито един сайт на УП който през последната една година да не е хакван поне по два пъти като след всеки хак се е ъпдейтвало до най нова версия, хакването обикновено води до сриване на сайта и потъването му в серпа - Нямам повече нерви да храним хакерите - по маловажните проекти убих другите ги прехвърлих на Блогър.

При мен ставаше въпрос за сателити, но не мога да се сетя за сайт който да ми е абсолютно необходимо да е на УП ако имате такива всяка сутрин като си изпиете кафето първо проверявайте дали още имате сайт и ако нямате до обяд няма да сте безделници.
 
От: шел достъп от файл в WP тема

1.19 :cry:

mantaman - аз нямам нито един хакнат сайт на WP. Ок, един, но само защото бях добавил айпито на един от компютрите в офиса и колега реши а си направи бъзик като използва cookies.
 
От: шел достъп от файл в WP тема

нямам нито един сайт на УП който през последната една година да не е хакван поне по два пъти

Аз пък нямам нито един хакнат сайт който да е на УП.
Не, че не се е случвало но винаги заради мои пропуски.
 
От: шел достъп от файл в WP тема

Ако са ми основни сайтове и всеки ден дрема в тях и ги обновявам сигурно нямаше да ги хакват толкова често - Обаче немам време и нерви всяка сутрин да обикалям двайсетина сайта да видя кой са го хакнали и да си загубя половин ден да го оправям.

Дето се вика блогър още не са ми хаквали що да се мъча на УП :)
 
От: шел достъп от файл в WP тема

Ако направиш всичко необходимо още след инсталацията,
без проблем можеш да минаваш по 1 път на 2-3-4 седмици за
да си пускаш обновленията и да хвърлиш по 1 око все пак.
 
От: шел достъп от файл в WP тема

Направил съм необходимото прехвърлих нещата на Блогър и сега мога да минавам по един път на 5-6 месеца :)

Не мисля че трябва да ставам роб на няколко сайта и на платформа проядена от дупки в сигурността - сайтовете ги пускам да ми служат на мене а не аз да им слугувам на тях.
 
От: шел достъп от файл в WP тема

Ако са ми основни сайтове и всеки ден дрема в тях и ги обновявам сигурно нямаше да ги хакват толкова често - Обаче немам време и нерви всяка сутрин да обикалям двайсетина сайта да видя кой са го хакнали и да си загубя половин ден да го оправям.

Дето се вика блогър още не са ми хаквали що да се мъча на УП :)

Има едно нещо наречено cron jobs. Не е нужно да седиш всеки ден.
 
От: шел достъп от файл в WP тема

Да не е нужно всеки ден - Махнах УП :)

По едно време имах около 30 УП - като ги хакнат по два пъти в годината са около 60 хака - тоест при 52 седмици в годината поне веднъж седмично си му роб

Пожелавам успех на всички които си го харесват и имат време да му слугуват.
 
От: шел достъп от файл в WP тема

Добре де, mantaman, при мен защо за 2-3 години от както ползвам Wordpress нямам един хакнат сайт. Явно проблема не е в платформата :wink:
 
От: шел достъп от файл в WP тема

Добре де, mantaman, при мен защо за 2-3 години от както ползвам Wordpress нямам един хакнат сайт. Явно проблема не е в платформата :wink:

Аз имам поглед над 5-6 хиляди WP-та. Това не значи, че всички са хаквани или са се опитали да ги хакнат. В интерес на истината сега има модерен хак за Joomla и повече тормозят нея.
 
От: шел достъп от файл в WP тема

Аз имам поглед над 5-6 хиляди WP-та. Това не значи, че всички са хаквани или са се опитали да ги хакнат. В интерес на истината сега има модерен хак за Joomla и повече тормозят нея.

Ако някой иска да прави зулуми, ще ги направи, каквито и мерки да вземеш. Давам за пример twitter и последната атака над сървърите им. Те едва ли не инвестират в сигурност. Дали ще е, чрез експлойт в кода на платформата, дали ще е експлойт с уязвимост в сървъра (например apache overflow) или нещо друго, няма значение. Начини винаги има. Тук въпроса е, че хората, които се оплакват в този форум чисто и просто не спазват елементарни правила и за това биват хаквани от ботове и разни автоматични скриптове. Вината е на 100% в администраторите на тези сайтове, защото използват стар софтуер и нямат дори 1% от нужните знания или поне волята да се научат. Не може някои хора да нямат проблеми с 20-30 сайта (ок, не са 5-6000), а други да се оплакват всяка седмица зареди нещо, което за 2 минути може да се поправи.
 
От: шел достъп от файл в WP тема

Гледаш нещата само от твоята камбанария, нищо,.... млад си, ще озрееш. WP натрупа популярност сред CMS-ите, заради лесната си инсталация и лесния си back-end. Това го превърна в масово предпочитан продукт за поддържащи сайтове. Много от хората тук се опитват да правят лесни пари - т.е. сайтове на автопилот, които да носят пасивен доход. Разбирай МНС, артикъл директории (по няколко) и т.н. За да се постигне ниска цена на SEO-то трябва да разполагаш със собствен ресурс, а не само да купуваш авторитетни линкове. Затова и хората си правеха по 100-200 wp сайта, за да може, когато цъфне клинет в определена нисша да разполагат с ресурс или просто за да имат 100-200 MFA сайта, които да генерират дохот (не е важно да тече от едно място, по-важно е да капе от много места). Точно тези инсталации, които са оставени на автопилот биват атакувани. Преди WP, масово се хакваше Joomla. Сега пак е на мода атака срещу JCE компонента на Joomla. btw thimthumb не е част от ядрото на WP и се води добавен код. Не казвам, че CMS-а няма пропуски, просто в конкретния случай проблема е темата.
 
От: шел достъп от файл в WP тема

Лея моите познания и за УП са на нивото на Блогър - що не ми хакват блогърските сателити.

Пак казвам който смята че има излишно време непрекъснато да следи каква нова щуротия са измислили хакерите за УП нека да си ги поддържа - поне няма да му е скучен живота - На останалите като мен които нямат претенции да са специалисти и нямат желание да си губят времето да храним хакерите просто ползваме платформи които не се хакват.
 
От: шел достъп от файл в WP тема

Лея моите познания и за УП са на нивото на Блогър - що не ми хакват блогърските сателити.

Пак казвам който смята че има излишно време непрекъснато да следи каква нова щуротия са измислили хакерите за УП нека да си ги поддържа - поне няма да му е скучен живота - На останалите като мен които нямат претенции да са специалисти и нямат желание да си губят времето да храним хакерите просто ползваме платформи които не се хакват.

Вероятно защото за поддръжката на самият CMS се грижат от блогър. Именно поради тази причина не съм чул и за хакнати блогове в wordpress.com :) Майката му е да си поддържаш WP винаги обновен с стабилни версии и да избягваш плъгини, както и да се погрижиш за малко по сигурността и няма да имаш тези проблеми.

В момента си доволен от блогър и за сателитни сайтове са си супер. Хем не плащаш за хостинг, хем си спестяваш излишни нерви от даунтайм и т.н., но в момента в който ти трябва малко гъвкавост си духаш супата... меко казано.
 
От: шел достъп от файл в WP тема

Гледаш нещата само от твоята камбанария, нищо,.... млад си, ще озрееш. WP натрупа популярност сред CMS-ите, заради лесната си инсталация и лесния си back-end. Това го превърна в масово предпочитан продукт за поддържащи сайтове. Много от хората тук се опитват да правят лесни пари - т.е. сайтове на автопилот, които да носят пасивен доход. Разбирай МНС, артикъл директории (по няколко) и т.н. За да се постигне ниска цена на SEO-то трябва да разполагаш със собствен ресурс, а не само да купуваш авторитетни линкове. Затова и хората си правеха по 100-200 wp сайта, за да може, когато цъфне клинет в определена нисша да разполагат с ресурс или просто за да имат 100-200 MFA сайта, които да генерират дохот (не е важно да тече от едно място, по-важно е да капе от много места). Точно тези инсталации, които са оставени на автопилот биват атакувани. Преди WP, масово се хакваше Joomla. Сега пак е на мода атака срещу JCE компонента на Joomla. btw thimthumb не е част от ядрото на WP и се води добавен код. Не казвам, че CMS-а няма пропуски, просто в конкретния случай проблема е темата.

Сега ще ми кажеш, че ако аз пусна 100 блога на автопилот (макар че съм твърдо против автоматизираните сайтове) и отделя да речем 3-4 дни за да настроя всичко (сами да се ъпдейтват, спиране на достъп до определени места/директории и там каквото аз си знам) и след това ги проверявам един път на 2-3 месеца ще ги хакват през ден ли? Жестоко се съмнявам :)

Вината е зад волана, не в автомобила. Хората нямат знанията, а искат пари да правят. Не казвам, че аз имам, уча се.
 

Горе