HTB Precious. Эксплуатируем простую RCE в приложении на Ruby

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

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

В этом рай­тапе я покажу, как экс­плу­ати­ровать уяз­вимость в при­ложе­нии на Ruby, воз­никшую из‑за неп­роверен­ной десери­али­зации. По дороге для прод­вижения заюзаем баг в pdfkit и поищем учет­ные дан­ные на уда­лен­ном хос­те.

На­ша цель — зах­ват рута на тре­ниро­воч­ной машине Precious с пло­щад­ки Hack The Box. Уро­вень слож­ности — лег­кий.

 

Разведка

 

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

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

10.10.11.189 precious.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.4p1;
  • порт 80 — веб‑сер­вер Nginx 1.18.0.

Про SSH, как всег­да на машинах с HTB, мож­но забыть, пока у нас нет учет­ных дан­ных. Сра­зу откро­ем бра­узер для изу­чения веб‑сай­та.

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

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

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

Нас встре­чает фор­ма кон­верте­ра веб‑стра­ницы в файл PDF. А это потен­циаль­ная точ­ка вхо­да.

 

Точка входа

Пер­вым же делом я поп­робовал про­читать локаль­ный файл /etc/passwd, зап­росив URL file:///etc/passwd. На этот зап­рос сер­вер вер­нул ошиб­ку «You should provide a valid URL!». Сле­дующий этап — поп­робовать получить внут­ренние стра­ницы, обра­щаясь на адрес 127.0.0.1, localhost и дру­гие его вари­анты. На зап­росы такого пла­на получа­ем ошиб­ку «Cannot load remote URL!».

Зна­чит, сер­вер все же дела­ет какой‑то зап­рос. Давай тог­да запус­тим на сво­ем хос­те веб‑сер­вер:

python3 -m http.server 80

Вы­пол­няем зап­рос на него и видим, что в отдель­ной вклад­ке открыл­ся PDF, содер­жащий ответ нашего сер­вера.

Со­дер­жимое сге­нери­рован­ного PDF-фай­ла

Те­перь с помощью exiftool мы можем пос­мотреть, какая прог­рамма была исполь­зована, что­бы сге­нери­ровать PDF.

Ме­тадан­ные ска­чан­ного PDF-фай­ла

Уз­наем не толь­ко наз­вание генера­тора, но и его точ­ную вер­сию: pdfkit v0.8.6. Отлично, зна­чит, мы можем поис­кать готовые экс­пло­иты.

А так как мы зна­ем тех­нологию, сра­зу про­веря­ем пуб­лично дос­тупные экс­пло­иты. Можешь исполь­зовать спе­циаль­ные средс­тва вро­де searchsploit, но куда про­ще поис­кать в Google.

По­иск экс­пло­ита для pdfkit

Ви­дим упо­мина­ние уяз­вимос­ти CVE-2022-25765. Давай раз­бирать­ся.

 

Точка опоры

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

Ответить

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