HTB Developer. Ломаем сайт на Django и реверсим приложение на Rust

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

  • Разведка. Сканирование портов
  • Точка входа
  • XLS sheet protect unlock
  • Tab Nabbing
  • Точка опоры
  • Sentry RCE
  • Продвижение
  • Локальное повышение привилегий

В этой статье я покажу, как взла­мыва­ют сай­ты на Django. Кро­ме того, мы сни­мем пароль с фай­ла XLS и при­меним фишин­говую ата­ку Tab Nabbing. Для повыше­ния при­виле­гий раз­берем алго­ритм прог­раммы на Rust. Все это — что­бы прой­ти слож­ную машину Developer с пло­щад­ки Hack The Box.

warning

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

 

Разведка. Сканирование портов

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

10.10.11.103 developer.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, на котором работа­ет SSH, и 80, отве­чающий за веб.

Справка: брутфорс учеток

Пос­коль­ку вна­чале у нас нет учет­ных дан­ных, нет и смыс­ла изу­чать служ­бы, которые всег­да тре­буют авто­риза­ции (нап­ример, SSH). Единс­твен­ное, что мы можем делать здесь, — это переби­рать пароли брут­форсом, но у машин с HTB поч­ти всег­да есть дру­гое про­хож­дение. В жиз­ни таких вари­антов может не быть, к тому же име­ются шан­сы подоб­рать пароль или получить его при помощи соци­аль­ной инже­нерии.

На­чина­ем, конеч­но же, с веба!

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

Нас встре­чает сайт какой‑то CTF-пло­щад­ки. Прос­мотрев его содер­жимое, обна­ружим воз­можность регис­тра­ции и авто­риза­ции, но, что при­меча­тель­но, нет ни одно­го фай­ла на PHP. Воз­можно, это фрей­мворк на Python? Что­бы про­верить догад­ку, прос­каниру­ем скры­тые дирек­тории в кор­невом катало­ге сай­та.

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

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

Я пред­почитаю лег­кий и очень быс­трый ffuf. При запус­ке ука­зыва­ем сле­дующие парамет­ры:

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

Ко­ман­да получа­ется сле­дующая:

ffuf -u http://developer.htb/FUZZ -t 256 -w directory_2.3_medium_lowercase.txt

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

В выводе будет очень мно­го катало­гов, которые воз­вра­щают код 301 — редирект. Если перей­ти по любому из них, то нас встре­тит админка фрей­мвор­ка Django.

Па­нель авто­риза­ции Django

Боль­ше ничего не най­дя, регис­три­руем­ся на пер­вом сай­те.

Глав­ная панель поль­зовате­ля

На самом сай­те лежит по два‑три тас­ка из раз­ных катего­рий, но мой инте­рес прив­лекла стра­ница с нас­трой­ками про­филя поль­зовате­ля. Ска­ниру­ем тек­сто­вые поля, но это не дает резуль­тата. Может, поп­робу­ем сдать любой из тас­ков? Это может открыть что‑то новое. Я решил прос­мотреть задание на форен­зику phished_credentials. Как ска­зано в усло­вии задания, где‑то в фай­ле есть пароль.

 

Точка входа

 

XLS sheet protect unlock

От­кры­ваем файл и видим скры­тый стол­бец E. Раз­дви­нуть стол­бцы не выходит, так как лист докумен­та защищен паролем от изме­нения.

Со­дер­жимое докумен­та phished_credentials.xls

Но такую защиту мож­но лег­ко снять. Откро­ем как архив и най­дем в нем нас­трой­ки для нуж­ного лис­та. Так как тут он толь­ко один, нам нужен файл sheet1.xml.

Со­дер­жимое архи­ва

В этом фай­ле най­дем и уда­лим сле­дующую стро­ку. Это поле sheetProtection.

<sheetProtection algorithmName="SHA-512" hashValue="Y4Ko7kZUKStIxaVGWEtuMeRdnCiN7O3D8qZtKdo/2jP7WE6yzKQXUcSWQ/E0OrqHCzhOBFX+t8Db5Pxaiu+N1g==" saltValue="EoiHQklf0FagPs+iW0OzkA==" spinCount="100000" sheet="1" objects="1" scenarios="1"/>

По­ле sheetProtection

Пе­ресох­ранив файл и открыв документ, обна­ружи­ваем, что защиты боль­ше нет. Раз­дви­гаем стол­бец E и получа­ем флаг для пло­щад­ки.

Флаг для задания

Ос­талось передать его в фор­му на сай­те.

От­прав­ка фла­га

Пос­ле обновле­ния стра­ницы ее вид нем­ного меня­ется, вмес­то кноп­ки сда­чи отве­та появ­ляет­ся кноп­ка отправ­ки решения.

Стра­ница чел­лен­джа

При­чем не через заг­рузку фай­ла, а ука­зыва­ется URL стра­ницы.

Фор­ма заг­рузки решения 

Tab Nabbing

Я открыл локаль­ный веб‑сер­вер Python 3 (коман­да python3 -m http.server 80) и отпра­вил ссыл­ку http://10.10.14.59/writeup.html. В логах веб‑сер­вера видим обра­щение к ука­зан­ной стра­нице. Это мес­то для тес­та!

Ло­ги веб‑сер­вера

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

Ответить

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