• STATISTIQUES
  • Il y a eu un total de 0 membres et 52420 visiteurs sur le site dans les dernières 24h pour un total de 52 420 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges
    [FR] Le top web
    Nous offrons une sélection la plus large possible de resources webmaster gratuites, hébergement gratuit...
    Webmaster
    [EN] xda-developers
    Très bon site pour les gros bidouilleurs de smartphone de windows à androïd et de Apple jusqu'...
    Phreaking
    [FR] Secuser
    Actualité de la sécurité informatique, fiches virus et hoax, alertes par email, antivirus gratui...
    Hacking
    [EN] HackQuest
    Logic: 12, JavaScript: 14, Applet: 6, CrackIt: 13, Crypto: 11, Internet: 3, Exploit: 7, Stegano: 12, Flash: 1, Programmi...
    Challenges
    [FR] Newbie Contest
    Crackme: 35, Cryptographie: 49, Hacking: 27, Javascript/Java: 17, Logique: 31, Programmation: 23, Stéganographie: 53
    Challenges

  • 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,609
Sujets : 71
Points: 465
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,609
Sujets : 71
Points: 465
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