Ethical Hacking Academy · Lektion

Hukommelse og stacken

Sådan fungerer overflows

Lektion 1 af 413 trin

Hukommelse og stacken er en gratis Ethical Hacking Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Ethical Hacking Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ethical Hacking Academy-kurset indeholder 4 lektioner i alt.

Hukommelseslayout for processer

Når et program kører, giver operativsystemet det et hukommelseslayout med adskilte områder: text (kode), data/BSS (globale variabler), heap (dynamisk allokering) og stack.

Bufferoverløb misbruger oftest stacken, så det er vigtigt at forstå den.

Hvad er stacken?

Stacken er et hukommelsesområde, der bruges til funktionskald. Den gemmer lokale variabler, funktionsargumenter og returadresser.

På x86 vokser den nedad: Når data skubbes på stacken, bevæger stack-markøren sig mod lavere adresser. Denne retning har betydning, når der opstår et overløb.

Stack frames

Hvert funktionskald opretter et stack frame. Et frame indeholder typisk lokale variabler, den gemte base pointer (EBP) og returadressen (den gemte EIP).

Returadressen fortæller CPU'en, hvor den skal fortsætte, når funktionen er færdig. Kontrol over den er kernen i udnyttelse af stackoverløb.

Vigtige registre

På 32-bit x86 er de vigtige registre:

  • ESP: stack-pointer, toppen af stacken.
  • EBP: base-pointer, anker for det aktuelle frame.
  • EIP: instruktions-pointer, adressen på den næste instruktion.

Hvis du har kontrol over EIP, har du kontrol over programmets eksekveringsflow.

Hvad er en buffer?

En buffer er en blok hukommelse med fast størrelse, f.eks. et lokalt tegnarray. Programmet forventer, at dataene kan være i den.

Hvis programmet kopierer flere data, end bufferen kan indeholde, uden at kontrollere længden, flyder det overskydende ind i den tilstødende hukommelse.

char buffer[64];
strcpy(buffer, user_input); // no bounds check

Overløbet

Et buffer-overløb opstår, når input overskrider bufferens størrelse og overskriver data ved siden af på stakken.

Da den gemte EBP og returadressen ligger lige efter lokale buffere, kan et tilstrækkeligt stort input overskrive returadressen og kapre kontrolflowet.

Farlige funktioner

Overløb skyldes som regel usikre C-funktioner, der ikke kontrollerer længden:

  • strcpy, strcat, sprintf, gets.

Sikrere alternativer som strncpy eller snprintf tager en størrelsesgrænse, men ældre kode er fyldt med de farlige funktioner.

gets(buffer); // never use: no length limit at all

Hvad overskrivning af EIP giver dig

Når den sårbare funktion returnerer, henter CPU'en den nu angriberkontrollerede returadresse ind i EIP og springer dertil.

Hvis du lader EIP pege på din egen injicerede maskinkode (shellcode), udfører CPU'en den med programmets privilegier.

Little-endian-adressering

x86 bruger little-endian: værdier på flere byte gemmes med den mindst betydende byte først. For at overskrive returadressen med 0x080414C3 skriver du bytes i omvendt rækkefølge.

At angive endian-formatet forkert er en almindelig begynderfejl, som får exploits til at mislykkes uden synlig fejl.

address 0x080414C3 -> bytes \xc3\x14\x04\x08

Moderne beskyttelser

Moderne systemer tilføjer forsvarsmekanismer, der gør exploitation vanskeligere:

  • DEP/NX: markerer stakken som ikke-eksekverbar.
  • ASLR: randomiserer hukommelsesadresser.
  • Stack canaries: opdager overskrivninger før returnering.

Dette kursus fokuserer på det klassiske tilfælde (med deaktiverede beskyttelser) for at lære det grundlæggende.

Hvorfor dette stadig er vigtigt

Selvom moderne forsvarsmekanismer gør klassiske stack-overløb vanskeligere, er det grundlæggende stadig vigtigt. Indlejrede systemer, IoT og ældre software mangler ofte disse beskyttelser helt.

At mestre det grundlæggende tilfælde er også en forudsætning for avancerede teknikker som ROP, der omgår moderne afværgeforanstaltninger.

Hurtigt tjek

Husk, hvilken værdi angriberen i sidste ende vil kontrollere.

Opsummering

Du forstår nu grundlaget:

  • Stakken gemmer lokale variabler, gemt EBP og returadressen og vokser nedad.
  • ESP, EBP, EIP er de vigtigste x86-registre; kontrol over EIP giver kontrol over eksekveringen.
  • Usikre funktioner som strcpy og gets forårsager overløb.
  • x86 bruger little-endian; moderne forsvarsmekanismer er DEP, ASLR og canaries.

Nu skal du fuzz'e et program for at finde crash-offsettet.

Gratis at komme i gang

Lær Ethical Hacking Academy med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
31
Lektioner
111

Ofte stillede spørgsmål

Er lektionen “Hukommelse og stacken” gratis?

Ja — hele teksten til “Hukommelse og stacken” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Ethical Hacking Academy-kurset, skal du opgradere til CoddyKit PRO. Ethical Hacking Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Hukommelse og stacken”?

Sådan fungerer overflows Du øver dig i Ethical Hacking Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Ethical Hacking Academy?

Der kræves ingen tidligere erfaring. Ethical Hacking Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Hukommelse og stacken”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Ethical Hacking Academy-lektion?

Ja. Alle Ethical Hacking Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hukommelse og stacken
  2. Fuzzing efter crashes
  3. Kontrol af EIP
  4. Shellcode og exploitation
← Tilbage til Ethical Hacking Academy