• STATISTIQUES
  • Il y a eu un total de 1 membres et 12429 visiteurs sur le site dans les dernières 24h pour un total de 12 430 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 831
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Secuser
    Actualité de la sécurité informatique, fiches virus et hoax, alertes par email, antivirus gratui...
    Hacking
    [EN] Gekko
    Site de challenge présenter sous la forme d'une quête. Vous êtes un agent secret qui répond sous le nom...
    Challenges
    [EN] Hack This Site
    Hack This Site est considéré comme un réel terrain d'entraînement légal pour le...
    Hacking
    [EN] Dare your mind
    JavaScript: 6, Crypto: 44, Stegano: 36, Logic: 13, Special: 27, Science: 11, Realistic: 7, Programming: 10, Crack It: 6,...
    Challenges
    [EN] CS Tutoring Center
    Site de challenge spécialisé dans les challenges de programmation C++ et java cependant, d'autres langages pe...
    Challenges
    [EN] Defcon
    Lancé en 1992 par Dark Tangent, DEFCON est la plus ancienne et la plus grande conférence underground de...
    Hacking
    [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Adresse des variables d'environnement ?
21-10-2012, 18h18 (Modification du message : 25-10-2012, 18h05 par welc0me.)
Message : #1
welc0me Hors ligne
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>
#include <stdlib.h>

int main(int argc, char **argv) {
     printf("%s est à l'adresse : %p\n", argv[1], getenv(argv[1]));
}

Mais quand je le lance à plusieurs reprises j'obtiens :

Code :
./getenv PATH
PATH est à l'adresse : 0xfff20cf9
./getenv PATH
PATH est à l'adresse : 0xffc72cf9
./getenv PATH
PATH est à l'adresse : 0xffbaacf9
./getenv PATH
PATH est à l'adresse : 0xff82acf9

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 Smile
+1 (0) -1 (0) Répondre
21-10-2012, 18h42
Message : #2
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,613
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é Wink
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (1) -1 (0) Répondre
21-10-2012, 18h47
Message : #3
b0fh Hors ligne
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
+1 (1) -1 (0) Répondre
21-10-2012, 18h54 (Modification du message : 21-10-2012, 18h55 par welc0me.)
Message : #4
welc0me Hors ligne
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 Smile

Merci pour ton aide ! Smile

EDIT:
Je viens d'effectuer ça, merci à toi b0fh Smile
+1 (0) -1 (0) Répondre
21-10-2012, 21h49
Message : #5
welc0me Hors ligne
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.
Mais ici, les adresses sont toujours entre 0xbfffffff et 0xffffffff dans l'espace kernelland. Pourquoi ?

Juste, quelqu'un a une idée ? :x
+1 (0) -1 (0) Répondre
22-10-2012, 08h13
Message : #6
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,613
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 Wink

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
+1 (0) -1 (0) Répondre
22-10-2012, 19h13
Message : #7
welc0me Hors ligne
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 !
+1 (0) -1 (0) Répondre
25-10-2012, 18h04 (Modification du message : 25-10-2012, 18h04 par welc0me.)
Message : #8
welc0me Hors ligne
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]);
ptr += (strlen(argv[0]) - strlen(argv[2])) * 2
Avec argv[2] le nom du programme cible et argv[1] le nom de la variable d'environnement.

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
SHELLCODE is at 0xbfffffd8

Voilà, si quelqu'un sait pourquoi ça fait ça...
+1 (0) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut