HTB BountyHunter. Ломаем сайт на PHP через XXE и пентестим приложение на Python

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

  • Разведка. Сканирование портов
  • Точка входа
  • Точка опоры
  • XXE-инъекция
  • PHP wrappers
  • Локальное повышение привилегий

В этой статье на при­мере прос­той по слож­ности машины BountyHunter с Hack The Box я про­демонс­три­рую экс­плу­ата­цию уяз­вимос­ти XXE, работу с обер­тка­ми в PHP и экс­плу­ата­цию бага в прог­рамме на Python. Это не самые хит­рые уяз­вимос­ти, зато они встре­чают­ся в реаль­ных усло­виях.

warning

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

 

Разведка. Сканирование портов

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

10.10.10.100 bountyhunter.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).

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

На­ходим два откры­тых пор­та: 22 (служ­ба SSH) и 80 (веб‑сер­вер Apache 2.4.41). Начина­ем с веб‑сер­вера.

Справка: брутфорс учеток

Пос­коль­ку в начале про­хож­дения у нас нет учет­ных дан­ных, нет и смыс­ла изу­чать служ­бы, которые всег­да тре­буют авто­риза­ции (нап­ример, SSH). Единс­твен­ное, что мы можем делать здесь, — это переби­рать пароли брут­форсом, но у машин с HTB поч­ти всег­да есть дру­гое про­хож­дение. В жиз­ни таких вари­антов может не быть, к тому же есть шан­сы подоб­рать пароль или получить его при помощи соци­аль­ной инже­нерии.

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

Кноп­ка ока­залась нерабо­чей, как и пер­вые две ссыл­ки, но зато ссыл­ка Portal при­водит нас на стра­ницу portal.php с тек­стом «Portal under development. Go here to test the bounty tracker» и еще одной ссыл­кой. При перехо­де по ней нас встре­тит фор­ма вво­да «Bounty Report System — Beta».

 

Точка входа

От­пра­вив тес­товые дан­ные, мы получим сооб­щение, что если база дан­ных готова, то наши дан­ные будут в нее добав­лены.

Фор­ма Bounty Report System

Пер­вым делом я хотел тес­тировать SQL-инъ­екцию в зап­росе Insert, но все же взгля­нул на весь путь наших зап­росов через Burp. Все зап­росы мож­но уви­деть в Burp History.

Вклад­ка Burp History

Что бро­силось в гла­за — я запол­нял четыре парамет­ра, а отправ­ляет­ся один, при­чем в кодиров­ке Base64. Бла­го в Burp Pro сей­час есть пла­гин Inspector, который авто­мати­чес­ки раз­бира­ет и сни­мает извес­тные кодиров­ки.

Burp Inspector

Имен­но Inspector зас­тавил меня перей­ти с тес­тирова­ния SQL-инъ­екции на поиск XXE. А все потому, что парамет­ры отправ­ляют­ся в фор­мате XML.

 

Точка опоры

 

XXE-инъекция

XML eXternal Entity (XXE) инъ­екция — это уяз­вимость в сер­висах, которые под­держи­вают про­токо­лы SOAP и XML-RPC и при­нима­ют вход­ные дан­ные в виде XML-докумен­та. Стан­дарт XML под­держи­вает вклю­чение сек­ции DTD, а сек­ции эти, в свою оче­редь, могут под­клю­чать к докумен­ту допол­нитель­ные ком­понен­ты, так называ­емые внеш­ние сущ­ности.

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

Ответить

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