Drupal RCE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Σε παλαιότερες εκδόσεις του Drupal (πριν την έκδοση 8), ήταν δυνατό να συνδεθείτε ως διαχειριστής και να ενεργοποιήσετε το module PHP filter
, το οποίο "Επιτρέπει την αξιολόγηση ενσωματωμένου κώδικα/κομματιών PHP." Αλλά από την έκδοση 8 αυτό το module δεν είναι εγκατεστημένο από προεπιλογή.
Πηγαίνετε στο /modules/php και αν επιστραφεί σφάλμα 403 τότε το plugin PHP filter είναι εγκατεστημένο και μπορείτε να συνεχίσετε
Αν όχι, πηγαίνετε στα Modules
και ελέγξτε το κουτάκι του PHP Filter
και στη συνέχεια πατήστε Save configuration
Στη συνέχεια, για να το εκμεταλλευτείτε, κάντε κλικ στο Add content
, επιλέξτε Basic Page
ή Article
και γράψτε την PHP backdoor, στη συνέχεια επιλέξτε PHP
κώδικα σε μορφή κειμένου και τελικά επιλέξτε Preview
Για να το ενεργοποιήσετε, απλά αποκτήστε πρόσβαση στον νεοδημιουργηθέντα κόμβο:
Στις τρέχουσες εκδόσεις δεν είναι πλέον δυνατό να εγκαταστήσετε plugins μόνο με πρόσβαση στο διαδίκτυο μετά την προεπιλεγμένη εγκατάσταση.
Από την έκδοση 8 και μετά, το PHP Filter module δεν εγκαθίσταται προεπιλεγμένα. Για να αξιοποιήσουμε αυτή τη λειτουργικότητα, θα πρέπει να εγκαταστήσουμε το module μόνοι μας.
Κατεβάστε την πιο πρόσφατη έκδοση του module από την ιστοσελίδα του Drupal.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
Αφού κατεβεί, πηγαίνετε στο Administration
> Reports
> Available updates
.
Κάντε κλικ στο Browse
, επιλέξτε το αρχείο από τον φάκελο που το κατεβάσατε και στη συνέχεια κάντε κλικ στο Install
.
Αφού εγκατασταθεί το module, μπορείτε να κάνετε κλικ στο Content
και να δημιουργήσετε μια νέα βασική σελίδα, παρόμοια με το πώς κάναμε στο παράδειγμα του Drupal 7. Και πάλι, βεβαιωθείτε ότι έχετε επιλέξει PHP code
από το αναπτυσσόμενο μενού Text format
.
Στις τρέχουσες εκδόσεις δεν είναι πλέον δυνατό να εγκαταστήσετε plugins μόνο με πρόσβαση στο διαδίκτυο μετά την προεπιλεγμένη εγκατάσταση.
Ήταν δυνατό να κατεβάσετε ένα module, να προσθέσετε μια backdoor σε αυτό και να το εγκαταστήσετε. Για παράδειγμα, κατεβάζοντας το Trurnstile module σε συμπιεσμένη μορφή, δημιουργώντας ένα νέο αρχείο PHP backdoor μέσα σε αυτό, επιτρέποντας την πρόσβαση στο αρχείο PHP με ένα αρχείο .htaccess
:
And then going to http://drupal.local/admin/modules/install
για να εγκαταστήσουμε το backdoored module και να αποκτήσουμε πρόσβαση στο /modules/turnstile/back.php
για να το εκτελέσουμε.
Post shared by Coiffeur0x90
Στο μενού Extend (/admin/modules), μπορείτε να ενεργοποιήσετε αυτά που φαίνονται ως plugins που είναι ήδη εγκατεστημένα. Από προεπιλογή, τα plugins Media και Media Library δεν φαίνονται να είναι ενεργοποιημένα, οπότε ας τα ενεργοποιήσουμε.
Πριν την ενεργοποίηση:
Μετά την ενεργοποίηση:
Θα εκμεταλλευτούμε τη δυνατότητα Configuration synchronization για να εξάγουμε (export) και να ανεβάσουμε (import) τις καταχωρίσεις ρυθμίσεων του Drupal:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Patch system.file.yml
Ας ξεκινήσουμε με την επιδιόρθωση της πρώτης καταχώρισης allow_insecure_uploads
από:
File: system.file.yml
Για:
Αρχείο: system.file.yml
Διόρθωση field.field.media.document.field_media_document.yml
Στη συνέχεια, διόρθωσε την δεύτερη καταχώρηση file_extensions
από:
Αρχείο: field.field.media.document.field_media_document.yml
Για:
Αρχείο: field.field.media.document.field_media_document.yml
Δεν το χρησιμοποιώ σε αυτή την ανάρτηση, αλλά σημειώνεται ότι είναι δυνατόν να οριστεί η είσοδος
file_directory
με αυθαίρετο τρόπο και ότι είναι ευάλωτη σε επίθεση διαδρομής (path traversal) (έτσι μπορούμε να επιστρέψουμε μέσα στο δέντρο συστήματος αρχείων του Drupal).
Το τελευταίο βήμα είναι το πιο απλό και χωρίζεται σε δύο υποβήματα. Το πρώτο είναι να ανεβάσουμε ένα αρχείο σε μορφή .htaccess για να εκμεταλλευτούμε τις οδηγίες του Apache και να επιτρέψουμε στα αρχεία .txt να ερμηνεύονται από τη μηχανή PHP. Το δεύτερο είναι να ανεβάσουμε ένα αρχείο .txt που περιέχει το payload μας.
Αρχείο: .htaccess
Γιατί είναι αυτό το κόλπο ωραίο;
Επειδή μόλις το Webshell (που θα ονομάσουμε LICENSE.txt) τοποθετηθεί στον Web server, μπορούμε να μεταδώσουμε τις εντολές μας μέσω $_COOKIE
και στα αρχεία καταγραφής του Web server, αυτό θα εμφανιστεί ως ένα νόμιμο GET αίτημα σε ένα αρχείο κειμένου.
Γιατί να ονομάσουμε το Webshell μας LICENSE.txt;
Απλά επειδή αν πάρουμε το παρακάτω αρχείο, για παράδειγμα core/LICENSE.txt (το οποίο είναι ήδη παρόν στον πυρήνα του Drupal), έχουμε ένα αρχείο 339 γραμμών και 17.6 KB σε μέγεθος, το οποίο είναι τέλειο για να προσθέσουμε ένα μικρό απόσπασμα κώδικα PHP στη μέση (καθώς το αρχείο είναι αρκετά μεγάλο).
Αρχείο: Διορθωμένο LICENSE.txt
Αρχικά, εκμεταλλευόμαστε τη δυνατότητα Προσθήκη Εγγράφου (/media/add/document) για να ανεβάσουμε το αρχείο μας που περιέχει τις οδηγίες Apache (.htaccess).
Μέρος 3.2 (ανέβασμα αρχείου LICENSE.txt)
Στη συνέχεια, εκμεταλλευόμαστε ξανά τη δυνατότητα Προσθήκη Εγγράφου (/media/add/document) για να ανεβάσουμε ένα Webshell κρυμμένο μέσα σε ένα αρχείο άδειας.
Το τελευταίο μέρος περιλαμβάνει την αλληλεπίδραση με το Webshell.
Όπως φαίνεται στην παρακάτω στιγμιότυπη οθόνη, αν το cookie που αναμένεται από το Webshell μας δεν είναι καθορισμένο, λαμβάνουμε το επόμενο αποτέλεσμα όταν συμβουλευόμαστε το αρχείο μέσω ενός Web browser.
Όταν ο επιτιθέμενος ρυθμίζει το cookie, μπορεί να αλληλεπιδράσει με το Webshell και να εκτελέσει οποιαδήποτε εντολή θέλει.
Και όπως μπορείτε να δείτε στα αρχεία καταγραφής, φαίνεται ότι έχει ζητηθεί μόνο ένα αρχείο txt.
Σας ευχαριστώ που αφιερώσατε χρόνο για να διαβάσετε αυτό το άρθρο, ελπίζω να σας βοηθήσει να αποκτήσετε μερικά shells.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)