Drupal RCE
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Με το Module PHP Filter
Σε παλαιότερες εκδόσεις του Drupal (πριν την έκδοση 8), ήταν δυνατό να συνδεθείτε ως διαχειριστής και να ενεργοποιήσετε το module PHP filter
, το οποίο "Επιτρέπει την αξιολόγηση ενσωματωμένου κώδικα/κομματιών PHP." Αλλά από την έκδοση 8 αυτό το module δεν είναι εγκατεστημένο από προεπιλογή.
Πρέπει να είναι εγκατεστημένο το plugin php (ελέγξτε το πηγαίνοντας στο /modules/php και αν επιστρέφει 403 τότε, υπάρχει, αν δεν βρεθεί, τότε το plugin php δεν είναι εγκατεστημένο)
Πηγαίνετε στο Modules -> (Ελέγξτε) PHP Filter -> Αποθήκευση ρυθμίσεων
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-33b0cd0a5bf70946deb6bc5c2dc0e6904642af9b%252Fimage%2520%28247%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=bd8359c7&sv=1)
Στη συνέχεια, κάντε κλικ στο Προσθήκη περιεχομένου -> Επιλέξτε Basic Page ή Article -> Γράψτε php shellcode στο σώμα -> Επιλέξτε PHP code στην Μορφή κειμένου -> Επιλέξτε Προεπισκόπηση
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-607d764091f974226ff1baac853144a317fc5838%252Fimage%2520%28338%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=bbb50651&sv=1)
Τέλος, απλά αποκτήστε πρόσβαση στον νεοδημιουργηθέντα κόμβο:
Εγκατάσταση του PHP Filter Module
Στις τρέχουσες εκδόσεις δεν είναι πλέον δυνατή η εγκατάσταση πρόσθετων μόνο με πρόσβαση στο διαδίκτυο μετά την προεπιλεγμένη εγκατάσταση.
Από την έκδοση 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
.
Backdoored Module
Στις τρέχουσες εκδόσεις δεν είναι πλέον δυνατή η εγκατάσταση πρόσθετων μόνο με πρόσβαση στο διαδίκτυο μετά την προεπιλεγμένη εγκατάσταση.
Ένα backdoored module μπορεί να δημιουργηθεί προσθέτοντας ένα shell σε ένα υπάρχον module. Τα modules μπορούν να βρεθούν στην ιστοσελίδα drupal.org. Ας επιλέξουμε ένα module όπως το CAPTCHA. Κάντε κύλιση προς τα κάτω και αντιγράψτε τον σύνδεσμο για το tar.gz αρχείο.
Κατεβάστε το αρχείο και εξαγάγετε το περιεχόμενό του.
Δημιουργήστε ένα PHP web shell με τα περιεχόμενα:
Στη συνέχεια, πρέπει να δημιουργήσουμε ένα
.htaccess
αρχείο για να αποκτήσουμε πρόσβαση στον φάκελο. Αυτό είναι απαραίτητο καθώς το Drupal αρνείται την άμεση πρόσβαση στον φάκελο/modules
.
Η παραπάνω ρύθμιση θα εφαρμόσει κανόνες για τον φάκελο / όταν ζητάμε ένα αρχείο στον φάκελο /modules. Αντιγράψτε και τα δύο αυτά αρχεία στον φάκελο captcha και δημιουργήστε ένα αρχείο.
Υποθέτοντας ότι έχουμε διοικητική πρόσβαση στον ιστότοπο, κάντε κλικ στο
Manage
και στη συνέχεια στοExtend
στη γραμμή πλοήγησης. Στη συνέχεια, κάντε κλικ στο κουμπί+ Install new module
και θα μεταφερθούμε στη σελίδα εγκατάστασης, όπωςhttp://drupal-site.local/admin/modules/install
. Περιηγηθείτε στο αρχείο Captcha με backdoor και κάντε κλικ στοInstall
.Μόλις η εγκατάσταση ολοκληρωθεί με επιτυχία, περιηγηθείτε στο
/modules/captcha/shell.php
για να εκτελέσετε εντολές.
Backdooring Drupal με συγχρονισμό ρυθμίσεων
Ανάρτηση που μοιράστηκε από Coiffeur0x90
Μέρος 1 (ενεργοποίηση του Media και Media Library)
Στο μενού Extend (/admin/modules), μπορείτε να ενεργοποιήσετε αυτά που φαίνεται να είναι ήδη εγκατεστημένα πρόσθετα. Από προεπιλογή, τα πρόσθετα Media και Media Library δεν φαίνεται να είναι ενεργοποιημένα, οπότε ας τα ενεργοποιήσουμε.
Πριν την ενεργοποίηση:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-4c7c93f136e5cef5e20e7ede64b22028ca72648a%252Fimage%2520%284%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=aa5ec01a&sv=1)
Μετά την ενεργοποίηση:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-1ec78aebd66cd90a926937e9afef92bee1bbd873%252Fimage%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=686a2a31&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-176e28e260ced93a729f3ca6f493c54de2ca3325%252Fimage%2520%282%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=493f0480&sv=1)
Μέρος 2 (εκμετάλλευση της δυνατότητας Configuration synchronization)
Θα εκμεταλλευτούμε τη δυνατότητα Configuration synchronization για να εξάγουμε (export) και να ανεβάσουμε (import) τις καταχωρίσεις ρυθμίσεων του Drupal:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Patch system.file.yml
Ας ξεκινήσουμε με την επιδιόρθωση της πρώτης καταχώρισης allow_insecure_uploads
από:
Αρχείο: system.file.yml
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-17acb7d7e32d50321420fc6980081693ff3c2488%252Fimage%2520%283%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=473a7fa1&sv=1)
Για:
Αρχείο: system.file.yml
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-92ceed74582786045e9b3021748efcdf10eaab62%252Fimage%2520%284%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=85f9868f&sv=1)
Διόρθωση field.field.media.document.field_media_document.yml
Στη συνέχεια, διόρθωσε την δεύτερη καταχώρηση file_extensions
από:
Αρχείο: field.field.media.document.field_media_document.yml
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-e7f03abf85835acd9c32e403c7957baddf76124c%252Fimage%2520%285%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=cdc44bf1&sv=1)
Για:
Αρχείο: field.field.media.document.field_media_document.yml
Δεν το χρησιμοποιώ σε αυτή την ανάρτηση, αλλά σημειώνεται ότι είναι δυνατόν να οριστεί η είσοδος
file_directory
με αυθαίρετο τρόπο και ότι είναι ευάλωτη σε επίθεση διαδρομής (path traversal) (έτσι μπορούμε να επιστρέψουμε μέσα στο δέντρο συστήματος αρχείων του Drupal).
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-e5ab74cb813cf4b74bf72e0029bab9303fa0ba0d%252Fimage%2520%286%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2654d7a3&sv=1)
Μέρος 3 (εκμετάλλευση της δυνατότητας Προσθήκη Εγγράφου)
Το τελευταίο βήμα είναι το πιο απλό και χωρίζεται σε δύο υποβήματα. Το πρώτο είναι να ανεβάσουμε ένα αρχείο σε μορφή .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 στη μέση (καθώς το αρχείο είναι αρκετά μεγάλο).
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-511d745288778e33bd8a1eaa02cb3ec9a9484b6b%252Fimage%2520%287%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=325b15d6&sv=1)
Αρχείο: Διορθωμένο LICENSE.txt
Μέρος 3.1 (ανέβασμα αρχείου .htaccess)
Αρχικά, εκμεταλλευόμαστε τη δυνατότητα Προσθήκη Εγγράφου (/media/add/document) για να ανεβάσουμε το αρχείο μας που περιέχει τις οδηγίες Apache (.htaccess).
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-4464dc17125af4ce4ff46ef4c85ba124775fd892%252Fimage%2520%288%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=e869500a&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-a3d5f99f09936ab255513583290236e3edf2fb64%252Fimage%2520%289%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=96366bdf&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-210d7bd3fb7f095bb7e92b210d91e63f12968897%252Fimage%2520%2810%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=7a2382a0&sv=1)
Μέρος 3.2 (ανέβασμα αρχείου LICENSE.txt)
Στη συνέχεια, εκμεταλλευόμαστε ξανά τη δυνατότητα Προσθήκη Εγγράφου (/media/add/document) για να ανεβάσουμε ένα Webshell κρυμμένο μέσα σε ένα αρχείο άδειας.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-277c44d2cad5775066e0429dbda5f22b6f66f554%252Fimage%2520%2811%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=c483dd82&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-fd5fec3d9950b64fd4989eaf686df6f7966029b3%252Fimage%2520%2812%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=212f8d65&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-4c2c4ab67b3633aad28099287e4c1d48dc337689%252Fimage%2520%2813%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4217313&sv=1)
Μέρος 4 (αλληλεπίδραση με το Webshell)
Το τελευταίο μέρος περιλαμβάνει την αλληλεπίδραση με το Webshell.
Όπως φαίνεται στην παρακάτω στιγμιότυπο οθόνης, αν το cookie που αναμένεται από το Webshell μας δεν είναι καθορισμένο, λαμβάνουμε το επόμενο αποτέλεσμα όταν συμβουλευόμαστε το αρχείο μέσω ενός Web browser.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-f5207ab5b112e3b9da915193f7f2e73db318399e%252Fimage%2520%2814%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=bf50d346&sv=1)
Όταν ο επιτιθέμενος ορίσει το cookie, μπορεί να αλληλεπιδράσει με το Webshell και να εκτελέσει οποιαδήποτε εντολή επιθυμεί.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-11fd861cfefe62fd4421623f34499ce77ad1e142%252Fimage%2520%2815%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d87f62a8&sv=1)
Και όπως μπορείτε να δείτε στα αρχεία καταγραφής, φαίνεται ότι έχει ζητηθεί μόνο ένα αρχείο txt.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-5d7f744a6dab44d590135b108e5eb9e3e2f118e9%252Fimage%2520%2816%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=c38a309e&sv=1)
Σας ευχαριστώ που αφιερώσατε χρόνο για να διαβάσετε αυτό το άρθρο, ελπίζω να σας βοηθήσει να αποκτήσετε κάποια shells.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated