main int ( ) {
röding login_name [ 20 ] ;
printf ( " Skriv in : " ) ;
scanf ( " % s " , login_name ) ;
printf ( " buffer overflow " ) ;
}
! denna grundläggande kod skapar en karaktär array ( ett ord , i huvudsak ) som kallas " login_name " som kommer att hålla användarens input . Lägg märke till att " login_name " är bara 20 tecken långt . Programmet frågar sedan om användarens input , och lagrar informationen i " login_name . "
2
Orsak buffer overflow . Kompilera programmet och köra det . När du uppmanas att ange ett inloggningsnamn som överstiger 20 tecken . Till exempel :
Ange inloggning : . " . Ange " Detta är en lång mening som kommer att överstiga det tillgängliga utrymmet i inloggningsrutan RÖRLIG
Hit Avfarten Meddelandet kommer ut och programmet avslutas . Variabeln har överskridits det tillgängliga buffertutrymme i " login_name " variabel. Frågan är då , vad hände ? Addera 3
Förstå hur fungerar datorns minne. När användaren input lagrades i " login_name , " var överskottet uppgifter ( alla tecken efter 20 tecken ) skrivet i minnet bortom gränserna för variabeln . Att uppgifterna måste lagras någonstans . I detta fall lagras det i minnet omedelbart intill där " login_name " variabel är belägen. Genom att gå över gränserna för inloggning variabeln , skriver de extra data ( avsiktligt eller ej ) att uppgifterna omedelbart vid sidan av variabeln . Detta innebär att hackaren i princip kunde skriva om koden och ändra hur koden fungerar , i huvudsak äger systemet .
4
Inse Linux sårbarheter . Linux är kodad i C /C + + , och många av dess viktigaste funktioner kräver manipulation av teckensträngar . Men många moderna distributioner av Linux skyddar mot fall av buffer overflow vid punkter där indata krävs , antingen genom stackskydd eller dynamiskt ändra storlek matriser karaktär . Sårbarheter förekommer fortfarande : USB buffer overflow exploit upptäcktes år 2011 är ett exempel . I USB- fallet , en extra lång USB- ID kan svämma över ett system för variabel i Linux .