HTB Agile. Ломаем PIN к веб-консоли Flask Werkzeug

Содержание статьи

  • Разведка
  • Сканирование портов
  • Точка входа
  • Точка опоры
  • LFI
  • Flask Werkzeug
  • Продвижение
  • Пользователь corum
  • Пользователь edwards
  • Локальное повышение привилегий

В этом рай­тапе я раз­беру ата­ку на веб‑кон­соль Flask Werkzeug, работу с уда­лен­ным отладчи­ком Chrome и покажу, как экс­плу­ати­ровать нашумев­шую уяз­вимость в sudoedit для чте­ния про­изволь­ных фай­лов в сис­теме.

По­может мне в этом тре­ниро­воч­ная машина Agile с пло­щад­ки Hack The Box. Уро­вень ее слож­ности — сред­ний.

warning

Под­клю­чать­ся к машинам с HTB рекомен­дует­ся толь­ко через VPN. Не делай это­го с компь­юте­ров, где есть важ­ные для тебя дан­ные, так как ты ока­жешь­ся в общей сети с дру­гими учас­тни­ками.

 

Разведка

 

Сканирование портов

До­бав­ляем IP-адрес машины в /etc/hosts:

10.10.11.203 agile.htb

И запус­каем ска­ниро­вание пор­тов.

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

Ска­ниро­вание пор­тов — стан­дар­тный пер­вый шаг при любой ата­ке. Он поз­воля­ет ата­кующе­му узнать, какие служ­бы на хос­те при­нима­ют соеди­нение. На осно­ве этой информа­ции выбира­ется сле­дующий шаг к получе­нию точ­ки вхо­да.

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та:

#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

Ре­зуль­тат работы скрип­та

Ска­нер нашел все­го два откры­тых пор­та: 22 — служ­ба OpenSSH 8.9p1 и 80 — веб‑сер­вер Nginx 1.18.0. Как обыч­но в такой ситу­ации, сра­зу идем смот­реть веб.

Глав­ная стра­ница agile.htb

Нас встре­чает стар­товая стра­ница Nginx, а это зна­чит, что основной сайт рас­положен либо в дру­гом катало­ге, либо на дру­гом домене. Поп­робу­ем его най­ти, для это­го прос­каниру­ем катало­ги с помощью feroxbuster.

Справка: сканирование веба c feroxbuster

Од­но из пер­вых дей­ствий при тес­тирова­нии безопас­ности веб‑при­ложе­ния — это ска­ниро­вание методом перебо­ра катало­гов, что­бы най­ти скры­тую информа­цию и недос­тупные обыч­ным посети­телям фун­кции. Для это­го мож­но исполь­зовать прог­раммы вро­де dirsearch, DIRB или ffuf. Я пред­почитаю feroxbuster.

При запус­ке ука­зыва­ем сле­дующие парамет­ры:

  • -u — URL;
  • -w — сло­варь (я исполь­зую сло­вари из набора SecLists);
  • -t — количес­тво потоков;
  • -d — глу­бина ска­ниро­вания.

feroxbuster -u http://10.10.11.203/ -w directory_2.3_medium_lowercase.txt -d 2 -t 256

Ре­зуль­тат ска­ниро­вания катало­гов

В резуль­тате ска­ниро­вания находим редирект на домен superpass.htb. Добав­ляем его в файл /etc/hosts и про­веря­ем.

10.10.11.203 agile.htb superpass.htb

Глав­ная стра­ница сай­та superpass.htb 

Точка входа

На сай­те есть воз­можность зарегис­три­ровать­ся и авто­ризо­вать­ся. Сде­лаем это, что­бы рас­ширить область тес­тирова­ния.

Фор­ма авто­риза­ции

Те­перь нам дос­тупен онлай­новый сер­вис для хра­нения учет­ных дан­ных.

Стра­ница vault

Нам нуж­но про­тес­тировать мак­сималь­но воз­можное чис­ло фун­кций сер­виса. Соз­даем тес­товую запись и экспор­тиру­ем пароли.

Эк­спорт паролей

Файл ска­чива­ется авто­мати­чес­ки, прос­мотрим весь про­цесс в Burp History.

Burp History

Имя фай­ла для ска­чива­ния переда­ется в парамет­ре fn на стра­нице download. Сто­ит про­верить, мож­но ли выпол­нить обход катало­га и получить дру­гой про­изволь­ный файл.

Со­дер­жимое фай­ла /etc/passwd

По­луча­ем содер­жимое фай­ла /etc/passwd, а это зна­чит, что на сай­те есть уяз­вимость LFI.

 

Точка опоры

 

LFI

Пер­вым делом, ког­да обна­ружи­ваем LFI, нуж­но про­верить все фай­лы, которые могут содер­жать инте­рес­ную информа­цию. На GitHub мож­но най­ти мно­го таких сло­варей, а переби­рать по ним будем с помощью Burp Intruder.

Burp Intruder — вклад­ка Payload positions

В резуль­тате ничего осо­бен­ного не наш­ли, толь­ко из фай­ла /etc/passwd узна­ем о наличии тес­товой вер­сии сай­та на домене test.superpass.htb, а так­же получим перемен­ные окру­жения про­цес­са из фай­ла /proc/self/environ.

Со­дер­жимое фай­ла /etc/hosts

Со­дер­жимое фай­ла /proc/self/environ

Пе­ремен­ные окру­жения рас­кры­ли нам поль­зовате­ля www-data, от име­ни которо­го работа­ет сер­вис. Инте­рес­на и перемен­ная CONFIG_PATH, где ука­зан файл нас­тро­ек /app/config_prod.json. Но при попыт­ке про­читать его получа­ем ошиб­ку Bad Request.

Зап­рос на заг­рузку фай­ла /app/config_prod.json

Иног­да при отоб­ражении оши­бок при­ложе­ние может рас­кры­вать пути к фай­лам, в которых про­изош­ла ошиб­ка. Поэто­му поп­робу­ем ска­чать несущес­тву­ющий файл /etc/qweqweqwe.txt.

Зап­рос на заг­рузку фай­ла /etc/qweqweqwe.txt

При­ложе­ние пре­дос­тавило боль­шой вывод, в котором и при­сутс­тву­ет путь к исполня­емо­му фай­лу сай­та:

/app/app/superpass/views/vault_views.py

Со­дер­жимое фай­ла vault_views.py

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

 

Flask Werkzeug

При регис­тра­ции и авто­риза­ции мож­но добить­ся ошиб­ки Flask, что дает нам воз­можность зап­росить дебаг‑кон­соль Werkzeug. Но проб­лема в том, что она защище­на девятиз­начным PIN-кодом.

Стра­ница ошиб­ки Flask Werkzeug

Кон­соль Werkzeug

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *