Bonjour à tous,
Ces derniers temps je me suis interessé au BOF et je suis occuper de faire de nombreux challenges. Dans le cadre de l'exploitation d'un bof, nous pouvons mettre un shellcode dans une variable environnement. Nous devons par la suite trouver l'adresse mémoire de cette variable environnement. Pour ce faire, j'ai trouvé un code en c que je vous donne
Etant pas trop friands de C et je me suis mis en tête de coder le même programme en python. J'ai donc transposer le code plus haut en python voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char *ptr; if(argc < 3) { printf("Usage: %s <environment variable> <target name program>\n", arg$ exit(EXIT_FAILURE); } ptr = getenv(argv[1]); /* get env var location */ ptr += (strlen(argv[0]) - strlen(argv[2]))*2; /* adjust for program name */ printf("%s will be at %p\n", argv[1], ptr); return EXIT_SUCCESS; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 import os import sys env = sys.argv[1] bin = sys.argv[2] if sys.argv < 3: print("Usage python3 getenv.py <VARIABLE> <BINAIRE>") else: ptr = id(os.environ[env]) ptr+=(len(sys.argv[0])-len(sys.argv[2]))*2 print("L'adresse de "+env+" est à "+hex(ptr))
Néanmoins, lorsque je compare les deux adresses (celle du prog C et celle de python) elle ne sont pas identique et celle du C est bien la bonne. J'aimerais savoir si, mon code est mauvais où si le décalage provient de l'interpréteur python en lui même ?
Merci de vos réponses.
Cordialement
Partager