HTB BigBang. Эксплуатируем баг в glibc для получения RCE

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

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

В этом рай­тапе я покажу, как получить уда­лен­ное выпол­нение кода на сер­вере через уяз­вимость фун­кции iconv в биб­лиоте­ке GNU C Library (glibc). На пути к этой уяз­вимос­ти про­экс­плу­ати­руем LFI в пла­гине BuddyForms для WordPress и про­ана­лизи­руем код мобиль­ного при­ложе­ния.

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

warning

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

 

Разведка

 

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

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

10.10.11.52 bigbang.htb

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

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

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

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

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

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

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

Ска­нер нашел два откры­тых пор­та:

  • 22 — служ­ба OpenSSH 8.9p1;
  • 80 — веб‑сер­вер Apache 2.4.62.

Как обыч­но в таких слу­чаях, начина­ем с изу­чения сай­та на веб‑сер­вере. Отме­тим, что в отче­те ска­ниро­вания показан редирект на адрес http://blog.bigbang.htb. Добав­ляем и этот домен в /etc/hosts.

10.10.11.52 bigbang.htb blog.bigbang.htb

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

Точка входа

Вни­зу стра­ницы находим помет­ку, что сайт пос­тро­ен на WordPress.

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

При тес­тирова­нии сай­тов под управле­нием WordPress луч­ше все­го исполь­зовать ути­литу WPScan. С ее помощью мож­но обна­ружить уяз­вимые вер­сии самого WordPress, тем и пла­гинов, а так­же соб­рать спи­сок име­ющих­ся поль­зовате­лей и переб­рать учет­ные дан­ные (в общем, все, что нуж­но). Перед началом ска­ниро­вания советую зарегис­три­ровать­ся на сай­те WPScan и получить API-токен (это бес­плат­но).

Ча­ще все­го уяз­вимос­ти при­сутс­тву­ют в пла­гинах, поэто­му я зарядил их перебор (опция -e vp) в агрессив­ном режиме (опция --plugins-detection aggressive), исполь­зуя 128 потоков (опция -t).

wpscan --url http://backdoor.htb/ -e ap --plugins-detection aggressive -t 100 wpscan --api-token K.....w --url http://blog.bigbang.htb/ -e vp -t 128

Об­наружен­ные пла­гины

Пот­ратив нес­коль­ко минут, мы получа­ем отчет, в котором отме­чены уяз­вимос­ти в пла­гине BuddyForms. Под­робную информа­цию об уяз­вимос­ти мож­но пос­мотреть на сай­те WPScan.

Ин­форма­ция об уяз­вимос­ти

Там же получим и иден­тифика­тор CVE-2023-26326. Из опи­сания уяз­вимос­ти сле­дует, что пла­гин BuddyForms вер­сии до 2.7.8 уяз­вим к PHAR-десери­али­зации. Неав­торизо­ван­ный поль­зователь может заюзать эту уяз­вимость для получе­ния содер­жимого про­изволь­ных фай­лов.

Пер­вым делом сто­ит про­верить, есть ли для этой CVE готовые экс­пло­иты или свя­зан­ные с ней ресер­чи. Для начала прос­то ищем в Google.

По­иск экс­пло­итов в Google

Под­робный раз­бор уяз­вимос­ти на­шел­ся в бло­ге Tenable TechBlog. Судя по это­му репор­ту, мы дол­жны передать сери­али­зован­ные дан­ные в парамет­ре url на стра­нице /wp-admin/admin-ajax.php. Сери­али­зовать дан­ные мож­но с помощью php_filter_chain_generator. Одна­ко в ито­говом фай­ле дол­жна быть сиг­натура изоб­ражения, ина­че мы получим ошиб­ку.

От­вет сер­вера

До­бавить сиг­натуру GIF89a в ито­говый файл мож­но сле­дующим обра­зом.

python3 php_filter_chain_generator.py --chain GIF89a

Под­готов­ка дан­ных

В кон­це пос­ледова­тель­нос­ти заменим php://temp фай­лом, который мы хотим получить. В качес­тве тес­та будем получать содер­жимое фай­ла /etc/passwd.

От­прав­ляем ито­говую пос­ледова­тель­ность и получа­ем в отве­те путь к яко­бы заг­ружен­ному изоб­ражению.

Экс­плу­ата­ция уяз­вимос­ти

Про­верим файл, ссыл­ку на который нам вер­нул сер­вер, и под­твер­дим наличие уяз­вимос­ти.

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

Точка опоры

Так как уяз­вимость при­сутс­тву­ет, поп­робу­ем рас­кру­тить ее до RCE, в этом нам поможет пост в бло­ге Lexfo. Мы можем поп­робовать про­экс­плу­ати­ровать уяз­вимость CVE-2024-2961 в фун­кции iconv биб­лиоте­ки glibc. Этот баг при­водит к перепол­нению буфера.

Стра­ница из бло­га

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

Ответить

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