web-dev-qa-db-fra.com

Comment détourner une session?

Malgré le titre flagrant de la question, il s'agit en fait d'un véritable objectif.

Mon site utilise PHP code comme ceci:

    $select="select id from tableA where user_id='".$_SESSION['sess_user_id']."'";

J'essaie vraiment de penser comme un pirate et de comprendre comment je peux modifier cette valeur. J'ai lu des articles sur le "détournement" de session, mais je ne sais pas comment cela peut être fait ...

25
Steve

Fondamentalement, lorsque vous détournez une session de quelqu'un, vous prenez son identifiant de session et faites semblant d'être le vôtre. Habituellement, l'ID de session est transféré dans le cookie, ce qui signifie que si vous pouvez accéder au cookie des autres parties, vous pouvez simplement le placer dans votre propre cookie et vous avez volé leur session.

Cela peut être fait de plusieurs manières, par exemple en reniflant le réseau sans fil et en regardant les paquets HTTP en cours de transfert ou en attaque XSS où vous pouvez dire au navigateur des victimes de vous révéler leurs informations de cookie.

Je voudrais mentionner que l'exemple que vous décrivez dans votre question peut également être vulnérable à SQL-Injection. Si je change l'identifiant de session de mon cookie en

asdf' OR 1=1-- 

Je serais très probablement authentifié en tant qu'utilisateur valide. Pour éviter cela, vous devez vous assurer d'avoir une désinfection appropriée des données sales provenant de vos clients avant d'utiliser les données pour quoi que ce soit.

10
Chris Dale

Si vous êtes intéressé par une démonstration pratique, Twitter est un très bon exemple de la facilité avec laquelle cela se fait. Tu auras besoin:

  • Deux ordinateurs
  • Firefox avec Firebug (il existe évidemment d'autres options, mais elles sont populaires et faciles à obtenir)
  • Un éditeur de cookies, comme Advanced Cookie Manager (encore une fois, un module complémentaire facilement installable via Firefox)

Sur l'ordinateur A avec firefox et firebug, connectez-vous à votre compte Twitter sur le site non https. Une fois connecté, ouvrez Firebug et regardez la ligne "GET Twitter.com". Lorsque vous le développez, regardez sous la section En-têtes de réponse et recherchez Set-Cookie. Vous y trouverez un cookie appelé _Twitter_sess. Mettez en surbrillance et copiez la valeur (jusqu'au point-virgule).

Ouvrez maintenant Firefox avec le gestionnaire de cookies avancé sur l'ordinateur B et accédez à la page de connexion Twitter. Ouvrez l'Advanced Cookie Manager et filtrez pour Twitter.com. Une fois que vous avez trouvé le domaine Twitter.com et sa liste de cookies, vous verrez un cookie appelé _Twitter_sess. Supprime-le. Créez maintenant un nouveau cookie avec le nom "_Twitter_sess", le chemin "/" et "Value" la valeur de _Twitter_sess de l'autre ordinateur. Enregistrez le cookie.

Maintenant, fermez le gestionnaire de cookies et revenez à la page de connexion Twitter, actualisez la page et bam, vous y êtes.

Maintenant, imaginez un moyen intelligent pour obtenir la session de quelqu'un d'autre (wifi ouvert, xss) et c'est une façon de procéder au détournement de session.

7
Safado

Le code de Karrax est une attaque par injection SQL (à laquelle votre code est vulnérable - cela doit être corrigé) et non une attaque de détournement de session.

$select="select id from tableA where user_id='"
    .mysql_real_escape_string($_SESSION['sess_user_id'], $db_handle)
    ."'";

Dans le détournement de session, Bob vole la valeur de l'ID de session que vous avez attribué à Alice. Cela pourrait être le résultat d'une attaque MITM sur le flux HTML, d'un reniflage réseau, d'un bogue CSS qui lui a permis d'incorporer du javacript sur votre site ou d'autres méthodes.

Il est important de ne pas perdre de vue les problèmes de fixation de session - même si vous définissez les indicateurs SSL et HTTP uniquement sur un cookie ET définissez use_only_cookies qui ne résout pas le problème où Bob attaque l'ordinateur d'Alice avant d'accéder à votre site et définit une valeur spécifique pour l'identifiant de session. Bob peut alors définir la même valeur sur son ordinateur et ses demandes sont liées à la même session qu'Alice. Ainsi, lorsque vous vous authentifiez, vous devez générer un nouvel identifiant de session - voir session_regenerate_id ()

4
symcbean

Le détournement de session implique généralement le vol d'un cookie d'un utilisateur. Par exemple, Firesheep est un plug-in pour Firefox qui vole des sessions sur un Wifi non sécurisé. HTTP est un protocole sans état, donc le mieux que nous puissions faire pour authentifier les gens est avec les cookies.

Le code PHP que vous avez dans votre question est un exemple de code qui est pourrait être sensible à l'injection SQL. Il est généralement préférable de nettoyer les variables avant de les insérer dans une requête comme ça.

2
WalterJ89