Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem buffer overflow

Cisto zo zvedavosti som si chcel vyskusat "naprogramovat" buffer overflow a nasledne ziskat rootvske prava 8-) (na mojom pc pochopitelne). Postupoval som podla nejakych prikladov kde sa vytvorili 2 programy. Prvy vyzeral v skratke takto:

char buffer[500];
strcmp(buffer, argv[1]);

Druhy program mal vytvoril len "specialny" retazec dlhsi ako 500 bytov a nasledne spustit prvy program s argumentom=retazcom. Tento retaz bol dlhy 600 bytov a hned som si myslel ze to musi spravit segmentation fault - tak sa aj stalo.
Lenze ku podivu mi uvedeny prvy program sposobi segmentation fault uz pri argumente dlhom 501 bytov::).
Otazka: Zalezi to od architektury alebo od operacneho systemu alebo od verzie gcc (tym som to kompiloval) alebo od coho? Myslim ze o par bytov viac by este nemalo "nic spravit". Dufam ze niekto vie o com pisem.....:-/

Předmět Autor Datum
Definiciu pola mas dufam vo funkcii. Urcite tam mas strcmp a nie strcpy? Ono je aj otazka cim si to…
MM.. 12.02.2007 20:49
MM..
s tym strcpy mas samozrejme pravdu (to bol len preklep) tie 2 riadky kodu su vo funkcii - main prekl…
D0ktor 12.02.2007 21:56
D0ktor
To zavisi ako je robeny zasobnik vo fcii main, ona main je specialna a zavisi asi aj od prekladaca,…
MM.. 12.02.2007 22:05
MM..
Teraz som nemal vela casu a budem sa musiet pozriet na to tym debuggerom....
D0ktor 28.02.2007 21:16
D0ktor
Hlavne to najprv skus dat do nejakej podfunkcie ktoru budes volat z main().
MM.. 01.03.2007 02:35
MM..
Tak zoberte si príklad www.hack4fun.eu/2011/04/prepisujeme-exploit-just-4-fun-pvefindaddr/ z reáln… poslední
kvoouz 22.04.2011 15:44
kvoouz

Definiciu pola mas dufam vo funkcii. Urcite tam mas strcmp a nie strcpy?
Ono je aj otazka cim si to prekladal, a ako.

P.S. ak nieco nie je jasne tak debugger, a pozriet si kde je zasobnik a co je v nom atd.
P.S. a s retazcom 490bytov to ide? Ci nahodou nemas problem niekde inde...

s tym strcpy mas samozrejme pravdu (to bol len preklep)
tie 2 riadky kodu su vo funkcii - main
prekladal som to s gcc... verziu neviem ale myslis ze cca najnovsia

P.S. inde chyva nebude lebo ked to dostane retazec dlhsi ako 500 tak spravi segmentation fault (500 a menej funguje), vlastne tu ani o tej druhy program nejde... ide mi o tom preco to spravi segmentation fault hned pri retazci dlhsom co i len o 1 byte.

To zavisi ako je robeny zasobnik vo fcii main, ona main je specialna a zavisi asi aj od prekladaca, teoreticky nemusi mat v zasobniku nic viac (ani navratovu adresu). Preto som pisal pozri si to debuggerom.

Mozes skusit ten kod dat to do nejakej podfunkcie ktoru volas z main a napis ci sa to zmeni. Ako parameter (char*) predas funkcii ten argv[1].

P.S. dalsia vec ktora zavisi od prekladaca je ze ci to pole 500 bytove urobi v zasobniku, alebo ci to rezervuje z RAM (ak by char bola ako C++ trieda tak to konstruktor moze rezervovat z heap). Tiez sa to da pozriet debuggerom. Ale gcc by snad nemal take robit.

Zpět do poradny Odpovědět na původní otázku Nahoru