Adresse des variables d'environnement ?
|
21-10-2012, 18h18
(Modification du message : 25-10-2012, 18h05 par welc0me.)
Message : #1
|
|
welc0me
Membre Messages : 40 Sujets : 6 Points: 1 Inscription : Oct 2012 |
Adresse des variables d'environnement ?
Bonsoir,
J'ai vu un peu partout que l'adresse d'une variable d'environnement était facile à déterminer précisément. J'ai fais un petit programme très simple (compilé en 32 bits) : Code : #include <stdio.h> Mais quand je le lance à plusieurs reprises j'obtiens : Code : ./getenv PATH L'adresse varie tout le temps, comment cela se fait-il ? De plus, j'ai lu que les variables d'environnement se situaient dans la partie userland, entre les adresses 0x0 et 0xbfffffff. Mais ici, les adresses sont toujours entre 0xbfffffff et 0xffffffff dans l'espace kernelland. Pourquoi ? Merci |
|
21-10-2012, 18h42
Message : #2
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,614 Sujets : 72 Points: 466 Inscription : Jan 2012 |
RE: Adresse des variables d'environnement ?
Bonjour,
Déjà , par défaut t'as un truc qui s'appelle l'ASLR, qui a pour but de faire changer l'adresse des variables d'environnement (plus généralement de la "stack"), afin de complexifier la prédiction de l'adresse de la variable (ça fait partie des protections ajoutées au kernel). Sinon, pour ce qui est des adresses en 0xff l'hypothèse la plus plausible selon moi serait l'émulation 32bits (il me semble que tu tournes sur un système 64 bits), du coup il se peut que le schéma des adresses soit chamboulé
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
21-10-2012, 18h47
Message : #3
|
|
b0fh
Membre actif Messages : 210 Sujets : 17 Points: 309 Inscription : Jul 2012 |
RE: Adresse des variables d'environnement ?
Pour reprendre ce que dit mon estimé collègue, sous linux tu peux désactiver l'aslr avec
Code : echo 0 >/proc/sys/kernel/randomize_va_space |
|
21-10-2012, 18h54
(Modification du message : 21-10-2012, 18h55 par welc0me.)
Message : #4
|
|
welc0me
Membre Messages : 40 Sujets : 6 Points: 1 Inscription : Oct 2012 |
RE: Adresse des variables d'environnement ?
J'avais désactivé l'ASLR au début de mon étude sur les buffers overflows, je viens de regarder et en fait je l'avais remise (je ne sais pas quand et je ne sais pas pourquoi). Bref c'est donc une erreur d'inatention de ma part x)
Au final j'ai compilé en 32bits et 64bits et l'exécution dans les deux cas est tout à fait plausible pour l'info. Donc pas de chamboulement d'adresse Merci pour ton aide ! EDIT: Je viens d'effectuer ça, merci à toi b0fh |
|
21-10-2012, 21h49
Message : #5
|
|
welc0me
Membre Messages : 40 Sujets : 6 Points: 1 Inscription : Oct 2012 |
RE: Adresse des variables d'environnement ?
Citation :De plus, j'ai lu que les variables d'environnement se situaient dans la partie userland, entre les adresses 0x0 et 0xbfffffff. Juste, quelqu'un a une idée ? :x |
|
22-10-2012, 08h13
Message : #6
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,614 Sujets : 72 Points: 466 Inscription : Jan 2012 |
RE: Adresse des variables d'environnement ?
Ce que je voulais dire, c'est que la "logique" des adresses change si tu es en x86 ou en x64 (je parle de l'architecture de ton NOYAU, pas de l'architecture avec laquelle tu compiles ton application), et je pense que c'est l'émulation x86 qui fait ce changement d'adresse
Si tu exécutes la version 32 bits de ton programme sur un noyau 32 bits, tu te retrouves bien avec une adresse en 0xbfff... Sinon j'aimerais bien voir la tronche de ton adresse sur ton prog compilé en 64 bits :> (j'ai pas de kernel 64bits sous la main)
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
22-10-2012, 19h13
Message : #7
|
|
welc0me
Membre Messages : 40 Sujets : 6 Points: 1 Inscription : Oct 2012 |
RE: Adresse des variables d'environnement ?
Ahhhh d'accooooord ! J'avais mal pigé le truc...
J'vais télécharger une distrib 32 bits alors, ça à l'air plus simple pour tout ! x) Merci ! |
|
25-10-2012, 18h04
(Modification du message : 25-10-2012, 18h04 par welc0me.)
Message : #8
|
|
welc0me
Membre Messages : 40 Sujets : 6 Points: 1 Inscription : Oct 2012 |
Adresse des variables d'environnement ?
Ah, ben c'est pas si résolu que ça !
J'ai réinstallé linux en x86, et quand j'essaie de déterminer l'adresse d'une variable d'environnement, je tombe toujours un peu à côté. J'me suis vraiment creusé la tête mais là je vois vraiment pas pourquoi... J'essaie de le faire de deux façons. Première façon : Code : ptr = getenv(argv[1]); Deuxième façon : Code : ret = 0xbffffffa - strlen(argv[1]) - strlen("/home/test/buffer_overflow"); J'obtiens d'ailleurs 2 résultats différents : Code : SHELLCODE is at 0xbffff50f Voilà , si quelqu'un sait pourquoi ça fait ça... |
|
Utilisateur(s) parcourant ce sujet : 8 visiteur(s)