HTB Search. Обходим AMSI в PowerShell Web Access при пентесте машины на Windows

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

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

В этой статье мы будем зах­ватывать сер­вер на Windows: прос­каниру­ем поль­зовате­лей через служ­бу Kerberos, про­ведем ата­ку Kerberoasting, сни­мем защиту с фай­ла Excel, про­пат­чим AMSI при работе с PowerShell Web Access и повысим при­виле­гии через управля­емую учет­ную запись (MSA).

На­ша цель — машина Search с пло­щад­ки Hack The Box. Ее уро­вень слож­ности — hard.

warning

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

 

Разведка

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

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

10.10.11.129 search.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).

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

У нас есть целая куча откры­тых пор­тов:

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

На хос­те работа­ет мно­го служб. Пер­вым делом про­веря­ем SMB и DNS, но они ничего не дают. Оста­ется толь­ко веб. Так как на пор­те 443 исполь­зует­ся про­токол HTTPS, сра­зу обра­тим вни­мание на его сер­тификат. Поле commonName содер­жит домен­ные име­на, для которых дей­стви­телен дан­ный сер­тификат. Nmap показы­вает эти нас­трой­ки в резуль­татах ска­ниро­вания, что поз­воля­ет нам быс­тро опре­делить исполь­зуемое имя. Добав­ляем его в файл /etc/hosts:

10.10.11.129 search.htb research

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

Изу­чая сайт, обра­щаем вни­мание на спи­сок сот­рудни­ков.

Пер­сонал сер­виса

Так как на хос­те работа­ет Kerberos, мы можем про­верить, сущес­тву­ет ли какая‑то учет­ная запись. В этом нам поможет ата­ка ASRep Roasting. Смысл в том, что мы посыла­ем на сер­вер аутен­тифика­ции ано­ним­ный зап­рос для пре­дос­тавле­ния опре­делен­ному поль­зовате­лю дос­тупа к какой‑либо услу­ге. На что сер­вер отве­чает одним из трех дей­ствий:

  • пре­дос­тавля­ет хеш;
  • от­веча­ет, что у это­го поль­зовате­ля не выс­тавлен флаг UAF Dont Require PreAuth;
  • го­ворит, что такого поль­зовате­ля нет в базе Kerberos.

Но спер­ва сос­тавим спи­сок поль­зовате­лей. С помощью сле­дующе­го кода мы можем сос­тавить все воз­можные ком­бинации име­ни поль­зовате­ля:

#!/usr/bin/python3names = ["Keely Lyons", "Dax Santiago", "Sierra Frye", "Kyla Stewart", "Kaiara Spencer", "Dave Simpson", "Ben Thompson", "Chris Stewart"]list = ["Administrator", "Guest"]for name in names: n1, n2 = name.split(' ') list.append(n1) list.append(n1+n2) list.append(n1+"."+n2) list.append(n1+n2[0]) list.append(n1+"."+n2[0]) list.append(n2[0]+n1) list.append(n2[0]+"."+n1) list.append(n2) list.append(n2+n1) list.append(n2+"."+n1) list.append(n2+n1[0]) list.append(n2+"."+n1[0]) list.append(n1[0]+n2) list.append(n1[0]+"."+n2)for n in list: print(n)

Сох­раним спи­сок в файл и выпол­ним про­вер­ку с помощью kerbrute. Для это­го исполь­зуем опцию userenum и ука­жем адрес (--dc), домен (-d) и спи­сок с веро­ятны­ми име­нами учет­ных записей.

kerbrute_linux_amd64 userenum --dc search.htb -d search.htb users.txt

Спи­сок поль­зовате­лей

Все ска­ниро­вание заняло при­мер­но секун­ду, а мы получа­ем три сущес­тву­ющих акка­унта. С помощью скрип­та GetNPUsers.py из пакета impacket при­меня­ем к получен­ным име­нам ASRep Roasting в надеж­де получить зашиф­рован­ный пароль поль­зовате­ля. Но безус­пешно.

GetNPUsers.py search.htb/ -usersfile users.txt

Про­вер­ка ASRep Roasting

Пот­ратив очень мно­го вре­мени на поиск даль­нейше­го пути, я нашел на сай­те фотог­рафию http://search.htb/images/slide_2.jpg каких‑то записей.

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

При уве­личе­нии кар­тинки ста­ло понят­но, что это спи­сок дел, сре­ди которых есть такая строч­ка: «Send password to Hope Sharp».

За­мет­ки поль­зовате­ля

Про­веря­ем это имя и узна­ем, что такой акка­унт в сис­теме есть.

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

Те­перь мы можем про­верить и ука­зан­ный пароль с помощью CrackMapExec.

crackmapexec smb search.htb -u users.txt -p 'IsolationIsKey?'

Password Spraying с помощью CME

И получа­ем пер­вую учет­ку!

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

Ответить

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