Apache
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)
Έλεγχος ποιες επεκτάσεις εκτελεί ο διακομιστής Apache. Για να τις αναζητήσετε μπορείτε να εκτελέσετε:
Επίσης, μερικά μέρη όπου μπορείτε να βρείτε αυτή τη διαμόρφωση είναι:
Αυτοί οι τύποι επιθέσεων έχουν εισαχθεί και τεκμηριωθεί από την Orange σε αυτή την ανάρτηση του blog και η παρακάτω είναι μια περίληψη. Η επίθεση "σύγχυσης" βασικά εκμεταλλεύεται το πώς οι δεκάδες μονάδες που συνεργάζονται για να δημιουργήσουν έναν Apache δεν λειτουργούν τέλεια συγχρονισμένες και κάνοντάς τες να τροποποιήσουν κάποια απροσδόκητα δεδομένα μπορεί να προκαλέσει μια ευπάθεια σε μια επόμενη μονάδα.
Η mod_rewrite
θα κόψει το περιεχόμενο του r->filename
μετά τον χαρακτήρα ?
(modules/mappers/mod_rewrite.c#L4141). Αυτό δεν είναι εντελώς λάθος καθώς οι περισσότερες μονάδες θα θεωρήσουν το r->filename
ως URL. Αλλά σε άλλες περιπτώσεις αυτό θα θεωρηθεί ως διαδρομή αρχείου, κάτι που θα προκαλέσει πρόβλημα.
Path Truncation
Είναι δυνατόν να εκμεταλλευτεί κανείς το mod_rewrite
όπως στο παρακάτω παράδειγμα κανόνα για να αποκτήσει πρόσβαση σε άλλα αρχεία μέσα στο σύστημα αρχείων, αφαιρώντας το τελευταίο μέρος της αναμενόμενης διαδρομής προσθέτοντας απλά ένα ?
:
Παραπλανητική Ανάθεση RewriteFlag
Στον παρακάτω κανόνα επαναγραφής, όσο η διεύθυνση URL τελειώνει σε .php, θα αντιμετωπίζεται και θα εκτελείται ως php. Επομένως, είναι δυνατόν να σταλεί μια διεύθυνση URL που τελειώνει σε .php μετά τον χαρακτήρα ?
ενώ φορτώνεται στον δρόμο ένας διαφορετικός τύπος αρχείου (όπως μια εικόνα) με κακόβουλο php κώδικα μέσα σε αυτό:
Είναι δυνατόν να αποκτήσετε πρόσβαση σε αρχεία που ο χρήστης δεν θα έπρεπε να έχει πρόσβαση, ακόμη και αν η πρόσβαση θα έπρεπε να απορριφθεί με ρυθμίσεις όπως:
Αυτό συμβαίνει επειδή από προεπιλογή το PHP-FPM θα λαμβάνει διευθύνσεις URL που τελειώνουν σε .php
, όπως http://server/admin.php%3Fooo.php
και επειδή το PHP-FPM θα αφαιρεί οτιδήποτε μετά τον χαρακτήρα ?
, η προηγούμενη διεύθυνση URL θα επιτρέπει τη φόρτωση του /admin.php
ακόμη και αν ο προηγούμενος κανόνας το απαγόρευε.
Ένα διασκεδαστικό γεγονός σχετικά με το Apache είναι ότι η προηγούμενη ανακατεύθυνση θα προσπαθήσει να αποκτήσει πρόσβαση στο αρχείο τόσο από το documentRoot όσο και από το root. Έτσι, ένα αίτημα προς https://server/abouth.html
θα ελέγξει για το αρχείο στο /var/www/html/about.html
και /about.html
στο σύστημα αρχείων. Αυτό μπορεί βασικά να καταχραστεί για να αποκτήσει πρόσβαση σε αρχεία στο σύστημα αρχείων.
Αποκάλυψη Κώδικα Πηγής CGI
Απλά προσθέτοντας ένα %3F στο τέλος είναι αρκετό για να διαρρεύσει ο κώδικας πηγής ενός cgi module:
Αποκάλυψη Κώδικα PHP
Αν ένας διακομιστής έχει διαφορετικά domains με ένα από αυτά να είναι στατικό domain, αυτό μπορεί να εκμεταλλευτεί για να διασχίσει το σύστημα αρχείων και να διαρρεύσει τον κώδικα php:
Το κύριο πρόβλημα με την προηγούμενη επίθεση είναι ότι από προεπιλογή οι περισσότερες προσβάσεις στο σύστημα αρχείων θα απορρίπτονται όπως στην προκαθορισμένη ρύθμιση του Apache HTTP Server:
Ωστόσο, τα λειτουργικά συστήματα Debian/Ubuntu επιτρέπουν από προεπιλογή το /usr/share
:
Επομένως, θα ήταν δυνατό να καταχραστούν αρχεία που βρίσκονται μέσα στο /usr/share
σε αυτές τις διανομές.
Τοπική Συσκευή για Αποκάλυψη Πληροφοριών
Apache HTTP Server με websocketd μπορεί να εκθέσει το σενάριο dump-env.php στο /usr/share/doc/websocketd/examples/php/, το οποίο μπορεί να αποκαλύψει ευαίσθητες μεταβλητές περιβάλλοντος.
Διακομιστές με Nginx ή Jetty μπορεί να εκθέσουν ευαίσθητες πληροφορίες εφαρμογών ιστού (π.χ., web.xml) μέσω των προεπιλεγμένων ριζών ιστού τους που βρίσκονται κάτω από το /usr/share:
/usr/share/nginx/html/
/usr/share/jetty9/etc/
/usr/share/jetty9/webapps/
Τοπική Συσκευή για XSS
Σε Ubuntu Desktop με LibreOffice εγκατεστημένο, η εκμετάλλευση της δυνατότητας αλλαγής γλώσσας των αρχείων βοήθειας μπορεί να οδηγήσει σε Cross-Site Scripting (XSS). Η χειραγώγηση της διεύθυνσης URL στο /usr/share/libreoffice/help/help.html μπορεί να ανακατευθύνει σε κακόβουλες σελίδες ή παλαιότερες εκδόσεις μέσω unsafe RewriteRule.
Τοπική Συσκευή για LFI
Εάν είναι εγκατεστημένα PHP ή ορισμένα πακέτα front-end όπως JpGraph ή jQuery-jFeed, τα αρχεία τους μπορούν να εκμεταλλευτούν για να διαβάσουν ευαίσθητα αρχεία όπως /etc/passwd:
/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php
/usr/share/javascript/jquery-jfeed/proxy.php
/usr/share/moodle/mod/assignment/type/wims/getcsv.php
Τοπική Συσκευή για SSRF
Χρησιμοποιώντας το MagpieRSS's magpie_debug.php στο /usr/share/php/magpierss/scripts/magpie_debug.php, μπορεί να δημιουργηθεί εύκολα μια ευπάθεια SSRF, παρέχοντας μια πύλη για περαιτέρω εκμεταλλεύσεις.
Τοπική Συσκευή για RCE
Οι ευκαιρίες για Remote Code Execution (RCE) είναι πολλές, με ευάλωτες εγκαταστάσεις όπως μια παρωχημένη PHPUnit ή phpLiteAdmin. Αυτές μπορούν να εκμεταλλευτούν για να εκτελέσουν αυθαίρετο κώδικα, επιδεικνύοντας την εκτενή δυνατότητα χειραγώγησης τοπικών συσκευών.
Είναι επίσης δυνατό να γίνει jailbreak από τους επιτρεπόμενους φακέλους ακολουθώντας τους συμβολικούς συνδέσμους που δημιουργούνται από εγκατεστημένο λογισμικό σε αυτούς τους φακέλους, όπως:
Cacti Log: /usr/share/cacti/site/
-> /var/log/cacti/
Solr Data: /usr/share/solr/data/
-> /var/lib/solr/data
Solr Config: /usr/share/solr/conf/
-> /etc/solr/conf/
MediaWiki Config: /usr/share/mediawiki/config/
-> /var/lib/mediawiki/config/
SimpleSAMLphp Config: /usr/share/simplesamlphp/config/
-> /etc/simplesamlphp/
Επιπλέον, με την καταχρηστική χρήση συμβολικών συνδέσμων ήταν δυνατό να αποκτηθεί RCE στο Redmine.
Αυτή η επίθεση εκμεταλλεύεται την επικάλυψη στη λειτουργικότητα μεταξύ των οδηγιών AddHandler
και AddType
, οι οποίες και οι δύο μπορούν να χρησιμοποιηθούν για να επιτρέψουν την επεξεργασία PHP. Αρχικά, αυτές οι οδηγίες επηρεάζουν διαφορετικά πεδία (r->handler
και r->content_type
αντίστοιχα) στη εσωτερική δομή του διακομιστή. Ωστόσο, λόγω κωδίκων κληρονομιάς, ο Apache χειρίζεται αυτές τις οδηγίες εναλλάξ υπό ορισμένες συνθήκες, μετατρέποντας το r->content_type
σε r->handler
εάν το πρώτο είναι ρυθμισμένο και το δεύτερο δεν είναι.
Επιπλέον, στον Apache HTTP Server (server/config.c#L420
), εάν το r->handler
είναι κενό πριν την εκτέλεση του ap_run_handler()
, ο διακομιστής χρησιμοποιεί το r->content_type
ως handler, καθιστώντας ουσιαστικά το AddType
και το AddHandler
ταυτόσημα σε αποτέλεσμα.
Σε αυτή την ομιλία, παρουσιάστηκε μια ευπάθεια όπου μια λανθασμένη Content-Length
που αποστέλλεται από έναν πελάτη μπορεί να προκαλέσει τον Apache να επιστρέψει λανθασμένα τον κώδικα PHP. Αυτό συνέβη λόγω ενός προβλήματος χειρισμού σφαλμάτων με το ModSecurity και το Apache Portable Runtime (APR), όπου μια διπλή απάντηση οδηγεί στην αντικατάσταση του r->content_type
σε text/html
.
Δεδομένου ότι το ModSecurity δεν χειρίζεται σωστά τις τιμές επιστροφής, θα επιστρέψει τον κώδικα PHP και δεν θα τον ερμηνεύσει.
TODO: Η Orange δεν έχει αποκαλύψει αυτή την ευπάθεια ακόμα
Εάν ένας επιτιθέμενος είναι σε θέση να ελέγξει την κεφαλίδα Content-Type
σε μια απάντηση διακομιστή, θα είναι σε θέση να εκτελέσει αυθαίρετους χειριστές μονάδας. Ωστόσο, μέχρι το σημείο που ο επιτιθέμενος ελέγχει αυτό, η πλειονότητα της διαδικασίας του αιτήματος θα έχει ολοκληρωθεί. Ωστόσο, είναι δυνατό να επανεκκινήσει τη διαδικασία αιτήματος εκμεταλλευόμενος την κεφαλίδα Location
επειδή εάν η returned Status
είναι 200 και η κεφαλίδα Location
ξεκινά με /
, η απάντηση θεωρείται ως Server-Side Redirection και θα πρέπει να επεξεργαστεί.
Σύμφωνα με το RFC 3875 (προδιαγραφή σχετικά με CGI) στην Ενότητα 6.2.2 ορίζει τη συμπεριφορά μιας Τοπικής Αντίστροφης Απόκρισης:
Το CGI σενάριο μπορεί να επιστρέψει μια διαδρομή URI και μια ερώτηση-συμβολοσειρά (‘local-pathquery’) για έναν τοπικό πόρο σε ένα πεδίο κεφαλίδας Location. Αυτό υποδεικνύει στον διακομιστή ότι θα πρέπει να επεξεργαστεί ξανά το αίτημα χρησιμοποιώντας τη διαδρομή που καθορίζεται.
Επομένως, για να εκτελεστεί αυτή η επίθεση απαιτείται μία από τις παρακάτω ευπάθειες:
CRLF Injection στις κεφαλίδες απόκρισης CGI
SSRF με πλήρη έλεγχο των κεφαλίδων απόκρισης
Για παράδειγμα, το /server-status
θα πρέπει να είναι προσβάσιμο μόνο τοπικά:
Είναι δυνατόν να αποκτήσετε πρόσβαση ρυθμίζοντας το Content-Type
σε server-status
και την κεφαλίδα Location να ξεκινά με /
Ανακατεύθυνση στο mod_proxy
για πρόσβαση σε οποιοδήποτε πρωτόκολλο σε οποιοδήποτε URL:
Ωστόσο, η κεφαλίδα X-Forwarded-For
προστίθεται αποτρέποντας την πρόσβαση σε σημεία μεταδεδομένων cloud.
Πρόσβαση στο τοπικό Unix Domain Socket του PHP-FPM για να εκτελέσετε ένα PHP backdoor που βρίσκεται στο /tmp/
:
Η επίσημη PHP Docker εικόνα περιλαμβάνει το PEAR (Pearcmd.php
), ένα εργαλείο διαχείρισης πακέτων PHP από τη γραμμή εντολών, το οποίο μπορεί να καταχραστεί για να αποκτηθεί RCE:
Ελέγξτε Docker PHP LFI Summary, γραμμένο από Phith0n για λεπτομέρειες σχετικά με αυτή την τεχνική.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)