Poroj-Team
wWw.Poroj-Team.Tk

Regjistrohu Sepse Keni Qka Te Doni

Administator : LoTi The HaCkeR *

Register keni cka te doni Very Happy

Per Q'do Ankese Sugjerim apo Info Kontakto Adminin Kryesor

loti the hacker : k1ll3r_@live.com
Poroj-Team
wWw.Poroj-Team.Tk

Regjistrohu Sepse Keni Qka Te Doni

Administator : LoTi The HaCkeR *

Register keni cka te doni Very Happy

Per Q'do Ankese Sugjerim apo Info Kontakto Adminin Kryesor

loti the hacker : k1ll3r_@live.com
Poroj-Team
Would you like to react to this message? Create an account in a few clicks or log in to continue.


Poroj-Team
 
ForumPortaliGalleryLatest imagesKërkoRegjistrohuidentifikimi

 

 Buffer overflows [shqip]

Shko poshtë 
AutoriMesazh
CaCi
V.i.p
V.i.p
CaCi


Postimet : 65
Pikët : 197
Thanks : 2
Join date : 15/07/2009

Buffer overflows [shqip] Empty
MesazhTitulli: Buffer overflows [shqip]   Buffer overflows [shqip] Icon_minitimeWed Jul 15, 2009 7:14 am

Koncepte themelore:

Buffer:

buffer eshte nje pjese e limituar e vazhdueshme e memories per te ruajtur informata ne te.Ne gjuhet programuese njihet me emrin
array.Mbingarkimet (overflows) te stackut jan te mundshme per faktin qe nuk egziston ndonje metode per kontrollimin e te dhenave qe futen ne buffer nese bufferi eshte mjaft i madh per te zene tere informacionin.
Prandaj nese programuesi nuk ka shkruar funksion eksplicit per kontroll te te dhena, eshte e mundshme mbingarkimi i bufferit.
Shembull i nje array ne gjuhen programuese c eshte:
Kodi:
int array[5];
Kjo paraqet nje array i cili mund te mbaj 5 numra te plote (integer). Mirepo asgje nuk parandalon mbingarkimin e ketij array me me shume se 5 numra te plote siq shihet nga pjesa e poshtme e kodit:
Kodi:
for(int i=0;i<255;i++){array[i]=13;}
Siq shihet, programi i tille do te kompilohej pa problem mirepo egzekutimi i tij do te na jep nje error ne referencim te qelulave te memories te mbrojtura (p.sh tek pjesa e memories qe shfrytezohet nga sistemi operativ).

Nese te dhenat te cilat vendosen ne buffer mund te kontrollohen nga perdoruesi atehere eshte e mundshme qe nga mbingarkimi i bufferit te arrijm te kapim kontrollin e egzekutimit te programit.

Memorja:

Kur nje program egzekutohet ndodhin disa parapergatije per egzekutimin e ketij programi.Se pari behet rezervimi i nje pjese te memories e cila eshte e lire. Pastaj ne te caktohen segmentet siq jane : .bss , .data ( ku ruhen variablat globale dhe lokale) dhe .text segmenti ku ruhen instruksionet e programit. Se fundi behet inicializimi i stack-ut dhe heap-it.Stack-u ka karakteristiken qe duke u zmadhuar adresa e memories shkon duke u zvogeluar ndersa tek heap-i eshte e kunderta.

Regjistrat:

Ne procesor egzistojn 4 lloje regjistrash:
1)Regjistrat per qellim te pergjithshem
2)Segment Regjistrat
3)Kontroll regjistrat
4) Te tjera

Per neve me rendesi jan vetem regjistri ESP (Extended Stack Pointer) i cili eshte regjistri qe tregon ne memorien ku do te behet operacioni i ardhshem i programit si dhe EIP (Extended Instruction Pointer) ku gjendet adresa e memories nga e cila do te lexohet instruksioni i radhes.

Stack-u:

Stack-u siq tham edhe me heret eshte nje pjese ne memorie qe duke u zmadhuar tenton tek adresat me te uleta.Karakteristike e saj eshte se eshte LIFO (Last In First Out) qe d.t.th. se elementi qe hyn i fundit ne stack eshte elementi qe del i pari nga ajo (ndryshe nga heap-i i cili eshte FIFO (First In First Out)). Kur ne nje program thirret nje funksion apo metode athere ne stack do te krijohet nje stack-frame e re
ku ruhen informata te ndryshme ne lidhje me funksionin. Me radhe ne stack ndodh kjo kur thirret nje funksion:
- Argumentet e funksionit qe thirret ruhen ne stack duke shkuar nga e djatha tek e majta (pra mbrapsht)
- Ruhet adresa e instruksionit te ardhshem pas funksionit qe po thirret (ne menyre qe te dihet se ku ka per te vazhduar programi kur funksioni perfundon punen e tij)
- Ruhet EBP i stack-frame-it paraprak ne menyre qe te lirojm pjesen e perdorur ne stack pasiqe funksioni perfundon operacionin e tij
- Se fundi ruhen variablat locale (siq jan edhe buffer-at)


Mbingarkimi dhe marrja e kontrollit te programit:

Pra siq mesuam deri tani variablat lokale mund te mbingarkohen.Poashtu mesuam se variablat lokale ruhen ne stack-frame-in e krijuar per funksion se bashku me adresen se ku do te vazhdoj ekzekutimi pas perfundimit te funksionit. Nese te dhenat qe do te ruhen ne buffer-in lokal jan te nje madhesie me te madhe se madhesia qe mban bufferi atehere ajo do te vazhdoje te mbishkruaj memorien pas bufferit. Pikerisht mbishkrimi ka per te modifikuar vlerat ne stack ku jan ruajtur EBP dhe adresa se ku do te vazhdoje egzekutimi pasi qe funksioni te perfundoj punen e tij. Ideja eshte qe buffer-i te mbingarkohet me vlera te caktuar apo me mire me adresa te memories ku gjinden instruksionet tona ( te atakuesit) ne menyre qe vendi ku eshte ruajtur adresa e memories per instruksionin e ardhshem te mbishkruhet me adresen e instrusionit te par tone. Keshtu do te mund te arrihet qe egzekutimi i programit te merret nen kontroll tone dhe ne kete menyre te egzekutojme instruksione te ndryshme ( ne shum raste behet nje lidhje tek nje pc per te nxjerr nje shell).


Te tjera:

Kjo qe kam paraqitur ketu eshte vetem maja e kodres dhe se mbingarkimet e buffer-ave kerkojne perpunim ne detaje te shfrytezuesit ne menyre qe te funksionoje. Gjithashtu kemi lloje te ndryshme te mbingarkimeve (stack-based,heap-based) mirepo edhe dobesi te tjera siq eshte format string.Probleme te tjera eshte shtrirja e memories e cila ndryshon ne sisteme operative dhe arkitektura te ndryshme.


Literature:
hacking the Art of Exploitation
The Shellcoders Handbook - Discovering and Exploiting Security holes
Buffer Overflows - Detect,Exploit,Prevent
Writing Security Tools and Exploits
Reversing Secrets of Reverse Engineering
etj etj etj
Mbrapsht në krye Shko poshtë
 
Buffer overflows [shqip]
Mbrapsht në krye 
Faqja 1 e 1

Drejtat e ktij Forumit:Ju nuk mund ti përgjigjeni temave të këtij forumi
Poroj-Team :: Poroj-Team Toolbox :: E-Books & Tutoriale !-
Kërce tek: