Προς το περιεχόμενο

c Quiz


m1cRo

Προτεινόμενες αναρτήσεις

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. :X

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να υποθέσω οτι blen είναι το μήκος του string που δείχνει ο buf;

 

Σε αυτή την περίπτωση η συνθήκη if(len<blen) είναι αληθής (είναι len + 1 == blen)(η strlen ΔΕΝ λαμβάνει υπ'οψη τον τερματικό χαρακτήρα '\0' του buf).

 

Εκτός από την παραπάνω διαπίστωση, δεν αντιλαμβάνομαι το πρόβλημα που υπάρχει (αρχάριος γαρ). Να δοκιμάσω να το "τρέξω", ή θα έχω σοβαρά προβλήματα;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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. :X

 

Αρχικά το temp δεν χρησιμοποιείται πουθενά και κατόπιν τίποτα δεν μπορεί να μας εγγυηθεί ότι το μέγεθος του δηλαδή (10) θα είναι μεγαλύτερο από το len.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχικά το temp δεν χρησιμοποιείται πουθενά και κατόπιν τίποτα δεν μπορεί να μας εγγυηθεί ότι το μέγεθος του δηλαδή (10) θα είναι μεγαλύτερο από το len.

 

H strlen ti kanei?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φαντάζομαι ότι θα το εκμεταλλευτεί ο Πόντιος χάκερ που θέλει να τρέξει τον ιο του βάζοντας ένα string >2GB

eisai Swstos .Amifivalw omos kata poso pontios htan o hacker.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχικά το 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? :mad:

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καταρχήν καλή χρονιά σε όλους

P.S fenete oti o pontios hacker epiase polla thimata .kai pios eftege? :mad:

Εννοείς ότι έγιναν επιτυχημένες επιθέσεις με αυτόν τον τρόπο ή απλά βρέθηκε σαν bug? Γιατί allocation και strlen για 2GB (που στα περισσότερα pc's σημαίνει μνήμη στο δίσκο) είναι μια διαδικασία που δύσκολα περνάει απαρατήρητη.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...