Эксплуатация уязвимости SSTI с шаб­лониза­тором Spring

Эксплуатация уязвимости SSTI с шаб­лониза­тором Spring

В этой статье, на примере уязвимой машины Hack The Box RedPanda, будем эксплуатировать уязвимость SSTI с шаб­лониза­тором Spring.

Еще по теме: Лучшие гаджеты хакера

Эксплуатация уязвимости SSTI с шаб­лониза­тором Spring

Итак, у нас есть страница с поль­зователь­ским вводом.

Hack The Box RedPanda

Для начала можно поп­робовать различные типы инъ­екций. Для перебора, будем использовать Burp Intruder.

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

После неудачных попыток инъ­екции опе­рато­ров SQL, переходим к поиску уязвимости  SSTI.

Уязвимость SSTI

Server-Side Template Injection (SSTI), или инъ­екция шаб­лонов на сто­роне сер­вера, — это техника ата­ки, при которой хакер внед­ряет в шаб­лон вре­донос­ный код. Шаб­лоны необходимы веб‑раз­работ­чикам, что­бы мож­но было нас­тра­ивать внеш­ний вид сай­та толь­ко в одном мес­те и затем не копиро­вать вруч­ную.

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

Ата­ка зат­рагива­ет момент, ког­да полученная информа­ция объ­еди­няет­ся с шаб­лоном. Хакер фор­миру­ет стро­ку таким обра­зом, что­бы она не прос­то под­ста­вилась в шаб­лон, но была интер­пре­тиро­вана как код. Если это получается, то он добавит свои дирек­тивы, с помощью которых выпол­нит эксфиль­тра­цию дан­ных или даже зах­ват веб‑сер­вера.

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

Ре­зуль­тат ска­ниро­вания
Ре­зуль­тат ска­ниро­вания

И мы видим выпол­нение выраже­ния 7*7 при исполь­зовании шаб­лона *{}, харак­терно­го для Java-фрей­мвор­ка Spring. Что­бы получить уда­лен­ное выпол­нение кода (RCE) через Spring SSTI, исполь­зуем сле­дующую наг­рузку.

SSTI to RCE

Точка опоры

У нас есть RCE, но при попыт­ке выпол­нить некото­рые дей­ствия, к при­меру получить или записать SSH-ключ, мы получа­ем ошиб­ку, что сим­волы филь­тру­ются.

Ошиб­ка при записи SSH-клю­ча
Ошиб­ка при записи SSH-клю­ча

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

Я написал на Python прос­той кодер команд:

От­даем скрип­ту коман­ду id и получа­ем коман­ду curl с наг­рузкой.

Соз­дание наг­рузки
Соз­дание наг­рузки
Ре­зуль­тат выпол­нения коман­ды на сер­вере
Ре­зуль­тат выпол­нения коман­ды на сер­вере

И мы видим вывод коман­ды и поль­зовате­ля, от име­ни которо­го она выпол­няет­ся. Давай поп­робу­ем соз­дать каталог .ssh и записать в него ключ SSH. Одна­ко при под­клю­чении у нас все рав­но зап­рашива­ют пароль.

Под­клю­чение к SSH
Под­клю­чение к SSH

Так получит­ся работать толь­ко через RCE, поэто­му приш­лось прев­ратить наш генера­тор в более‑менее удоб­ный шелл.

Тес­тирова­ние шел­ла
Тес­тирова­ние шел­ла

Мы разобрались с эксплуатацией уязвимости SSTI с шаб­лониза­тором Spring. В следующей статье, в рамках задания Hack The Box RedPanda, будем эксплуатировать уязвимость XXE.

РЕКОМЕНДУЕМ:

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

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