Kürzlich lerne ich etwas Experiment über ret2libc Exploit, fand ich, dass wir die Umgebungsvariable verwenden können, Payload zu speichern, und der folgende Code getenv.c
kann uns helfen, den Speicherort zu bekommen die Umgebungsvariable:Holen Sie den Speicherort der Umgebungsvariable beim Versuch, ret2libc Exploit
$ ~/getenv FAV ./program FAV will be at 0xbfffff22
Es macht mich so verwirrt, dass der ptr
Wert nicht di verwendet wird:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(int argc, char *argv[]) {
char *ptr;
if(argc < 3) {
printf("Usage: %s <environment var> <target program>\n", argv[0]);
exit(0);
}
ptr = getenv(argv[1]); /* Get env var location. */
ptr += (strlen(argv[0]) - strlen(argv[2])); /* Adjust for program name. */
printf("%s will be at %p\n", argv[1], ptr);
}
wir das Programm auf diese Weise nutzen können rectly, aber tun die adujstment (strlen(argv[0]) - strlen(argv[2]))
; Warum?