2023 Project 2

Ο στόχος σας είναι να επιτεθείτε στον server project-2.csec.chatzi.org. Γνωρίζετε ότι στο url http://project-2.csec.chatzi.org:8000 τρέχει o pico webserver, ο κώδικας του οποίου υπάρχει στο πακάτω repository. Εχετε επίσης ήδη υποκλέψει:

  • το username του site: admin
  • το password: 8c6e2f34df08e2f879e61eeb9e8ba96f8d9e96d8033870f80127567d270d7d96
    (ο συγκεκριμένος webserver το δέχεται μόνο σε encrypted μορφή)

Tasks:

  1. Βρείτε το MD5 digest του plaintext password
  2. Βρείτε το plaintext password
  3. Βρείτε το περιεχόμενο του αρχείου /etc/secret στον server
  4. Βρείτε το αποτέλεσμα της εντολής lspci στον server

Παρατηρήσεις

  • Οι ίδιες ομάδες με την εργασία 1

  • Εγγραφή στο github: https://classroom.github.com/a/HxmDkdtS

  • Η ταχύτητα επίλυσης δεν έχει βαθμολογική σημασία, αλλά θα υπάρχει "leaderboard" με τους 3 πρώτους που λύνουν κάθε task καθαρά για λόγους "flexing". Αν είστε στους πρώτους στείλτε claim στο ys13@chatzi.org (αλλιώς δεν χρειάζεται).

  • Τα βήματα μπορούν να λυθούν με οποιαδήποτε σειρά, δεν χρειάζεται η λύση του ενός για το επόμενο (αλλά προτείνεται η σειρά που δίνεται).

  • Hints:

    • Task 1: πρέπει να χρησιμοποιήσετε μια απλή ευπάθεια στον C κώδικα
    • Task 2: πρέπει να σπάσετε το encryption χρησιμοποιώντας μια ευπάθεια της υλοποίησης. Δεν πρέπει να κάνετε invert το digest από το task 1 (δεν θα το βρείτε σε MD5 databases, εκτός και αν κάποια άλλη ομάδα το βρει και το προσθέσει).
    • Tasks 3/4: buffer overflow attack. Το attack στο task 4 είναι λίγο πιο δύσκολο (αν θέλετε μπορείτε να κάνετε τα δύο tasks μαζί, αλλά στο 3 υπάρχει και λίγο πιο εύκολη λύση).
  • Βαθμολογία μαθήματος

    • Εργασία 1: 4 μονάδες
    • Εργασία 2:
      • Task 1: 1 μονάδα
      • Task 2: 1 μονάδα
      • Task 3: 2 μονάδες
      • Task 4: 1 μονάδα
      • Docker: 1 μονάδα
  • Στο τέλος του README.md: αναφέρετε τις απαντήσεις, και περιγράψτε τα βήματα που ακολουθήσατε. Μην ξεχάσετε να κάνετε commit μαζί με οποιοδήποτε κώδικα χρησιμοποιήσατε. Για ό,τι δεν ολοκληρώσετε περιγράψτε (και υλοποιήστε στο πρόγραμμα) την πρόοδό σας και πώς θα μπορούσατε να συνεχίσετε.

  • Για όλα τα βήματα απαιτείται να γράψετε ένα πρόγραμμα που να αυτοματοποιεί την εύρεση της λύσης. Μπορείτε να χρησιμοποιήσετε ό,τι γλώσσα προγραμματισμού θέλετε, αλλά θα πρέπει να μπορώ να το τρέξω σε Ubuntu 22.04 χρησιμοποιώντας software που είναι διαθέσιμο στο Ubuntu. Θα πρέπει επίσης να φτιάξετε ένα script run.sh που εκτελεί το πρόγραμμα με ό,τι παραμέτρους χρειάζονται.

  • Η πλήρης λύση της εργασίας απαιτεί να φτιάξετε ένα Docker container που να αυτοματοποιεί πλήρως την επίθεση. Ένα script ουσιαστικά, που απλά να εκτελείται σε container ώστε να μπορεί να τρέξει οπουδήποτε. Πάραδειγμα Dockerfile υπάρχει στο repository, και θα πρέπει να τρέχει με:

    docker build --tag attack . && docker run attack
    

    Λύσεις χωρίς docker γίνονται δεκτές, απλά χάνετε 1 μονάδα.

  • Deadline: 20/7 (μέχρι το τέλος της ημέρας)

    • Μπορείτε να παραδώσετε την εργασία και το Σεπτέμβρη, με μόνη διαφορά ότι το docker τότε θα πιάνει 3 μονάδες γιατί έχετε παραπάνω χρόνο (και πάλι όμως μπορείτε να πάρετε 10).
  • Οχι spoilers

  • Οχι DoS ή brute force. Μπορείτε να χρησιμοποιείτε scripts που να κάνουν μια επίθεση με έναν λογικό αριθμό από requests (να μπορεί να τελειώσει σε μία ώρα max). Aλλά όποιος βαράει στα τυφλά μηδενίζεται (θέλουμε οι servers να είναι accessible από όλους). Αν δεν είστε σίγουροι αν κάτι επιτρέπεται, απλά ρωτήστε.

  • Είναι σαφώς προτιμότερο να υλοποιήσετε πρώτα όλα τα attacks locally πριν τα τρέξετε στον server.

  • Ο pico server έχει γίνει compile στο linux03.di.uoa.gr, οπότε μπορείτε εκεί να φτιάξετε ένα executable ακριβώς σαν αυτό που εκτελείται στον server.

  • Αν θέλετε hints ρωτήστε privately (χωρίς βαθμολογική συνέπεια, σε λογικά πλαίσια).

Report

Προς συμπλήρωση:

Απαντήσεις:

  1. ...
  2. ...
  3. ...
  4. ...

...