Kontrol af EIP
Overskriv returadressen
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 E4Find 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-endianKontrol 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 + shellcodeSæ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.
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.