5 votes

Piratée ? Comment l'ajout d'un nom de fichier permet-il d'accéder à des données sur le site... voir l'exemple

La visite de tous les sites suivants vous renvoie à l'écran de connexion :

http://mysite.com/admin/configuration.php
http://mysite.com/admin/login.php

Cependant, si vous visitez (notez que les deux dernières parties de la chaîne d'url sont toutes deux .php) :

http://mysite.com/admin/configuration.php/login.php

Vous pouvez voir l'écran de configuration et toutes ses données !

En outre, si vous ajoutez des variables GET, vous pouvez même obtenir des champs modifiables :

http://mysite.com/admin/configuration.php/login.php?cID=1&action=edit

Que se passe-t-il ici ?

Je dois noter que ce site utilise un panier d'achat absolument horrible appelé oscommerce. Le code est un cauchemar à gérer mais je suis coincé avec lui pour l'instant.


EDIT

Correction basée sur l'excellent et précis commentaire de vstm ci-dessous :

Cette mesure interviendrait juste avant la vérification de l'existence d'une $current_page != FILENAME_LOGIN (autour des lignes 141-143 dans /admin/includes/application_top.php). Attention, il ne s'agit que d'un correctif d'urgence car la vraie solution est de ne jamais utiliser oscommerce qui est aussi sûr qu'une ceinture de pute.

//$current_page = basename($PHP_SELF); //this is the default
$current_page = basename($_SERVER['SCRIPT_NAME']); //change that default to this

if ( ($current_page == FILENAME_LOGIN) && !tep_session_is_registered('redirect_origin') ) {
      $current_page = FILENAME_DEFAULT;
      $HTTP_GET_VARS = array();
    }

Si quelqu'un essaie de le faire, n'oubliez pas que le redirect_origin Il se peut que la variable de session soit déjà définie, ce qui donnera l'impression de ne pas fonctionner. Il suffit de la désactiver et de réessayer.

16voto

fangshi Points 1

Dans le fichier includes/application_top qui est inclus dans tous les scripts de l'application /admin vous trouverez ce petit bijou (j'ai supprimé certaines parties inintéressantes) :

// redirect to login page if administrator is not yet logged in
if (!tep_session_is_registered('admin')) {
    $redirect = false;

    $current_page = basename($PHP_SELF);

    if ($current_page != FILENAME_LOGIN) {
        // session stuf blabla
        $redirect = true;
    }

    if ($redirect == true) {
        tep_redirect(tep_href_link(FILENAME_LOGIN));
    }

    unset($redirect);
}

Ce code n'est exécuté que lorsque vous n'êtes pas connecté. Ce qu'il fait essentiellement, c'est vérifier si l'élément basename de $PHP_SELF est login.php. S'il s'agit de login.php, la page est rendue, sinon vous êtes redirigé.

Si vous faites cette demande :

http://mysite.com/admin/configuration.php/login.php

Le PHP_SELF sera alors

/admin/configuration.php/login.php

Et basename($PHP_SELF) sera bien entendu login.php le rendu se poursuit donc et aucune redirection n'est exécutée. Mais ce n'est bien sûr pas login.php qui est rendu mais configuration.php . Le reste de l'URL "/login.php" est "ignoré" et fourni à PHP dans $_SERVER['PATH_INFO'].

Edit : Je voudrais ajouter que ce "bug" n'affecte que oscommerce ou tout autre logiciel qui utilise une solution de ce type pour "sécuriser" le login d'administration (je pense qu'il n'y en a pas tant que ça qui souffrent de cela). Ce n'est pas un bug qui affecte tous les logiciels PHP.

3voto

Shane Madden Points 112034

Il s'agit simplement d'une vulnérabilité dans le configuration.php file - le truc du "faux répertoire" avec un fichier php comme partie du chemin est une fonctionnalité intentionnelle et quelque chose que vous verrez souvent - la façon dont les choses après la barre oblique sont gérées dépend du fichier php dans le chemin. (mediawiki me vient à l'esprit comme un bon exemple)

1voto

sunday2313 Points 1

J'ai essayé sur une machine Windows d'utiliser une double url comme indiqué - le message indique que la page n'a pas été trouvée. Mais le serveur est configuré pour ne pas autoriser les transitions de répertoire et OSCommerce est configuré pour vérifier l'agent utilisateur et empêcher les sessions d'araignée ainsi que pour utiliser un répertoire de sessions - c'est peut-être la raison pour laquelle il est sécurisé et n'autorise pas l'ajout d'une url. En outre, le serveur considère le fichier /login.php comme faisant partie du premier nom de fichier, n'autorise pas les transitions de répertoire et n'autorise pas les points dans un nom de fichier - il refuse donc entièrement l'url. Le serveur est donc sécurisé, indépendamment de ce que le logiciel de catalogage tente de faire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X