Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

Prog2 / szorgalmi_feladatok / extra

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Members
  • Activity
  • Create a new issue
  • Jobs
  • Issue Boards
Bufferoverflow

Bufferoverflow

Last edited by Karsa Zoltán István Dec 13, 2022
Page history

Buffer overflow

Szinte 100%, hogy ezt a hibát elkövetted a korábbi prog1-es NagyHF elkészítésekor, pedig hatalmas nagy biztonsági kockázatokat rejt magában.

A Buffer-overflow egy bitonsági rés, hiba, amit a figyelmetlen memóriakezelés okoz:

A következő példában egy karakterláncot kérünk be, csakhogy a felhasználó nem biztos, hogy olyan hosszú sorozatot ad meg, ami belefér a példában szereplő buffer tömbbe:

#include <stdio.h>

int main() {
    char buffer[10];
    char alma[10] = "alma";
    printf("Hello world!\n");
    scanf("%s", buffer);
    printf("%s\n", alma);
    return 0;
}

Mivel mind a két tömb a stack-en lakik, és "egymásután" helyezkednek el a memóriában (általában a legtöbb fordítónál és a legtöbb rendszeren ebben a sorrendben), lehetőségünk van rá, hogy hiába csak a buffer-be akarnánk írni, felül tudjuk írni az alma tömb tartalmát is: gyakorlatilag túlindexeljük a buffer-t, így az alma-ban kötünk ki. Próbáljuk ki a lenti parancsokat fordítás után (main a futtatható állomány), milyen viselkedést tapasztalunk? A python3 -c "print('0'*N)" N darab '0' karakter ír a kimenetre, amit aztán átírányítunk a main program bemenetére a pipe ('|') segítségével.

python3 -c "print('0'*9)" | ./main
python3 -c "print('0'*15)" | ./main
python3 -c "print('0'*21)" | ./main

Láthatjuk, hogy nagy fenyegetést rejteget az ilyen kódok használata: Ha az alma tömbben például egy jelszót raktunk, akkor könnyen feltörhetővé válik a program. Továbbá veszélyes lehet az összes olyan függvény, aminek nem lehet valamilyen limitációt megadni, pl.: strcpy, strcat, gets... Ezek helyett ajánlott a párjukat használni, ahol meg lehet mondani hogy maximum hány karaktert másoljanak a céltömbbe:

fgets(buffer, 10, stdin);
  Clone repository
  • Bufferoverflow
  • Home
More Pages
×

New Wiki Page

Tip: You can specify the full path for the new file. We will automatically create any missing directories.