Har lite frågor runt "Över buffring".
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)
PeWMedlem sedan juni 200010 432 inlägg 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.
Tack så mycket för svaret.
Även om jag inte fattade allt så fick jag en hum av vad det är.
PeWMedlem sedan juni 200010 432 inlägg Jag kanske inte var så pedagogisk ;)
Säg till om det är någon punkt som jag ska omformulera!
PeWMedlem sedan juni 200010 432 inlägg Som exempel till det jag skrev (grovt förenklat):
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 ;)
Tack återigen för svaret.
Det underlättade lite.