Ethical Hacking Academy · Lektion

Kontrol af EIP

Overskriv returadressen

Lektion 3 af 413 trin

Kontrol af EIP er en gratis Ethical Hacking Academy-lektion på CoddyKit. Dette er lektion 3 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.

Målet

Du har offsettet, så du kan placere fire vilkårlige bytes i EIP. Spørgsmålet er nu: Hvilken adresse skal du sætte der?

Du vil have EIP til at pege på din shellcode. Men du kan ikke bare hardkode stack-adressen; du har brug for et pålideligt spring.

Hvorfor ikke hardkode stack-adressen?

Stack-adressen, hvor din shellcode ligger, kan ændre sig mellem kørsler og systemer. Selv små ændringer i miljøet flytter den.

I stedet bruger du en stabil instruktion, der allerede ligger i hukommelsen, og som omdirigerer eksekveringen til det sted, ESP peger på i øjeblikket.

JMP ESP-tricket

Hvis ESP peger på din shellcode på tidspunktet for nedbruddet, kan du sætte EIP til adressen på en JMP ESP-instruktion. Når EIP indlæser adressen, udfører CPU'en jmp esp og springer ind i din shellcode.

Denne indirekte tilgang gør exploit'et pålideligt uanset den præcise stack-adresse.

jmp esp   ; opcode FF E4

Find en JMP ESP

Du søger i indlæste moduler (helst moduler uden ASLR) efter opcode-bytesene FF E4. Modulbasens adresse forbliver konstant, så denne gadget er pålidelig.

Værktøjer som mona.py finder automatisk egnede instruktioner.

!mona jmp -r esp -cpb "\x00"

Undgå problematiske tegn

Nogle byteværdier ødelægger inputtet, før det når bufferen intakt. Den klassiske er null-byten 0x00, som afslutter C-strenge. Andre omfatter 0x0a (linjeskift) og 0x0d (vognretur).

JMP ESP-adressen må ikke indeholde nogen af disse problematiske tegn.

Identifikation af problematiske tegn

For at finde ud af, hvilke bytes der er problematiske, skal du sende alle byteværdier fra 0x00-0xff i bufferen og undersøge hukommelsen i debuggeren. Bytes, der er ændrede eller mangler, er problematiske tegn.

Du udelader dem både fra returadressen og shellcode.

!mona bytearray -cpb "\x00"

Opbygning af EIP-overskrivningen

Saml nu inputtet: padding op til offsettet og derefter JMP ESP-adressen i little-endian-rækkefølge.

Hvis JMP ESP ligger på 0x625011AF, skrives bytesene i omvendt rækkefølge.

buf = "A"*offset + "\xaf\x11\x50\x62"  # 0x625011AF, little-endian

Kontrol af springet

Sæt et breakpoint på JMP ESP-adressen i debuggeren, og kør exploit'et. Når EIP når adressen og går videre til ESP, har du bekræftet en pålidelig omdirigering.

På dette tidspunkt peger EIP på det sted, hvor din shellcode kommer til at ligge.

Skab plads til shellcode

Efter returadressen indeholder den resterende buffer (som ESP peger på) din shellcode. Hvis pladsen er trang, kan du få brug for et kort spring eller at flytte den.

En NOP-slæde (en række 0x90-bytes, der ikke udfører noget) før shellcode giver en større tolerance, så springet kan lande hvor som helst i slæden.

buf = "A"*offset + ret + "\x90"*16 + shellcode

Sæt det hele sammen

Den fulde exploit-struktur står nu klart:

  • Padding op til offsettet.
  • JMP ESP-adressen (uden problematiske tegn, little-endian).
  • En NOP-slæde.
  • Shellcode.

Du er ét trin fra en shell.

Alternativer til JMP ESP

JMP ESP er den klassiske omdirigering, men det er ikke den eneste. Hvis et andet register peger på din buffer, kan du bruge jmp eax, call esp eller en push esp; ret-gadget.

Princippet er det samme: Find en stabil instruktion, der overfører kontrollen til det sted, hvor din shellcode ligger.

Hurtigt tjek

Husk, hvorfor JMP ESP foretrækkes frem for en hardkodet stack-adresse.

Opsummering

Du har nu kontrol over eksekveringsflowet:

  • Overskriv EIP med adressen på en JMP ESP-gadget i stedet for en skrøbelig stack-adresse.
  • Find gadget'en i et modul uden ASLR, og undgå problematiske tegn som 0x00.
  • Skriv adressen i little-endian, og tilføj en NOP-s læde før shellcode.

Nu skal du generere shellcode og åbne en shell.

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 “Kontrol af EIP” gratis?

Ja — hele teksten til “Kontrol af EIP” 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 “Kontrol af EIP”?

Overskriv returadressen 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 3 af 4.

Hvor lang tid tager lektionen “Kontrol af EIP”?

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