HTB Perfection. Обходим фильтр SSTI на примере WEBrick

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

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

Се­год­ня я про­демонс­три­рую, как обой­ти филь­тра­цию поль­зователь­ско­го вво­да при инъ­екции в шаб­лон (SSTI) и в резуль­тате получить воз­можность уда­лен­но выпол­нять код на сер­вере. При повыше­нии при­виле­гий исполь­зуем воз­можнос­ти груп­пы sudo, для чего нам понадо­бит­ся най­ти учет­ные дан­ные.

На­ша цель — получе­ние прав супер­поль­зовате­ля на машине Perfection с учеб­ной пло­щад­ки Hack The Box. Уро­вень задания — лег­кий.

warning

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

 

Разведка

 

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

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

10.10.11.253 perfection.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 — служ­ба OpenSSH 8.9p1;
  • 80 — веб‑сер­вер Nginx.

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

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

Точка входа

На сай­те находим помет­ку Powered by, из которой час­то мож­но узнать, какой исполь­зует­ся дви­жок. В нашем слу­чае это WEBrick 1.7.0.

Powered by

На стра­нице /weighted-grade находим нес­коль­ко полей вво­да и веб‑фор­му.

Со­дер­жимое стра­ницы weighted-grade

На стра­нице ска­зано, что нуж­но запол­нить фор­му, при этом мы можем исполь­зовать зна­чения N/A для Category и ноль для Grade и Weight.

За­пол­ненная веб‑фор­ма

Пос­ле отправ­ки дан­ных на сер­вер все вве­ден­ные зна­чения отоб­ража­ются на стра­нице.

Со­дер­жимое стра­ницы

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

Без тру­да узна­ём, что WEBrick написан на Ruby, и про­буем отпра­вить пей­лоад, исполь­зующий осо­бен­ности это­го язы­ка: <%= 7*7 %>.

Веб‑фор­ма с дан­ными

Со­дер­жимое стра­ницы

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

 

Точка опоры

Поп­робу­ем переб­рать раз­ные сим­волы и пос­ледова­тель­нос­ти, это даст нам понима­ние того, на какие из них будет сра­баты­вать филь­тр, а какие помогут его обой­ти. Начина­ем со всех воз­можных сим­волов в кодиров­ке URLEncode.

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

Ответить

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