HTB Bucket. Взламываем сайт через Amazon S3 и похищаем пароль рута через PDF

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

  • Разведка
  • Сканирование портов
  • Сканирование веб-страниц
  • Точка входа
  • Amazon S3
  • Продвижение
  • Брутфорс пароля
  • Повышение привилегий

Се­год­ня мы прой­дем машину сред­ней слож­ности с пло­щад­ки Hack The Box. По дороге ты научишь­ся получать и соз­давать дан­ные в базе DynamoDB, пос­мотришь на работу с бакета­ми Amazon S3 и научишь­ся получать дан­ные через вло­жение в PDF, исполь­зуя уяз­вимость в кон­верте­ре PDF4ML.

warning

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

 

Разведка

 

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

Пер­вым делом я заношу IP машины (10.10.10.212) в файл /etc/hosts и даю ей более удоб­ный адрес bucket.htb.

За­тем перехо­дим к ска­ниро­ванию пор­тов. Я запус­каю скрипт, который уже не раз опи­сывал, и ска­нирую пор­ты в два про­хода (вто­рой раз — со скрип­тами по най­ден­ным в пер­вый раз пор­там).

#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1

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

По резуль­татам име­ем два откры­тых пор­та: 22-й (служ­ба SSH) и 80-й (веб‑сер­вер Apache). На SSH пока сту­чать­ся рано, пос­коль­ку у нас нет учет­ных дан­ных. Гораз­до пер­спек­тивнее будет изу­чить веб‑сер­вер. Вни­матель­но осмотрим­ся на сай­те, так как, помимо точек вхо­да и раз­ных уяз­вимос­тей, сле­дует собирать и дру­гую важ­ную информа­цию, нап­ример име­на поль­зовате­лей, при­меня­емые тех­нологии и про­чие вещи, которые могут при­годить­ся в даль­нейшем. Сам сайт на пер­вый взгляд кажет­ся прос­тень­ким, и на пер­вой же стра­нице отме­тим домен­ное имя bucket.htb (с которым мы и так уже работа­ем), а так­же акка­унт тех­поддер­жки [email protected].

Глав­ная стра­ница сай­та http://bucket.htb

Заг­лядыва­ем в исходный код стра­ницы и видим при­меча­тель­ную осо­бен­ность — исполь­зованы теги для встав­ки изоб­ражений. Фай­лы с кар­тинка­ми заг­ружа­ются с дру­гого домена — s3.bucket.htb.

Ис­ходный код домаш­ней стра­ницы http://bucket.htb

Зна­чит, на веб‑сер­вере есть вир­туаль­ный хост s3.bucket.htb и, если мы хотим с ним работать, надо добавить и его в файл /etc/hosts. Сра­зу же можем про­верить, что там.

Тес­товый зап­рос по обна­ружен­ному адре­су

Вмес­то HTML с него воз­вра­щает­ся ста­тус выпол­нения, а зна­чит, исполь­зует­ся какая‑то слу­жеб­ная тех­нология (из наз­вания под­домена пока что ста­раем­ся не делать быс­трых выводов).

 

Сканирование веб-страниц

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

  • dir — ска­ниро­вание дирек­торий и фай­лов;
  • -t [] — количес­тво потоков;
  • -u [] — URL-адрес для ска­ниро­вания;
  • -w [] — сло­варь для перебо­ра;
  • --timeout [] — вре­мя ожи­дания отве­та.

gobuster dir -t 128 -u http://s3.bucket.htb -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt --timeout 30s

Най­ден­ные катало­ги на http://s3.bucket.htb/

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

curl http://s3.bucket.htb/health | jq

Пре­обра­зован­ный с помощью jq ответ от http://s3.bucket.htb/health

Об­раща­ясь к катало­гу shell, получим редирект на дру­гой адрес:

http://444af250749d:4566/shell/

Ес­ли открыть его в бра­узе­ре, мож­но уви­деть, что это Amazon S3. Что ж, теперь никаких сом­нений!

Стра­ница, получен­ная при обра­щении к http://s3.bucket.htb/shell 

Точка входа

 

Amazon S3

Amazon Simple Storage Service (или S3) — это сер­вис для хра­нения объ­ектов, полез­ный, ког­да нуж­но лег­ко мас­шта­биру­ющееся хра­нили­ще. Его час­то при­меня­ют, что­бы хра­нить ста­тичес­кую часть сай­тов, ресур­сы мобиль­ных при­ложе­ний, а так­же для хра­нения бэкапов и про­чих подоб­ных нужд. Так­же у Amazon есть своя СУБД клас­са NoSQL, которая хра­нит дан­ные в фор­мате «ключ — зна­чение», она называ­ется DynamoDB.

На­ша цель — получить дос­туп к хра­нимым дан­ным, пос­коль­ку они явно важ­ны для про­хож­дения машины. По S3 есть офи­циаль­ная докумен­тация. Озна­комив­шись с ней, ста­вим набор ути­лит AWS Command Line и нас­тра­иваем дос­туп к хра­нили­щу.

sudo apt install awscli
aws configure

Кон­фигура­ция AWS CLI

Раз­берем­ся с задан­ными парамет­рами.

  • AWS Access Key ID и AWS Secret Access Key — иден­тифика­тор клю­ча дос­тупа и сам сек­ретный ключ дос­тупа. Исполь­зуют­ся для под­писи прог­рам­мных зап­росов, которые мы отправ­ляем в AWS. Соз­дать такой ключ мож­но здесь, но, так как он исполь­зует­ся толь­ко для под­писи зап­росов, я прос­то взял ID и ключ, пред­став­ленные в докумен­тации.
  • Default region name — реги­он AWS, сер­веры которо­го исполь­зовать по умол­чанию. Обыч­но это бли­жай­ший к тебе реги­он, но, пос­коль­ку он может быть любым, я вста­вил зна­чение из докумен­тации.
  • Default output format — фор­мат, в котором будет пре­дос­тавлен резуль­тат зап­роса: JSON, YAML, text, table. Так как с помощью jq удоб­но читать JSON, выбира­ем его.

Те­перь, ког­да заданы основные парамет­ры для работы с AWS, мы можем выпол­нять зап­росы к базе DynamoDB. Как и при работе с любой базой, пер­вым делом прос­мотрим, есть ли дос­тупные таб­лицы. В зап­росе исполь­зуем сле­дующие парамет­ры:

  • dynamodb — ука­зыва­ем в качес­тве служ­бы DynamoDB;
  • list-table — для получе­ния спис­ка таб­лиц;
  • --endpoint-url — URL для дос­тупа к S3;
  • --no-sign-request — не под­писывать зап­рос.

aws dynamodb list-tables --endpoint-url http://s3.bucket.htb/ --no-sign-request | jq

Таб­лицы в базе DynamoDB

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

Ответить

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