Detta ser man ju nästan i alla artiklar som skrivs när det gäller hacking. Vad jag har fattat så skickar man till en dator först hur mycket data man tänker skicka och sedan skickar mer vilket gör att applikationen slutar fungera men hur får man då sin egen kod körd ?
Hur undviker man detta som programmerare. (Måste ju veta orsaken och hur det sker för att undvika det)
Det som menas (exempelvis) är att man genom att studera programstacken kan skicka en tillräckligt stor inmatning i exempelvis en sträng för att programstacken ska skrivas över helt till den adress som innehåller returadressen (den adress som os:et ska ladda när programmet terminerar som ligger tillsammans med stacken). Väl där kan man se till att en annan adress laddas (inlagt i strängen) och när programmet terminerar körs det program som den nya returadressen pekar på. Detta var en av de vanligaste hackmetoderna på *nixburkar under 80-talet, då man bla genom att krascha program på det sättet kunde komma åt ett shell som SU. Men det skulle inte förvåna mig ett dugg om samma förfarande används vid attacker mot exempelvis IIS.
Ett sätt att skydda sig på som programmerare är att undvika inmatningsfunktioner som slaviskt lägger in vad som än matas in mot en adress (C's gets() t.ex) och det mot stacken.
call program som i minnet ser ut:
| retadress | stack | variabler | kod |
variabler:
char input[16];
...
...
inmatningsfunktion(input);
...
...
Om man nu tänker sig att stacken är 8 bytes så räcker det med en inputsträng som är 16+8 bytes för att stacken ska skrivas över och det som ligger utanför (byte 24 och uppåt) kan anges i strängen som en adress till en egen funktion som gör mysko saker. Alternativt skriver man bara över med vad som helst och får programmet ( i värsta fall även os:et) att krascha med varierande resultat. Nu är det C jag refererar till men samma sak kan ju ske i andra språk då det i botten blir samma maskinkod som processorn kör, förutsatt att dessa språk inte har någon inbyggd säkerhet / gräns (Java m.m).
Hursomhelst så krävs det kännedom om hur programmet är uppbyggt för att kunna göra sånt här, och det var ett tag sedan som detta var ett relativt vanligt sätt att hacka på.
Nu kanske man använder samma metod för att uppnå andra saker än att skriva över en stack - det har jag ingen aning om, men detta är då bara ett exempel ;)