Ένα exploit είναι ένα προγραμμα το οποίο παρακάμπτει την ασφάλεια υπολογιστών.
Υπάρχουν πολλοί τρόποι να χρησιμοποιηθούν οι τρύπες ασφάλειας. Εάν ένας προγραμματιστής
κάνει ένα λάθος σε ένα πρόγραμμα, είναι μερικές φορές δυνατό να παρακάμψει την ασφάλεια. Η κωδικοποίηση τέτοιων προγραμμάτων, τα οποία επιτίθενται (χακαρονται) στα λαθη του προγραμματισμου ή των τρυπών ασφάλειας είναι η τέχνη του exploitation η του exploit
Μερικές κοινές εκμεταλλεμένος τεχνικές είναι στηβες απο exploits , ,, heap exploits η
format string exploits,
*** τι είναι ένας σωρός exploits ***
μια στηβα απο exploits εμφανίζεται, εάν μπορείτε να γράψετε περισσότερο από το μέγεθος ενός buffer που ειναι
τοποθετημένος στη στηβα σε αυτόν buffer . Εάν μπορείτε να γράψετε περισσότερα δεδομενα
σαν μέγεθος του buffer (περισσότερες από 1024 ψηφιολέξεις σε αυτό το παράδειγμα) εμφανιζεται μια υπερχείλιση στοιβας . Παραδείγματος χάριν:
main(int argc, προσροφητικός άνθρακας ** argv)
/ Αυτός ο buffer βρίσκεται στην στοιβα
char buf[1024 ]
/ το ι βρίσκεται στην στοιβα
INT ι
/ το Α 6 ψηφιολέξη υπερχειλιση στοιβα buffer
για(i=0;i<1030;i ++)
buf[i ] = “Α”
/ Ένα άλλο παράδειγμα
/ εάν argv μεγαλύτερος από 1024 μια υπερχείλιση εμφανίζεται
strcpy(buf, argv[1 ])
Γιατί μια υπερχείλιση στοιβων είναι μια απειλή ασφάλειας; Η οδηγία του assembler “κλήση”
ωθήσε την επιστροφής διεύθυνση στην στοιβα. “κληση” πηγε σε μια λειτουργία στο
παράδειγμα που η λειτουργία είναι κύρια. Εάν η λειτουργία επιστρέψει με την assembler
η οδηγία “ret”, επιστρέφει στο δείκτη λειτουργίας στη στοιβα.
Εάν μπορείτε να ξεχειλίσετε το στοιβα μπορείτε να επικαλύψετε την διεύθυνση επιστροφής που ειναι τοποθετημένη
στη στοιβα. Μπορείτε να επιστρέψετε σε μια άλλη θέση. Η θέση πρεπει να εχει να σημειο αναφορας σε μια διεύθυνση shellcode. Διαβάστε το alephonestack.txt για περισσότερες πληροφορίες.
Μπορείτε να τον μεταφορτώσετε στο τμήμα εγγράφων μου.

*** τι είναι ένα shellcode ***

Το Shellcode είναι οδηγίες μηχανών, οι οποίες προωθούν ένα shell παραδείγματος χάριν.
Ένα shellcode μοιάζει με αυτό:
char shellcode[]=”\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89″
“\xe3\x8d\x54\x24\x08\x50\x53\x8d\x0c\x24\xb0\x0b\xcd\x80”;
Κάθε char είναι μια οδηγία μηχανών. είναι . \xcd\x80 is ‘int 80’ παραδείγματος χάριν. μετα απο
την εμφανιση μιας υπερχείλισης εμείς χρειάζομαστε μια διεύθυνση για να επιστρέψουμε. Αυτός ο shellcode προωθεί ένα shell
. Εάν κανετε point στο shellcode (μετά από μια υπερχείλιση στοιβων παραδείγματος χάριν),
οι οδηγίες της μηχανης προωθούνται και γεννα ενα shell. Συντάξτε αυτό το
πρόγραμμα. Εξετάζει το shellcode και γεννα ένα κοχύλι:
/ Συντάξτε αυτό το πρόγραμμα με το GCC sctest.c – οsctest και το αρχίστε το : : ./sctest
/ τώρα έχετε κατι καπως ετσι
/ SH- 2,03$

# περιλάβετε < stdio.h >

char shellcode[ ] =
“\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89”
“\xe3\x8d\x54\x24\x08\x50\x53\x8d\x0c\x24\xb0\x0b\xcd\x80”;
INT
κύριο ()

κενό (* dsr) ()
(μακρύς) dsr = &shellcode
εκτυπωσεf(“Size: %d δεδομενα.”, σε μεγεθος του (shellcode));
dsr ()

διαβάστε το alephonestack.txt για τη βασική κωδικοποίηση shellcode

*** τι είναι heap υπερχειλίσεις ***
Εάν το heap ειναι ξεχειλίσμενο εμφανίζεται μια υπερχείλιση heap buffer .
Μια heap υπερχείλιση μοιάζει με αυτήν:

/ Δημιουργεί δυναμικά έναν buffer 1000 ψηφιολέξεων στο . heap
κεντρικο(int argc, char ** argv) <>

/ σημεία δεικτών σε μια heap διεύθυνση <>
char δείκτης * = malloc (1000) <>
char * δεικτης2 = malloc (200) <>

/ Ξεχειλισμένος, εάν argv[1 ] είναι μεγαλύτερο από 1000 ψηφιολέξεις.
/ Το σημειο buffer 2 ειναι ξεχειλίσμενο εάν ο δείκτης
/ περιέχει περισσότερες από 1000 ψηφιολέξεις.
strcpy(pointer, argv[1 ])

/ Ελεύθερα δυναμικά διατιθέμενα στοιχεία
ελεύθερος (δείκτης)
ελεύθερος (δεικτης2)
Διαβάστε heaptut.txt για περισσότερες πληροφορίες.

*** Format String exploit’s ; ***
Εάν ελέγχετε τη format string σε ένα από printf, syslog ή
setproctitle λειτουργία, μια exploitation είναι δυνατο να γινει . Format strings

είναι κάτι σαν “%s”, “%x”, “%d”… Παραδείγματος χάριν:

main(int argc, char ** argv) <>

char * buf = “ΔΟΚΙΜΗ”

/ Ο λανθασμένος τρόπος
/ Ο χρήστης μπορεί να ελέγξει τη σειρά σχήματος
printf(argv[1 ])

/ Πρέπει να κωδικοποιήσετε:
printf(“%x”, argv[1 ])

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *