m1cRo Δημοσ. 29 Δεκεμβρίου 2007 Δημοσ. 29 Δεκεμβρίου 2007 Geia sas edw sas exw ena mikro quiz : exoume mia sinarthsh : > void function(char *buf,int blen){ char temp[10]; int len=strlen(buf); if(len<blen){ strcpy(temp,buf); } } h synarthsh kaleite etc : function(buf,10); Kapou mesa exoume ena lathos pou odigei se ena buffer overflow me gnwsta epakoloutha : ektelesh shellcode. Vreite kai eksigiste to lathos an mporeite.
FrAcTaL-gR Δημοσ. 29 Δεκεμβρίου 2007 Δημοσ. 29 Δεκεμβρίου 2007 Να υποθέσω οτι blen είναι το μήκος του string που δείχνει ο buf; Σε αυτή την περίπτωση η συνθήκη if(len<blen) είναι αληθής (είναι len + 1 == blen)(η strlen ΔΕΝ λαμβάνει υπ'οψη τον τερματικό χαρακτήρα '\0' του buf). Εκτός από την παραπάνω διαπίστωση, δεν αντιλαμβάνομαι το πρόβλημα που υπάρχει (αρχάριος γαρ). Να δοκιμάσω να το "τρέξω", ή θα έχω σοβαρά προβλήματα;
bokarinho Δημοσ. 29 Δεκεμβρίου 2007 Δημοσ. 29 Δεκεμβρίου 2007 Geia sas edw sas exw ena mikro quiz :exoume mia sinarthsh : > void function(char *buf,int blen){ char temp[10]; int len=strlen(buf); if(len<blen){ strcpy(temp,buf); } } h synarthsh kaleite etc : function(buf,10); Kapou mesa exoume ena lathos pou odigei se ena buffer overflow me gnwsta epakoloutha : ektelesh shellcode. Vreite kai eksigiste to lathos an mporeite. Αρχικά το temp δεν χρησιμοποιείται πουθενά και κατόπιν τίποτα δεν μπορεί να μας εγγυηθεί ότι το μέγεθος του δηλαδή (10) θα είναι μεγαλύτερο από το len.
bilco Δημοσ. 30 Δεκεμβρίου 2007 Δημοσ. 30 Δεκεμβρίου 2007 Φαντάζομαι ότι θα το εκμεταλλευτεί ο Πόντιος χάκερ που θέλει να τρέξει τον ιο του βάζοντας ένα string >2GB
m1cRo Δημοσ. 30 Δεκεμβρίου 2007 Μέλος Δημοσ. 30 Δεκεμβρίου 2007 Αρχικά το temp δεν χρησιμοποιείται πουθενά και κατόπιν τίποτα δεν μπορεί να μας εγγυηθεί ότι το μέγεθος του δηλαδή (10) θα είναι μεγαλύτερο από το len. H strlen ti kanei?
m1cRo Δημοσ. 30 Δεκεμβρίου 2007 Μέλος Δημοσ. 30 Δεκεμβρίου 2007 Φαντάζομαι ότι θα το εκμεταλλευτεί ο Πόντιος χάκερ που θέλει να τρέξει τον ιο του βάζοντας ένα string >2GB eisai Swstos .Amifivalw omos kata poso pontios htan o hacker.
m1cRo Δημοσ. 30 Δεκεμβρίου 2007 Μέλος Δημοσ. 30 Δεκεμβρίου 2007 Αρχικά το temp δεν χρησιμοποιείται πουθενά και κατόπιν τίποτα δεν μπορεί να μας εγγυηθεί ότι το μέγεθος του δηλαδή (10) θα είναι μεγαλύτερο από το len. Loipon an deite sto documentation MSDN h strlen girizei to lenth tou string kai pianei to poly oso xoraei enas unsigned int . http://msdn2.microsoft.com/en-us/library/ms860442.aspx edw einai h perigrafh ths strlen kai eiani : size_t strlen( const char *string ); kai size_t einai typedef size_t unsigned int; Sthn ousia eiani to megalytero megethos enos buffer peripou 4G. http://msdn2.microsoft.com/en-us/library/a4yyh3a9(VS.80).aspx To lathos einai oti akrivos h strlen sthn ousia epistrefei enan unsigned int kai emeis ton grapsame se enan int ,ara an o unisgned int arithmos eiani megalyteros apo 2,147,483,647 bytes tote sto len apothikeuetai enas arnitikos arithmos pou tha einai panta mikroteros tou 10. Einai ena apo ta liga bugs pou vrethikan ston opera . P.S fenete oti o pontios hacker epiase polla thimata .kai pios eftege?
bilco Δημοσ. 2 Ιανουαρίου 2008 Δημοσ. 2 Ιανουαρίου 2008 Καταρχήν καλή χρονιά σε όλους P.S fenete oti o pontios hacker epiase polla thimata .kai pios eftege? Εννοείς ότι έγιναν επιτυχημένες επιθέσεις με αυτόν τον τρόπο ή απλά βρέθηκε σαν bug? Γιατί allocation και strlen για 2GB (που στα περισσότερα pc's σημαίνει μνήμη στο δίσκο) είναι μια διαδικασία που δύσκολα περνάει απαρατήρητη.
Red_Phantom Δημοσ. 2 Ιανουαρίου 2008 Δημοσ. 2 Ιανουαρίου 2008 Κάλεσε την function με blen πχ = 0. Περνάς πάντα τον έλεγχο στο if
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.