Guten Morgen an euch alle
ich bin gerade durch google auf das Forum hier gestoßen und dachte ich frage euch mal um Hilfe...
Also: Ich muss heute ein Übungsblatt zum Thema Buffer overflows abgeben, bei dem ein C-Programm gegeben ist und ein Exploit, welches einen Buffer Overflow anzettelt- und verschiedene Möglichkeiten, wie man das verhindern kann. Und nun soll ich bewerten, was von den Möglichkeiten am sinnvollsten ist.
Mein Problem ist jetzt, dass ich nicht wirklich Ahnung von C habe (ok, vielleicht auch gar keine Ahnung)
und mir nur schwer zusammenreimen kann, was das alles genau macht
![:)](images/smiles/icon_smile.gif)
Deswegen komme ich damit nicht klar und dachte ich frage hier um Hilfe.
Hier ist mal der Code des Programms:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| bool check (short i, short n){ return i<n; }
int main (int argc, char *argv[]){ if (argc!= 4 ) return -1; n= atoi(argv[1]); if (n<0) return -1; int a[n]; int i= atoi(argv[2]); int d=atoi(argv[3]); if(check(i,n)) a[i]=d; return 0; } |
Und hier das Exploit:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| int main (void){ char* args[3]; char *env[1]; char sc[sizeof(shellcode)+1]; char a1[20]; char a2[20]; char a3[20]; sprintf(a1, "%d", 32767); sprintf(a2, "%d", 32767+S_LOCAL+2); sprintf(a3, "%d", (int) ARGV0_ADDR); strcpy(sc, shellcode); sc[sizeof(shellcode)]='\0'; env[0]=NULL; return execve("target", args, env); } |
Wobei S_LOCAL die Größe der lokalen Variablen zwischen array a und dem sf ist.
So und folgende Möglichkeiten zur Abwehr sind angegeben, die ich dann bewerten soll:
a) Checking array bounds at runtime with CRED
b) Checking array bounds at run-time with Libsafe or Libsafe PLUS
c) Stack canaries
d) Non-executable stack
e) Adress space randomization
Für mich macht das halt leider alles Sinn - aber es ist sehr unwahrscheinlich dass das stimt
Würde mich über jede Hilfe freuen
Vielen Dank & liebe Grüße,
Jule
Moderiert von
Narses: Topic aus Linux API verschoben am Fr 23.11.2012 um 08:25
Moderiert von
Gausi: Delphi- durch C#-Tags ersetzt