Βουτηγμένο στην τεχνητή νοημοσύνη και τους κινδύνους ασφαλείας από τη χρήση του, το 2023 SANS Holiday Hack Challenge ήταν μια εμπλουτισμένη εμπειρία πλοήγησης σε μια σειρά 21 στόχων που δοκίμασαν και διεύρυναν πολλαπλές δεξιότητες ασφάλειας στον κυβερνοχώρο.
Οι καλύτερες προκλήσεις για μένα ήταν να κυνηγήσω παραισθήσεις τεχνητής νοημοσύνης σε μια πρώτη αναφορά, η κλιμάκωση των προνομίων σε ένα σύστημα Linux, η αναζήτηση cheats σε παιχνίδια Game Boy, η χρήση του Azure REST API για την αναζήτηση του πηγαίου κώδικα μιας εφαρμογής Azure Function και τελικά η εκμετάλλευση ενός ευάλωτου Υπηρεσία πιστοποιητικού SSH, εξάσκηση στη χρήση του Μπουκέτο σουίτα εργαλείων και Πιστοποιητικό για την εκμετάλλευση ευάλωτων Υπηρεσίες πιστοποιητικών Active Directory, και αξιοποίηση ευπάθειας SQL injection και deserialization Java σε εφαρμογές διαστήματος.
Παρακάτω, μοιράζομαι το μονοπάτι που ακολούθησα για να ξεπεράσω μερικές από τις πιο αξιοσημείωτες προκλήσεις.
Ρεπόρτερ
Το ChatNPT, ένα μεγάλο γλωσσικό μοντέλο (LLM) που χρησιμοποιείται για τη δημιουργία ορισμένων προκλήσεων, δημιούργησε α έκθεση δοκιμής διείσδυσης σχετικά με τα τρωτά σημεία που ανακαλύφθηκαν στο δίκτυο της North Pole Systems, ορισμένα από τα οποία εμφανίζονται ως μέρος των επερχόμενων προκλήσεων. Ωστόσο, το ChatNPT είχε παραισθήσεις για ορισμένες από τις λεπτομέρειες της έκθεσης. Χρησιμοποιώντας το ChatGPT, ή άλλο ευνοημένο LLM, ο στόχος ήταν να επισημανθούν οι ενότητες με πληροφορίες παραισθήσεων. Η προσέγγισή μου ήταν να κάνω συγκεκριμένες ερωτήσεις στο ChatGPT σχετικά με το περιεχόμενο για να εξηγήσω τι δεν καταλάβαινα στην αρχή και τελικά να ανακαλύψω τις ανωμαλίες. Τρεις από τις εννέα ενότητες περιείχαν σφάλματα.
Όπως επιβεβαιώθηκε από το ChatGPT, αυτή η ενότητα είχε μη έγκυρο αριθμό θύρας 88,555, πολύ πάνω από τον υψηλότερο έγκυρο αριθμό θύρας 65,535:
Εδώ παρατήρησα αμέσως ότι το SEND δεν είναι μέθοδος αιτήματος HTTP.
Το ChatNPT μπέρδεψε τον αριθμό έκδοσης PHP που αναφέρεται στην ενότητα οκτώ της αναφοράς είτε ως έκδοση πρωτοκόλλου HTTP είτε ως λανθασμένο κείμενο για αυτό που θα έπρεπε να ήταν «αίτημα HTTP HEAD» σε αυτήν την ενότητα. Επιπλέον, η αποκάλυψη των κλειδιών εγγραφής των Windows ή προϊόντων στην κεφαλίδα Τοποθεσία είναι μια κακή συμβουλή.
Linux PrivEsc
Σε αυτήν την πρόκληση, ο τελικός στόχος ήταν να απαντηθεί μια ερώτηση, αλλά αυτή η ερώτηση ήταν κρυμμένη σε ένα μη προσβάσιμο εκτελέσιμο:
Ενώ υπάρχουν διάφορες μεθόδους για την κλιμάκωση των προνομίων σε μια μηχανή Linux, αυτή η πρόκληση επέτρεψε ένα προσαρμοσμένο εκτελέσιμο αρχείο απλό αντίγραφο με το bit SUID που έχει οριστεί για κατάχρηση. Εάν το bit SUID για τον κάτοχο ενός αρχείου έχει οριστεί και ο κάτοχος είναι ρίζα, τότε αυτό το αρχείο εκτελείται πάντα με δικαιώματα ρίζας ακόμη και από χρήστες που δεν είναι root στο σύστημα. Χρησιμοποίησα την ακόλουθη εντολή για να αναζητήσω σε ολόκληρο το σύστημα κανονικά αρχεία που έχουν οριστεί το bit SUID για τον κάτοχο, ενώ απορρίπτω τυχόν έξοδο σφάλματος:
απλό αντίγραφο φαινόταν να είναι μια ευάλωτη, αλλά απλοποιημένη, έκδοση του προτύπου cp χρησιμότητα. Πράγματι το μήνυμα βοήθειας πρότεινε το ίδιο:
Χρήση: απλή αντιγραφή
Η προσέγγισή μου ήταν η εξής: δημιουργήστε τις πληροφορίες για έναν χρήστη με δικαιώματα root, προσθέστε αυτές τις πληροφορίες σε ένα αντίγραφο του / etc / passwd αρχείο και μετά αντικαταστήστε το παλιό passwd αρχείο με το αντίγραφο. Στη συνέχεια, χρησιμοποιήστε su για να συνδεθείτε ως νέος χρήστης.
Με πρόσβαση root στο σύστημα, μπόρεσα να βρω το εκτελέσιμο runmetoanswer σε /ρίζα, εκτελέστε το και μαντέψτε την απάντηση: Σάντα.
Η απάντηση δόθηκε και στο αρχείο config /etc/runtoanswer.yaml, αλλά αυτό το αρχείο μπορούσε να διαβαστεί μόνο με δικαιώματα root ή με χρήση απλό αντίγραφο για να το αντιγράψετε /dev/stdout.
Κασέτες παιχνιδιού: τόμος 2 και τόμος 3
Δύο προκλήσεις περιελάμβαναν ελαφριά αντίστροφη μηχανική των αρχείων ROM του Game Boy. Το πρώτο ήταν ένα παιχνίδι όπου ο στόχος ήταν να περάσει κάποιος φρουρός, να αποκαλύψει μια πύλη και να αποκωδικοποιήσει την απάντηση του ραδιοκυμάτων. Μας δόθηκαν δύο εκδόσεις του παιχνιδιού μαζί με μια υπόδειξη για να το δούμε Diff μεταξυ τους. Η αντιγραφή μερικών από τα διαφορετικά hex byte από τη μια έκδοση στην άλλη ήταν αρκετή για να αποκαλυφθεί η πύλη, η οποία οδηγούσε σε ένα δωμάτιο με ραδιόφωνο που εκπέμπει την απάντηση σε κώδικα Μορς:
κώδικας Μορς |
Ντα-ντα-ντιτ |
Ντι-ντα-ντι-ντιτ |
Ντα-ντα-ντα-ντα-ντα |
Ντι-ντα-ντιτ |
Ντα-ντι-ντα-ντα |
|
Μήνυμα |
g |
l |
0 |
r |
y |
Το δεύτερο ήταν ένα παιχνίδι όπου μπορούσες να κερδίσεις πόντους πηδώντας για να μαζέψεις νομίσματα. Ωστόσο, εάν κερδίζετε πάνω από 998 πόντους, οι πόντους σας θα είναι 0 και, υπό ορισμένες συνθήκες, θα ενεργοποιείται ένα μήνυμα σχετικά με ένα σφάλμα υπερχείλισης. Ο στόχος ήταν να αποκαλυφθούν αιωρούμενα βήματα στο επόμενο μέρος του χάρτη όπου ήταν αποθηκευμένη η σημαία, αλλά αυτό απαιτούσε ικανότητα στο άλμα. Αντίθετα, κατάλαβα πώς να πετάξω με τη βοήθεια του Εξομοιωτής BGB Game Boy και ένας συνδυασμός της λειτουργίας του cheat searcher και της οπτικής επιθεώρησης της μνήμης RAM κατά τη διάρκεια του παιχνιδιού για την εύρεση του hex byte που ελέγχει τη θέση y του παίκτη στον χάρτη – βασικά, έκανα ένα GameShark κώδικας.
Η σημαία ήταν !τομ+ξωτικό!.
Πιστοποιητικό SSHenanigans
Αν και η χρήση πιστοποιητικών στη θέση των ζευγών δημόσιου-ιδιωτικού κλειδιού βελτιώνει την ασφάλεια του ελέγχου ταυτότητας μέσω SSH, μια εσφαλμένη διαμόρφωση υπηρεσίας υπογραφής πιστοποιητικού SSH μπορεί να επιτρέψει σε έναν εισβολέα να αποκτήσει παράνομα ένα πιστοποιητικό για έλεγχο ταυτότητας ως άλλος χρήστης. Η πρόκληση είχε στηθεί με τον εξής τρόπο.
An Λειτουργία Azure εφαρμογή που έχει αναπτυχθεί σε Northpole-ssh-certs-fa.azurewebsites.net επιστρέφει πιστοποιητικά SSH σε οποιονδήποτε παρέχει δημόσιο κλειδί SSH. Αυτά τα πιστοποιητικά μπορούν να χρησιμοποιηθούν για έλεγχο ταυτότητας μέσω SSH σε ssh-server-vm.santaworkshopgeeseislands.org ως χρήστης μηνυτής.
Ο κεντρικός υπολογιστής σε αυτόν τον τομέα είναι μια εικονική μηχανή Azure, οπότε μετά τη σύνδεση στο πρώτο μου βήμα ήταν να συλλέξω πληροφορίες από το μεταδεδομένα παράδειγμα καθώς αυτό θα χρειαζόταν αργότερα για κλήσεις στο Azure REST API, συγκεκριμένα, χρειαζόμουν το αναγνωριστικό συνδρομής και το όνομα της ομάδας πόρων. Χρειαζόμουν επίσης ένα διακριτικό πρόσβασης για να χρησιμοποιήσω αυτό το API, το οποίο κατάφερα να αποκτήσω χρησιμοποιώντας μια διαχειριζόμενη ταυτότητα. Αυτό το διακριτικό που αποκτήθηκε πρέπει στη συνέχεια να χρησιμοποιηθεί σε μια κεφαλίδα εξουσιοδότησης HTTP κατά την πραγματοποίηση κλήσεων στο API REST Azure.
Σε αυτό το σημείο, είχα όλα τα απαραίτητα για να πραγματοποιήσω την κλήση API λάβετε τη ρύθμιση παραμέτρων ελέγχου πηγής της εφαρμογής Azure Function. Έκανα την κλήση και ανάμεσα στις ιδιότητες διαμόρφωσης εντόπισα μια διεύθυνση URL στο τον πηγαίο κώδικα της εφαρμογής στο GitHub.
Η επιθεώρηση του πηγαίου κώδικα αποκάλυψε ότι η εφαρμογή δέχεται μια δεύτερη παράμετρο: κύριος. Εάν το αίτημα HTTP POST στο /api/create-cert το τελικό σημείο δεν στέλνει μια τιμή για κύριος, τότε μια προεπιλογή του ξωτικό επιστρέφεται, αλλά εδώ βρίσκεται μια ευπάθεια. Χρησιμοποιώντας Burp Σουίτα Μπορώ να παρεμποδίσω το αίτημα HTTP POST και να εισαγάγω την τιμή διαχειριστής. Ήξερα να ζητήσω διαχειριστής γιατί ήταν ο κύριος στο /etc/ssh/auth_principals/alabaster αρχείο στην εικονική μηχανή και ήθελα να αποκτήσω πρόσβαση στον οικιακό κατάλογο του Alabaster.
Έχοντας ένα πιστοποιητικό SSH για τον κύριο διαχειριστή στο χέρι, συνδέθηκα στην ίδια εικονική μηχανή αλαβάστρος και βρήκε τη λίστα TODO του Alabaster στον οικιακό του κατάλογο. Η λίστα περιείχε τη λέξη σημαίας: άρτος αρωματισμένος με τζίντζερ.
Active Directory
Ξεκινώντας από την ίδια εικονική μηχανή με την προηγούμενη πρόκληση, αυτή η πρόκληση εξέτασε την εσφαλμένη ρύθμιση παραμέτρων Υπηρεσία πιστοποιητικών Active Directory μπορεί να γίνει κατάχρηση από έναν εισβολέα για έλεγχο ταυτότητας ως άλλος χρήστης. Οπως και αλαβάστρος Είχα έναν κατάλογο γεμάτο Μπουκέτο εργαλεία, αλλά τα περισσότερα από αυτά απαιτούν το όνομα τομέα και τη διεύθυνση IP ενός διακομιστή-στόχου, καθώς και ένα όνομα χρήστη και κωδικό πρόσβασης για τη σύνδεση – πληροφορίες που δεν είχα ακόμη.
Έτσι, ένα καλό πρώτο βήμα ήταν να καταλάβω τα άδειά μου για το Azure REST API, καθώς δεν χρειάζεται να καλέσετε το ένα API μετά το άλλο μόνο για να λάβετε ένα μήνυμα που έχει απορριφθεί η εξουσιοδότηση. Έτσι, εγώ παρατίθενται όλα τα δικαιώματα για την ομάδα πόρων που ανακάλυψα στην προηγούμενη πρόκληση.
Εφόσον είδα ότι είχα πολλές άδειες σχετικά με την ανάγνωση βασικών θησαυροφυλακίων, προχώρησα σε απαριθμώντας τα και βρήκα δύο: βόρειος πόλος-it-kv και βόρειος πόλος-ssh-certs-kv.
Ώρα για εναλλαγή API. Μέχρι τώρα έκανα κλήσεις σε τερματικά management.azure.com αλλά ορισμένα μέρη του Azure Key Vault είναι ενεργοποιημένα vault.azure.net και αυτός ο πόρος απαιτεί το δικό του διακριτικό πρόσβασης. Για άλλη μια φορά χρησιμοποίησα το δικό μου διαχειριζόμενη ταυτότητα για την απόκτηση διακριτικού πρόσβασης αλλά αυτή τη φορά αλλάζοντας τον πόρο σε vault.azure.net.
In βόρειος πόλος-it-kv, I βρήκε το όνομα για ένα μυστικό. Χρησιμοποιώντας αυτό το όνομα, Ι ζήτησε την τιμή για αυτό το μυστικό, το οποίο αποδείχθηκε ότι ήταν σενάριο PowerShell για δημιουργώντας έναν χρήστη Active Directory που ονομάζεται ξωτικό. Ουσιαστικά, τώρα είχα όλες τις πληροφορίες που απαιτούνται για να αξιοποιήσω τη σουίτα εργαλείων Impacket.
Χρησιμοποιώντας GetADUsers.py αποκάλυψε έναν άλλο χρήστη στον τομέα που θα μπορούσε να ενδιαφέρει: wombleycube. Μπόρεσα επίσης να συνδεθώ μέσω SMB στον διακομιστή Active Directory χρησιμοποιώντας smbclient.py. Το κοινόχρηστο αρχείο ενδιαφέροντος περιείχε α super_secret_research κατάλογο, αλλά δεν μπορούσα να τον διαβάσω ως ξωτικό.
Ευτυχώς, είχα πρόσβαση σε ένα άλλο εργαλείο: Πιστοποιητικό. Αυτό χρησιμοποιείται για την εύρεση προτύπων πιστοποιητικών με εσφαλμένη διαμόρφωση για τις υπηρεσίες πιστοποιητικών Active Directory και την κατάχρησή τους. Το εργαλείο απαριθμούσε ένα ευάλωτο πρότυπο επειδή επιτρέπει σε έναν αιτούντα πιστοποιητικό να παρέχει ένα αυθαίρετο εναλλακτικό όνομα θέματος και το εκδοθέν πιστοποιητικό που παρέχει έλεγχο ταυτότητας πελάτη για το παρεχόμενο όνομα.
Αφού ζητήσετε πιστοποιητικό με wombleycube Τοποθετημένο στο πεδίο εναλλακτικού ονόματος θέματος, χρησιμοποίησα επίσης το Certipy για να λάβω τον κατακερματισμό NT για wombleycube χρησιμοποιώντας αυτό το πιστοποιητικό. Στη συνέχεια, περνώντας το hash του Wombley στο smbclient.py, μπόρεσα να συνδεθώ μέσω SMB στον διακομιστή Active Directory ως wombleycube και αποκτήστε πρόσβαση στο super_secret_research κατάλογο, ο οποίος περιείχε τις οδηγίες για την επόμενη πρόκληση στο InstructionsFor EnteringSatelliteGroundStation.txt.
Ηχείο πρόσβασης πόρτας Space Island
Για να αποκτήσετε πρόσβαση στις προκλήσεις στο διαστημικό σύστημα επίγειο τμήμα, χρειάστηκε να χρησιμοποιηθεί ένα LLM για να δημιουργήσει μια ψεύτικη φωνή του Wombley Cube που μιλούσε τη φράση πρόσβασης. Δεδομένου ενός αρχείου ήχου με το Wombley να λέει μια ιστορία και τη φράση πρόσβασης, ήταν ασήμαντο στη χρήση LOVO AI για να δημιουργήσετε μια φωνή που προσομοιώνει Wombley για να εκφωνήσετε τη φράση πρόσβασης και να ελέγξετε με επιτυχία.
Χωρίς πρόσθετες διασφαλίσεις, ο φωνητικός έλεγχος ταυτότητας αντιμετωπίζει σοβαρές προκλήσεις ως μηχανισμός ασφαλείας στην εποχή των LLM.
Πρόσβαση στην κάμερα
Αφού μίλησα τη φράση πρόσβασης, επιβιβάστηκα σε ένα τρένο που με οδήγησε στο επίγειο τμήμα που είναι υπεύθυνο για την επικοινωνία με ένα παιχνίδι εντός του παιχνιδιού CubeSat, ένας τύπος μικρού δορυφόρου. Στον επίγειο σταθμό μας δόθηκε α Wireguard ρύθμιση παραμέτρων για τη ρύθμιση μιας κρυπτογραφημένης σύνδεσης σε αυτό το CubeSat.
Το λογισμικό σε αυτόν τον δορυφόρο είναι συμβατό με το NanoSat MO Framework (NMF), ένα πλαίσιο λογισμικού που αναπτύχθηκε από την Ευρωπαϊκή Διαστημική Υπηρεσία για CubeSats. Αυτό το πλαίσιο συνοδεύεται από ένα SDK για ανάπτυξη και δοκιμή διαστημικών εφαρμογών. Παρέχει επίσης το Consumer Test Tool (CTT), τόσο ως εφαρμογή εδάφους όσο και ως εργαλείο γραμμής εντολών, για σύνδεση με τον επόπτη του σκάφους, έναν ενορχηστρωτή λογισμικού που φροντίζει για την εκκίνηση και τη διακοπή εφαρμογών διαστήματος καθώς και τον συντονισμό άλλων εργασιών.
Η πρόκληση ήταν να καταλάβουμε πώς να δώσουμε εντολή στην εφαρμογή κάμερας ενσωματωμένη να τραβήξει μια φωτογραφία και στη συνέχεια να ανακτήσει το στιγμιότυπο. Έκανα τα παρακάτω βήματα.
Μετά την εκκίνηση της διεπαφής CTT, εισήγαγα το URI του επόπτη για να συνδεθώ με τον επόπτη. Στη συνέχεια, έλεγξα τις διαθέσιμες εφαρμογές, βρήκα την εφαρμογή της κάμερας και την ξεκίνησα. Η εφαρμογή κάμερας επέστρεψε το URI της, το οποίο χρησιμοποίησα για να τη συνδέσω. Στη συνέχεια, εκτέλεσα την ενέργεια Base64SnapImage, η οποία έδωσε εντολή στην ενσωματωμένη κάμερα να τραβήξει μια φωτογραφία.
Η εφαρμογή κάμερας προσφέρει επίσης μια υπηρεσία παραμέτρων που μπορεί να επιστρέψει δύο τιμές: τον αριθμό των λήψεων και το στιγμιότυπο JPG που κωδικοποιείται στο base64. Ωστόσο, η διασύνδεση CTT δεν φαινόταν να παρέχει τρόπο προβολής της εικόνας ούτε αντιγραφής τιμών παραμέτρων απευθείας από τη διεπαφή, αν και μπορούσα να δω ότι υπήρχε η επιθυμητή τιμή. Χρειαζόμουν λοιπόν μια κυκλική μέθοδο για την απόκτηση της εικόνας.
Ανακάλυψα ότι η διεπαφή CTT έχει ένα enableGeneration κουμπί που ενεργοποιεί τακτικά προγραμματισμένη δημοσίευση μιας τιμής παραμέτρου. Από τη γραμμή εντολών CTT, θα μπορούσα στη συνέχεια να εγγραφώ στην επιθυμητή παράμετρο, να λάβω την τιμή όταν δημοσιεύτηκε και να την ανακατευθύνω σε ένα αρχείο.
Εφόσον εκτελούσα το CTT σε ένα κοντέινερ Docker, αντέγραψα το αρχείο στο σύστημα κεντρικού υπολογιστή μου με docker cp, αφαίρεσε το cruft από το περιεχόμενο του αρχείου και, στη συνέχεια, το base64 αποκωδικοποίησε την εικόνα για να προβάλει τη σημαία: ΚΑΤΑΚΤΗΣΤΕ ΤΗ ΔΙΑΚΟΠΗ!.
Εκτροπή πυραύλων
Η τελευταία πρόκληση ήταν να χρησιμοποιήσετε το σύστημα στόχευσης πυραύλων εφαρμογή στο CubeSat του παιχνιδιού για να ανακατευθύνει έναν πύραυλο από τη γη στον ήλιο. Αυτή η εφαρμογή παρείχε μόνο μία ενέργεια: Debug. Η εκτέλεση του δεν φαινόταν να κάνει πολλά εκτός από την εκτύπωση της SQL ΕΚΔΟΣΗ εντολή και η έξοδος της σαν να είχε εκτελεστεί από μια βάση δεδομένων που χρησιμοποιείται από την εφαρμογή:
VERSION(): 11.2.2-MariaDB-1:11.2.2+maria~ubu2204
Αμέσως αναρωτήθηκα αν υπήρχε μια ευπάθεια SQL injection στο παιχνίδι. Η διεπαφή CTT παρείχε ένα πεδίο για την εισαγωγή ενός ορίσματος για το Debug δράση, οπότε προσπάθησα να εγχύσω μια άλλη εντολή:
; ΕΜΦΑΝΙΣΗ ΧΟΡΗΓΙΩΝ ΓΙΑ ΤΟΝ CURRENT_USER();
Grants for targeter@%: GRANT USAGE ON *.* TO `targeter`@`%` ΑΝΑΓΝΩΡΙΣΜΕΝΟ ΜΕ Κωδικό πρόσβασης '*41E2CFE844C8F1F375D5704992440920F11A11BA' |
Grants for targeter@%: GRANT SELECT, INSERT ON `missile_targeting_system`.`satellite_query` TO `targeter`@`%` |
Επιχορηγήσεις για targeter@%: GRANT SELECT ON `missile_targeting_system`.`pointing_mode` TO `targeter`@`%` |
Επιχορηγήσεις για targeter@%: GRANT SELECT ON `missile_targeting_system`.`messaging` TO `targeter`@`%` |
Grants for targeter@%: GRANT SELECT ON `missile_targeting_system`.`target_coordinates` TO `targeter`@`%` |
Επιχορηγήσεις για targeter@%: GRANT SELECT ON `missile_targeting_system`.`pointing_mode_to_str` TO `targeter`@`%` |
Λοιπόν, ήρθε η ώρα να λεηλατήσουμε τη βάση δεδομένων! ο pointing_mode και pointing_mode_to_str πίνακες που υποδεικνύουν πού κατευθυνόταν αυτή τη στιγμή ο πύραυλος:
; SELECT * FROM pointing_mode;
id: 1 | αριθμητική_λειτουργία: 0 |
; SELECT * FROM pointing_mode_to_str;
id: 1 | αριθμητική_λειτουργία: 0 | str_mode: Earth Point Mode | str_desc: Όταν το pointing_mode είναι 0, το σύστημα στόχευσης εφαρμόζει τις target_coordinates στη γη. |
id: 2 | αριθμητική_λειτουργία: 1 | str_mode: Λειτουργία Sun Point | str_desc: Όταν το pointing_mode είναι 1, το σύστημα στόχευσης δείχνει προς τον ήλιο, αγνοώντας τις συντεταγμένες. |
Από αυτές τις πληροφορίες μπορούσα να δω ότι έπρεπε να αλλάξω το αριθμητική_λειτουργία τιμή στο pointing_mode τραπέζι προς 1, αλλά δεν είχα άδεια να ενημερώσω αυτόν τον πίνακα.
Είχα την άδεια να εισαγάγω νέες σειρές στο satellite_query πίνακα, ο οποίος επί του παρόντος είχε μία γραμμή με μια ακόμη άγνωστη τιμή στο αντικείμενο στήλη και τον πηγαίο κώδικα μιας κλάσης Java που ονομάζεται SatelliteQueryFileFolderUtility στο αποτελέσματα στήλη.
Μέχρι αυτό το σημείο η έξοδος από το Debug Η δράση ήταν εύκολα ορατή σε ένα παράθυρο στο κάτω μέρος του Υπηρεσία εκκίνησης εφαρμογών καρτέλα που παρέχεται από τον επόπτη στη διεπαφή CTT. Ωστόσο, η τιμή του αντικειμένου δεν φαινόταν να αποδίδεται σωστά στο παράθυρο. Ιδανικά, καλό θα ήταν να δείτε την εξάγωνη χωματερή του αντικειμένου, η οποία θα μπορούσε να επιτευχθεί με τη βοήθεια Wireshark ή χρησιμοποιώντας την SQL HEX λειτουργία. Αυτό αποκάλυψε ότι είχα να κάνω με ένα σειριακό αντικείμενο Java.
Μετά το διαβάζοντας επάνω το πρωτόκολλο σειριοποίησης αντικειμένων Java, κατάφερα να αποκωδικοποιήσω τα hex byte:
Hex byte |
Σύμβολο/Έννοια |
Παρατήρηση (τιμές ASCII δεκαεξαδικών byte σε γραμματοσειρά μονοδιάστατου διαστήματος) |
ACED |
STREAM_MAGIC |
Ένας μαγικός αριθμός. |
0005 |
STREAM_VERSION |
Η έκδοση του πρωτοκόλλου ροής είναι 2. |
73 |
TC_OBJECT |
Η αρχή ενός αντικειμένου. |
72 |
TC_CLASSDESC |
Η αρχή ενός ορισμού τάξης. |
001F |
Μήκος |
Το όνομα της κλάσης έχει μήκος 31 byte. |
536174656C6C697465517 |
αξία |
Το όνομα της τάξης είναι SatelliteQueryFileFolderUtility. |
12D4F68D0EB392CB |
serialVersionUID |
Ένα μοναδικό αναγνωριστικό που σχετίζεται με αυτήν τη σειριακή κλάση. |
02 |
SC_SERIALIZABLE |
Η τάξη είναι σειριοποιήσιμη. |
0003 |
καταμέτρηση πεδίου |
Η τάξη έχει τρία πεδία. |
5A |
Τύπος δεδομένων – τιμή ASCII Z |
Το πρώτο πεδίο είναι boolean. |
0007 |
Μήκος |
Το όνομα αυτού του πεδίου έχει μήκος 7 byte. |
69735175657279 |
Όνομα |
Το όνομα αυτού του πεδίου είναι isQuery. |
5A |
Τύπος δεδομένων – τιμή ASCII Z |
Το δεύτερο πεδίο είναι boolean. |
0008 |
Μήκος |
Το όνομα αυτού του πεδίου έχει μήκος 8 byte. |
6973557064617465 |
Όνομα |
Το όνομα αυτού του πεδίου είναι είναι Ενημέρωση. |
4C |
Τύπος δεδομένων – τιμή ASCII L |
Το τρίτο πεδίο είναι ένα αντικείμενο. |
000F |
Μήκος |
Το όνομα αυτού του πεδίου έχει μήκος 15 byte. |
706174684F72537 |
Όνομα |
Το όνομα αυτού του πεδίου είναι pathOrStatement . |
74 |
TC_STRING |
Ο τύπος κλάσης αυτού του αντικειμένου δίνεται σε μια συμβολοσειρά. |
0012 |
Μήκος |
Αυτή η συμβολοσειρά έχει μήκος 18 byte. |
4C6A6176612F6C616E |
αξία |
Ο τύπος κλάσης αυτού του αντικειμένου είναι java/lang/String. |
78 |
TC_ENDBLOCKDATA |
Το τέλος ενός ορισμού τάξης. |
70 |
TC_NULL |
Δεν έχει οριστεί υπερκατηγορία. |
00 |
αξία |
Το boolean πεδίο isQuery έχει την αξία ψευδής. |
00 |
αξία |
Το boolean πεδίο είναι Ενημέρωση έχει την αξία ψευδής. |
74 |
TC_STRING |
Η αξία του pathOrStatement Το πεδίο είναι μια συμβολοσειρά. |
0029 |
Μήκος |
Η αξία του pathOrStatement Το πεδίο έχει μήκος 41 byte. |
2F6F70742F536174656C6 |
αξία |
Η αξία του pathOrStatement Το πεδίο είναι /opt/SatelliteQueryFileFolderUtility.java |
Η απόκτηση αυτού του αντικειμένου μέσω Wireshark επέστρεψε έναν λανθασμένο μαγικό αριθμό και serialVersionUID, αλλά όχι όταν χρησιμοποιείτε τη λειτουργία HEX.
Για να καταλάβετε τι ένα ΕΝΘΕΤΟ μέσα στο satellite_query ο πίνακας θα έκανε, έβαλα αυτό το αντικείμενο σε μια νέα σειρά του πίνακα και έλαβα πίσω τον ίδιο πηγαίο κώδικα Java στο αποτελέσματα στήλη. Στην πραγματικότητα, αυτή η συμπεριφορά αντιστοιχούσε σε αυτό που είδα σε αυτόν τον κώδικα ως το λάβετε αποτελέσματα λειτουργία ενός SatelliteQueryFileFolderUtility αντικείμενο.
Αυτή η συνάρτηση παίρνει διαφορετική διαδρομή εκτέλεσης ανάλογα με τις τιμές των τριών πεδίων του αντικειμένου: isQuery, είναι Ενημέρωση, να pathOrStatement. Αν εγώsQuery και είναι Ενημέρωση είναι ψευδείς, τότε η συνάρτηση ελέγχει εάν το pathOrStatement είναι μια διαδρομή και ένας κατάλογος. Εάν ναι, επιστρέφει τη λίστα των αρχείων που περιέχονται στον κατάλογο. Διαφορετικά, υποθέτει ότι έχει παρασχεθεί ένα αρχείο και προσπαθεί να επιστρέψει τα περιεχόμενα αυτού του αρχείου.
Από την άλλη πλευρά, εάν το isQuery και το isUpdate είναι αληθές, τότε η συνάρτηση εκτελεί το περιεχόμενο του pathOrStatement ως SQL ΕΚΣΥΓΧΡΟΝΊΖΩ δήλωση. Αυτό που έπρεπε να εκτελέσω ήταν το εξής:
ΕΝΗΜΕΡΩΣΗ pointing_mode SET numerical_mode = 1;
Άλλαξα τα απαραίτητα byte (επισημαίνονται παρακάτω) στο σειριακό αντικείμενο και έκανα ένεση της εντολής που κερδίζει:
; INSERT INTO satellite_query
(αντικείμενο)
ΑΞΙΕΣ
(0xACED00057372001F536174656C6C697465517565727946696C65466F6C6465725574696C69747912D4F68D0EB392CB0200035A0007697351756572795A000869735570646174654C000F706174684F7253746174656D656E747400124C6A6176612F6C616E672F537472696E673B7870010174002C55504441544520706F696E74696E675F6D6F646520534554206E756D65726963616C5F6D6F6465203D20313B)
Wrap-up
Αυτές είναι μόνο μερικές από τις περιοχές που καλύπτονται στο 2023 SANS Holiday Hack Challenge. υπήρχαν πολλοί άλλοι που εξέτασαν την ασφάλεια του JSON web token, σπάσιμο κωδικών πρόσβασης με hashcat, εικονικό ράγισμα κλειδαριών αποσκευών και περιστροφικές κλειδαριές συνδυασμού, Έγχυση Python NaN, Με τη χρήση του Kusto Query Language for απειλή θήρας, έλεγχος Εγγραφές DKIM και SPF για να βοηθήσει στον εντοπισμό κακόβουλων μηνυμάτων ηλεκτρονικού ταχυδρομείου και minigames με δυνατότητα εισβολής.
Συνολικά, είμαι βέβαιος ότι ένα τόσο ευρύ φάσμα διασκεδαστικών προκλήσεων δεν μπορεί να μην είναι διδακτικό σε όποιον επιχειρεί να τις αντιμετωπίσει. Και ενώ ανυπομονώ ήδη για την πρόκληση της επόμενης χρονιάς, ένα πολύτιμο ευχαριστώ απευθύνεται στους διοργανωτές του SANS Holiday Hack Challenge για τη διοργάνωση της φετινής πρόκλησης.
Μπορείτε να διαβάσετε τις καλύτερες στιγμές μου από την πρόκληση του 2022 στο Το έσπασε! Highlights από το KringleCon 5: Golden Rings.
- SEO Powered Content & PR Distribution. Ενισχύστε σήμερα.
- PlatoData.Network Vertical Generative Ai. Ενδυναμώστε τον εαυτό σας. Πρόσβαση εδώ.
- PlatoAiStream. Web3 Intelligence. Ενισχύθηκε η γνώση. Πρόσβαση εδώ.
- PlatoESG. Ανθρακας, Cleantech, Ενέργεια, Περιβάλλον, Ηλιακός, Διαχείριση των αποβλήτων. Πρόσβαση εδώ.
- PlatoHealth. Ευφυΐα βιοτεχνολογίας και κλινικών δοκιμών. Πρόσβαση εδώ.
- πηγή: https://www.welivesecurity.com/en/cybersecurity/cracking-2023-sans-holiday-hack-challenge/
- :έχει
- :είναι
- :δεν
- :που
- $UP
- 1
- 11
- 15%
- 2022
- 2023
- 31
- 32
- 41
- 65
- 7
- 8
- a
- Ικανός
- Σχετικα
- πάνω από
- κατάχρηση
- κατάχρηση
- Αποδέχεται
- πρόσβαση
- αποκτούν
- αποκτήθηκαν
- απόκτηση
- Ενέργειες
- ενεργός
- Active Directory
- Επιπλέον
- Πρόσθετος
- διεύθυνση
- διαχειριστής
- συμβουλές
- Μετά το
- πάλι
- την ηλικία του
- πρακτορείο
- AI
- Όλα
- επιτρέπουν
- επιτρέπεται
- Επιτρέποντας
- κατά μήκος
- ήδη
- Επίσης
- εναλλακτική λύση
- Αν και
- πάντοτε
- am
- μεταξύ των
- an
- και
- Άλλος
- απάντηση
- κάθε
- κάποιος
- api
- APIs
- app
- ισχύει
- πλησιάζω
- εφαρμογές
- ΕΙΝΑΙ
- περιοχές
- επιχείρημα
- γύρω
- AS
- ζητώ
- συσχετισμένη
- υποθέτει
- At
- Προσπάθειες
- ήχου
- πιστοποιώ την αυθεντικότητα
- επικύρωση
- Πιστοποίηση
- εξουσιοδότηση
- διαθέσιμος
- μακριά
- Γαλανός
- πίσω
- Κακός
- Βασικα
- BE
- επειδή
- ήταν
- συμπεριφορά
- παρακάτω
- ΚΑΛΎΤΕΡΟΣ
- Κομμάτι
- και οι δύο
- Κάτω μέρος
- Ραδιοφωνικός
- αλλά
- κουμπί
- by
- κλήση
- που ονομάζεται
- κλήσεις
- φωτογραφική μηχανή
- CAN
- δεν μπορώ
- ο οποίος
- ορισμένες
- πιστοποιητικό
- πιστοποιητικά
- πρόκληση
- προκλήσεις
- αλλαγή
- άλλαξε
- ChatGPT
- τετραγωνισμένος
- έλεγχος
- έλεγχοι
- τάξη
- πελάτης
- Cloudflare
- κωδικός
- Κέρματα
- συλλέγουν
- Στήλη
- συνδυασμός
- έρχεται
- Επικοινωνία
- σύμφωνος
- Συνθήκες
- διαμόρφωση
- ΕΠΙΒΕΒΑΙΩΜΕΝΟΣ
- συγχέεται
- Connect
- σύνδεση
- καταναλωτής
- που περιέχονται
- Δοχείο
- περιεχόμενο
- περιεχόμενα
- έλεγχος
- ελέγχους
- συντονισμός
- αντιγραφή
- σωστά
- ανταποκρίθηκε
- θα μπορούσε να
- καλύπτονται
- ρωγμή
- ράγισμα
- δημιουργία
- δημιουργία
- Τη στιγμή
- έθιμο
- Κυβερνασφάλεια
- βάση δεδομένων
- μοιρασιά
- Προεπιλογή
- ορίζεται
- ορισμός
- Σε συνάρτηση
- αναπτυχθεί
- επιθυμητή
- καθέκαστα
- αναπτύχθηκε
- ανάπτυξη
- DID
- Καλούπι
- διαφορετικές
- διαφέρουν
- κατευθείαν
- ανακαλύπτουν
- ανακάλυψαν
- do
- Λιμενεργάτης
- Δοχείο Docker
- κάνει
- τομέα
- Όνομα Χώρου
- Θύρα
- κάτω
- δυο
- χωματερή
- κατά την διάρκεια
- κερδίζουν
- Κερδίστε
- γη
- εύκολα
- είτε
- κωδικοποιούνται
- κρυπτογραφημένα
- τέλος
- Τελικό σημείο
- τελικά σημεία
- Μηχανική
- αρκετά
- εισάγετε
- εισήχθη
- Ολόκληρος
- σφάλμα
- λάθη
- κλιμακώνω
- ευρωπαϊκός
- Ευρωπαϊκός Οργανισμός Διαστήματος
- Even
- πάντα
- Εκτός
- εκτελέσει
- εκτελέστηκε
- Εκτελεί
- εκτέλεση
- εμπειρία
- Εξηγήστε
- Εκμεταλλεύομαι
- πρόσωπα
- γεγονός
- ΑΠΟΤΥΓΧΑΝΩ
- απομίμηση
- ψευδής
- μακριά
- Χαρακτηρίζοντας
- λίγοι
- πεδίο
- Πεδία
- Εικόνα
- σχηματικός
- Αρχεία
- Αρχεία
- τελικός
- Εύρεση
- Όνομα
- επιπλέων
- ακολουθείται
- Εξής
- Για
- Προς τα εμπρός
- Βρέθηκαν
- Πλαίσιο
- από
- πλήρη
- διασκέδαση
- λειτουργία
- Κέρδος
- παιχνίδι
- παιχνιδιού
- Games
- παράγουν
- παράγεται
- παίρνω
- δεδομένου
- πηγαίνει
- Χρυσή
- καλός
- χορηγεί
- χορήγηση
- επιχορηγήσεις
- Έδαφος
- Group
- φρουρά
- σιδηροπρίονο
- είχε
- χέρι
- χασίσι
- Έχω
- κεφάλι
- βοήθεια
- εδώ
- HEX
- κρυμμένο
- υψηλότερο
- Τόνισε
- ανταύγειες
- του
- Αργία
- Αρχική
- οικοδεσπότης
- Πως
- Πώς να
- Ωστόσο
- HTML
- http
- HTTPS
- Κυνήγι
- i
- ID
- ιδανικά
- προσδιορίζονται
- αναγνωριστικό
- προσδιορίσει
- Ταυτότητα
- if
- εικόνα
- αμέσως
- βελτιώνει
- in
- στο παιχνίδι
- απρόσιτος
- υποδεικνύεται
- πληροφορίες
- πληροφορίες
- αντί
- οδηγίες
- τόκος
- περιβάλλον λειτουργίας
- σε
- συμμετέχουν
- IP
- Διεύθυνση IP
- νησί
- Εκδόθηκε
- IT
- ΤΟΥ
- Java
- jpg
- Κλειδί
- πλήκτρα
- Γλώσσα
- large
- αργότερα
- Led
- Μήκος
- Μόχλευση
- βρίσκεται
- φως
- γραμμή
- linux
- Λιστα
- Εισηγμένες
- τοποθεσία
- Κλειδαριές
- καταγραφεί
- ξύλευση
- Σύνδεση
- ματιά
- κοίταξε
- κοιτάζοντας
- μηχανή
- που
- μαγεία
- κάνω
- Κατασκευή
- κακόβουλο
- διαχειρίζεται
- πολοί
- χάρτη
- Ενδέχεται..
- me
- μηχανισμός
- Γνωρίστε
- που αναφέρθηκαν
- μήνυμα
- μέθοδος
- Microsoft
- Τρόπος
- μοντέλο
- πλέον
- μετακινηθεί
- πολύ
- πολλαπλούς
- πρέπει
- my
- όνομα
- πλοήγηση
- απαραίτητος
- Ανάγκη
- που απαιτούνται
- δίκτυο
- Νέα
- επόμενη
- εννέα
- Όχι.
- ούτε
- Βόρειος
- αξιοσημείωτο
- τώρα
- nt
- αριθμός
- αντικείμενο
- σκοπός
- στόχοι
- αποκτήσει
- λαμβάνεται
- of
- προσφορές
- on
- Onboard
- μια φορά
- ONE
- αποκλειστικά
- or
- διοργανωτές
- ΑΛΛΑ
- Άλλα
- αλλιώς
- έξω
- παραγωγή
- επί
- δική
- ιδιοκτήτης
- ζεύγη
- παράθυρο
- παράμετρος
- μέρος
- εξαρτήματα
- Πέρασμα
- Κωδικός Πρόσβασης
- Κωδικοί πρόσβασης
- Το παρελθόν
- μονοπάτι
- άδεια
- δικαιώματα
- PHP
- εικόνα
- κομμάτι
- Μέρος
- Πλάτων
- Πληροφορία δεδομένων Plato
- Πλάτωνα δεδομένα
- Δοκιμάστε να παίξετε
- παίχτης
- Σημείο
- σημεία
- Πύλη
- Θέση
- PowerShell
- παρόν
- προηγούμενος
- Κύριος
- προνόμια
- Προϊόν
- ιδιότητες
- πρωτόκολλο
- παρέχουν
- παρέχεται
- παρέχει
- δημόσιο
- δημόσιο κλειδί
- δημοσιεύθηκε
- Δημοσιεύσεις
- Βάζοντας
- ερώτηση
- Ερωτήσεις
- R
- Ραδιόφωνο
- RAM
- Διάβασε
- Ανάγνωση
- λαμβάνω
- έλαβε
- διευθύνω πάλιν
- Εγγραφή
- τακτικός
- τακτικά
- Καταργήθηκε
- απόδοση
- αντικαθιστώ
- αναφέρουν
- ζητήσει
- ζητώντας
- απαιτούν
- απαιτείται
- Απαιτεί
- πόρος
- υπεύθυνος
- ΠΕΡΙΦΕΡΕΙΑ
- απόδοση
- Επιστροφές
- αποκαλύπτω
- Αποκαλυφθε'ντα
- αποκαλύπτοντας
- αντιστρέψει
- κινδύνους
- Δωμάτιο
- ρίζα
- Root πρόσβαση
- ΣΕΙΡΑ
- τρέξιμο
- τρέξιμο
- διασφαλίσεις
- ίδιο
- δορυφόρος
- πριόνι
- προγραμματιστεί
- γραφή
- Αναζήτηση
- αναζήτηση
- Δεύτερος
- Τμήμα
- τμήματα
- ασφάλεια
- κινδύνους ασφάλειας
- δείτε
- φαίνομαι
- τμήμα
- επιλέξτε
- στείλετε
- Σειρές
- σοβαρός
- διακομιστής
- υπηρεσία
- Υπηρεσίες
- σειρά
- διάφοροι
- Κοινοποίηση
- θα πρέπει να
- δείχνουν
- υπογραφή
- Απλούς
- απλοποιημένη
- δεξιότητες
- small
- SMB
- Στιγμιότυπο
- So
- λογισμικό
- μερικοί
- Πηγή
- πρωτογενής κώδικας
- Χώρος
- μιλούν
- ομιλία
- συγκεκριμένες
- ειδικά
- SQL
- SQL Injection
- Εκκίνηση
- ξεκίνησε
- Ξεκινήστε
- Δήλωση
- σταθμός
- Βήμα
- Βήματα
- στάθμευση
- αποθηκεύονται
- Ιστορία
- μετάδοση
- Σπάγγος
- θέμα
- συνεισφέρω
- συνδρομή
- Επιτυχώς
- τέτοιος
- σουίτα
- Κυρ.
- παρέχεται
- προμήθεια
- βέβαιος
- διακόπτης
- σύστημα
- τραπέζι
- Πάρτε
- λαμβάνεται
- παίρνει
- στόχος
- στόχευση
- Έργο
- εργασίες
- λέει
- πρότυπο
- πρότυπα
- δοκιμή
- δοκιμαστεί
- Δοκιμές
- κείμενο
- ευχαριστώ
- ότι
- Η
- οι πληροφορίες
- Η Πηγη
- Τους
- τότε
- Εκεί.
- Αυτοί
- Τρίτος
- αυτό
- τρία
- Ετσι
- ώρα
- Τίτλος
- προς την
- μαζι
- ένδειξη
- πήρε
- εργαλείο
- εργαλεία
- Τρένο
- Προσπάθησα
- ενεργοποιούν
- αληθής
- Γύρισε
- δύο
- τύπος
- τελικά
- υπό
- καταλαβαίνω
- μοναδικός
- άγνωστος
- μέχρι
- ανερχόμενος
- Ενημέρωση
- URI
- URL
- Χρήση
- χρήση
- μεταχειρισμένος
- Χρήστες
- Χρήστες
- χρησιμοποιώντας
- χρησιμότητα
- έγκυρος
- αξία
- Αξίες
- Θόλος
- θόλους
- εκδοχή
- μέσω
- Δες
- Πραγματικός
- εικονική μηχανή
- οπτικές
- Φωνή
- πιστοποίηση φωνής
- Θέματα ευπάθειας
- ευπάθεια
- Ευάλωτες
- ήθελε
- ήταν
- Τρόπος..
- we
- ιστός
- ΛΟΙΠΌΝ
- ήταν
- Τι
- πότε
- αν
- Ποιό
- ενώ
- Ο ΟΠΟΊΟΣ
- Wikipedia
- άνεμος
- παράθυρα
- νίκη
- με
- λέξη
- θα
- ακόμη
- εσείς
- Σας
- zephyrnet