Категория > Новости > HTB Intentions. Эксплуатируем сложную SQL-инъекцию для дампа базы данных - «Новости»

HTB Intentions. Эксплуатируем сложную SQL-инъекцию для дампа базы данных - «Новости»


24-10-2023, 16:10. Автор: Ника
Hack The Box слож­ного уров­ня (hard).

warning


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


Читайте также - Основными видами деятельности компании тогда являлась работа с натуральным камнем: гранитом,мрамором. В процессе развития появились новые направления: работа с диким камнем, а также набирающим популярность искусственным камнем - столешницы из гранита цена по доступным ценам.

Разведка


 

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


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


10.10.11.220 intentions.htb

И запус­каем ска­ниро­вание пор­тов.



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


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


На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та:


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.9p1 и 80 — веб‑сер­вер Nginx 1.18.0. Бру­тить SSH на машинах с HTB не при­нято, а на сай­те нас встре­чает фор­ма авто­риза­ции и регис­тра­ции.


Стра­ница авто­риза­ции 

Точка входа


Ре­гис­три­руем нового поль­зовате­ля и авто­ризу­емся на сай­те.


Глав­ная стра­ница авто­ризо­ван­ного поль­зовате­ля

На стра­нице про­филя поль­зовате­ля находим поле, на которое мы можем воз­дей­ство­вать.


Стра­ница про­филя поль­зовате­ля

Заг­лянув в Burp History (а все дей­ствия я рекомен­дую про­водить через Burp), обна­ружим, что исполь­зует­ся API.


Ис­тория зап­росов

В поле изме­нения жан­ра я поп­робовал вста­вить наг­рузку ' -- - для SQL-инъ­екции и в отве­те получил те же дан­ные, толь­ко без про­белов.


Зап­рос на сер­вер
От­вет сер­вера

Сто­ит отме­тить, что наг­рузку мы отправ­ляем к API /api/v1/gallery/user/genres, а про­веря­ем изме­нен­ные дан­ные через API /api/v1/auth/user.


 

Точка опоры


 

Burp Macro


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


Спи­сок пра­вил сес­сий

В открыв­шемся окне в поле Rule action соз­даем новый мак­рос run post request macro — то есть выпол­няемый пос­ле основно­го зап­роса.


Нас­трой­ки пра­вила

Для соз­данно­го мак­роса откры­ваем Editor и выбира­ем зап­рос к API: /api/v1/auth/user. Здесь мы получа­ем текущее зна­чение нас­тро­ек про­филя.


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

Под­твержда­ем — и в окне с нас­трой­ками соз­данно­го пра­вила видим наш мак­рос.


Нас­трой­ки пра­вила

Пе­рехо­дим на вклад­ку Scope и в парамет­ре URL scope выбира­ем Include all URLs, что­бы пра­вило при­меня­лось абсо­лют­но ко всем зап­росам.


Нас­трой­ки пра­вила

Под­твержда­ем уста­нов­ленные парамет­ры и видим соз­данное пра­вило в общем спис­ке пра­вил.


Спи­сок пра­вил сес­сий

Те­перь перено­сим зап­рос к API /api/v1/gallery/user/genres в Burp Intruder. В нас­трой­ках перехо­дим к опции Grep → Extract и ука­зыва­ем инте­ресу­ющее нас поле, что­бы добавить его содер­жимое в общую таб­лицу резуль­татов Intruder.


Burp Intruder — вклад­ка Positions
Burp Intruder — вклад­ка Settings

Так как мы исполь­зуем пра­вило с нес­коль­кими зап­росами, переби­рать нуж­но в один поток.


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

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


Нем­ного поб­родив по сай­ту, замеча­ем, что жанр так­же исполь­зует­ся при прос­мотре галереи. Там выпол­няет­ся вызов API /api/v1/gallery/user/feed.


Зап­рос в Burp History

Мы получа­ем раз­ные изоб­ражения в зависи­мос­ти от уста­нов­ленно­го у нас жан­ра. Этот момент тоже необ­ходимо про­тес­тировать, поэто­му воз­вра­щаем­ся к нашим пра­вилам и изме­няем мак­рос, что­бы он выпол­нял зап­рос к API /api/v1/gallery/user/feed. Для изме­нения выбира­ем Re-record macro и отме­чаем нуж­ный зап­рос.


Нас­трой­ки мак­роса
Macro Recorder

Пос­ле изме­нения мак­роса перево­дим зап­рос в Burp Repeater и отправ­ляем обыч­ную наг­рузку с ком­мента­рием для Boolean-based-инъ­екции test'or 1=1 -- -.


Зап­рос на сер­вер
От­вет сер­вера

В ответ получа­ем ошиб­ку — видимо, из‑за кавыч­ки. Тог­да про­буем ука­зать наг­рузку без кавыч­ки.


Зап­рос на сер­вер
От­вет сер­вера

Зап­рос обра­ботан, но дан­ные никакие не получа­ем. Перехо­дим к перебо­ру наг­рузок.


 

SQL-инъекция


Нас­тра­иваем Burp Intruder в один поток, толь­ко в этот раз ничего извле­кать из отве­та не будем, а прос­то отсорти­руем резуль­тат по раз­меру отве­та.


Burp Intruder — вклад­ка Positions
Ре­зуль­тат ата­ки
Перейти обратно к новости