I datasikkerhet og programmering, en buffer overflow, eller bufferoverløp, er en anomali der et program, mens du skriver data til en buffer, overskridelser bufferen sin grense og overskriver tilstøtende minne. Dette er et spesielt tilfelle av overtredelse av minne sikkerhet. Buffer overflow kan utløses av innganger som er laget for å kjøre kode eller endre måten programmet fungerer. Dette kan resultere i uberegnelige program oppførsel, inkludert Memory Access feil, feil resultater, en krasj eller et brudd på systemsikkerhet.
De er dermed grunnlaget for mange sikkerhetsproblemer i programvare og kan skadelig utnyttes. Programmeringsspråk som vanligvis forbindes med buffer overflow inkluderer C og C ++, som gir ingen innebygd beskyttelse mot tilgang til eller overskrive data i noen del av minnet, og ikke automatisk sjekke at data skrives til en matrise (den innebygde buffer type) er innenfor grensene for den oppstillingen. Grensekontroll kan forhindre buffer overflow.
Jeg vet at du har mange spørsmål Hva er årsaken til denne Crazy bug? > Det er en feil i programmering (Writing Codes) Er det viktig å lære.
; det er bare små dum utnytte? > denne type utnytte hvordan gjør forskjellen mellom Profesjonelle Hackere og Normale Hackers. Jeg vil forklare at i leksjon 4;). Kan u gi meg en teknisk beskrivelse En buffer overflow oppstår når data skrives til en buffer, på grunn av utilstrekkelig grensekontroll, ødelegger dataverdier i minneadresser som grenser til den tilordnede bufferen. Oftest skjer dette når du kopierer strenger av tegn fra en buffer til en annen.
Grunnleggende eksempel I følgende eksempel, har et program definert to dataelementer som er tilstøtende i minnet: en 8- byte-lang streng buffer, A, og en to-byte heltall, B. I utgangspunktet inneholder A ingenting, men null byte, og B inneholder nummer 1979. Tegn er en byte bred. variabelnavnet AB verdi [null string] 1 979 hex verdi 00 00 00 00 00 00 00 00 07 BB Nå forsøker programmet å lagre null-terminert streng "overdreven" i en buffer.
Ved å unnlate å sjekke lengden på strengen, det overskriver verdien av B: variabelnavnet AB value 'e' 'x' 'c' 'e' 's' 's' 'jeg' 'v' 25856 hex 65 78 63 65 73 73 69 76 65 00 Selv om programmereren ikke har til hensikt å endre B i det hele tatt, har B verdi nå blitt erstattet av en rekke dannet fra en del av tegnstrengen. I dette eksempelet på en big-endian system som bruker ASCII, ville "e", etterfulgt av en null-byte blitt nummer 25856. Dersom B var den eneste