Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2023-27216 — Newbie's approach to firmware hacking | Kitploit
Инструменты/GitHubGitHub/hoangrealer/cve-2023-27216
Embedded Systems SecurityIoT SecurityVulnerability AnalysisReverse EngineeringDebuggersHardware HackingLearning & EducationFirmware AnalysisBinary Exploitation
GitHubhoangrealer/cve-2023-27216

CVE-2023-27216

Newbie's approach to firmware hacking

32 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

CVE-2023-27216 - Маршрутизатор DLink

Этот документ — мой личный опыт как новичка в реверс-инжиниринге и эксплуатации прошивок. Прошивка где??

Область

Для демонстрации мы проанализируем и воспроизведем CVE-2023-27216.

  • Номер CVE: CVE-2023-27216
  • Описание уязвимости: Проблема, обнаруженная в D-Link DSL-3782 версии 1.03, позволяет удаленным аутентифицированным пользователям выполнять произвольный код с правами root через страницу настроек сети.
  • Модель оборудования: D-Link DSL-3782
  • Версия прошивки: DSL-3782_A1_EU_1.01
  • Официальный сайт производителя: http://www.dlink.com.cn/
  • Адрес прошивки: https://media.dlink.eu/support/products/dsl/dsl-3782/driver_software/dsl-3782_a1_eu_1.01_07282016.zip

Задачи

Для эксплуатации прошивок необходимо выполнить следующие шаги:

  • Получить прошивки. Есть два способа: извлечь их напрямую из оборудования (камеры, маршрутизатора, принтера и т.д.) или загрузить с сайта производителя. Это будет рассмотрено в другом документе.
  • Проанализировать прошивку и найти уязвимости
  • Эмулировать прошивку.
  • Собрать gdbserver статически для отладки.

Анализ прошивки

Обычно бинарный файл прошивки содержит загрузчик (uBoot), файл ядра, заголовок ядра для загрузчика (uImage), сжатую файловую систему (как правило, в формате SquashFS), таблицу CRC/MD5 (для проверки целостности файла) и другие вспомогательные файлы.

Сначала найдите способ анализа прошивки, проведите небольшое исследование, нашел несколько ресурсов:

  • Binwalk для анализа и извлечения прошивки
  • Как эмулировать: https://boschko.ca/qemu-emulating-firmware/ Проверка сигнатуры Binwalk

Извлечение важных файлов

Извлечение прошивки с помощью binwalk: binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin Извлечение Binwalk

Получена извлеченная папка squashfs-root и несколько странных файлов. Извлеченные файлы

Бонус: Если вы не видите папку squashfs-root, используйте unsquashfs на любых файлах .squashfs, которые вы видите. Они как zip-файлы 😅.

Анализ работы прошивки

Проверьте архитектуру прошивки и порядок байтов (endianness). Это можно сделать, проверив некоторые бинарные файлы, извлеченные из прошивки. Проверьте архитектуру и прошивку: file <binary> Архитектура прошивки

Здесь мы почти можем подтвердить, что прошивка работает на архитектуре MIPS 32-bit MSB. Причина «почти» в том, что некоторые прошивки могут работать на другой архитектуре с MIPS Compatible, такой как Lexra.

Проверяем папку squashfs-root и находим несколько интересных файлов:

  • usr/etc/init.d/rcS => Это скрипт, который выполняется при загрузке прошивки
  • usr/etc/passwd => Это файл, содержащий информацию о пользователях
  • userfs/romfile.cfg => Там есть учетные данные admin:admin

Проверяем файл rcS и находим интересный код:

root@kitploit:~
echo "admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh" > /usr/etc/passwd
  • Этот код используется для записи информации о пользователе в файл passwd
  • Запускает веб-сервер под названием boa server. Boa — это древний веб-сервер, в основном использовавшийся во встраиваемых устройствах, таких как маршрутизаторы, в 2000-х годах. Однако разработка boa server была прекращена еще в 2005 году! Несмотря на то, что сервер Boa мертв уже почти 20 лет, он живет и по сей день благодаря нашему вендору. Загрузка Boa

Полноценная эмуляция прошивки

Рекомендую использовать ОС на основе Debian для процесса эмуляции, например Ubuntu или Kali. Существует еще одна ОС, ориентированная на взлом прошивок, под названием AttifyOS. В этом документе я использовал Kali Linux. Начнем с процесса эмуляции, для этого есть 2 инструмента:

  • QEMU => Не изобретайте велосипед 🙏 🛐
  • FAT- Firmware-analysis-toolkit => Он работает, вы можете прочитать исходный код, чтобы узнать, что он делает.

Придерживайся этого

Давайте рассмотрим, как использовать FAT для полной эмуляции прошивки. Сначала клонируем репозиторий с github на вашу машину Kali. И проходим процесс настройки. Также нужно изменить файл fat.config, иначе он не будет работать.

root@kitploit:~
git clone https://github.com/attify/firmware-analysis-toolkit.git

cd firmware-analysis-toolkit

./setup.sh

vi fat.config # Modify to your sudo password.

Затем копируем бинарный файл прошивки (тот, который мы скачали с сайта производителя) в папку FAT на нашей машине Kali и запускаем его.

root@kitploit:~
./fat.py DSL-3782_A1_EU_1.01_07282016.bin

Примечание: В процессе настройки FAT могут возникать ошибки. Может появиться сообщение об отсутствии libmagic. Ошибка запуска FAT

Просто выполните

root@kitploit:~
pip unistall python-magic
pip install python-magic

Это должно исправить проблему, затем снова запускаем команду сборки. Теперь всё должно работать отлично. FAT работает отлично

Нажмите Enter для запуска. Процесс эмуляции должен работать хорошо, и вы сможете перейти по адресу http://192.168.1.1 (на машине Kali), чтобы проверить, работает ли он. Главная страница маршрутизатора

Вы также можете войти в консоль, если у вас есть учетные данные. Здесь admin:admin. Вход в консоль

Если вы решите выключить эмулированную прошивку, просто нажмите Ctrl+A X. Когда потребуется запустить снова, не запускайте fat.py снова, так как прошивка уже собрана в образ. Вам нужно только запустить уже сгенерированный скрипт.

root@kitploit:~
cd firmadyne/scratch/<Image-ID>
./run.sh

Перезапуск образа

Отладчик

Соберите gdbserver для целей отладки. Есть много способов собрать gdbserver. Вы также можете скачать статически собранный сервер. Есть репозиторий, в котором хранятся некоторые статические сборки. Однако я предпочитаю собирать gdbserver самостоятельно, так как те, что в репозитории github, довольно старые и могут иметь проблемы совместимости.

Обратитесь к этой записи в блоге для справки: https://sheran.sg/blog/cross-compile-gdb-for-mips/. Блог был опубликован 30 июля 2024 года, как раз перед этим проектом, так что всё работает отлично. Примечание: В блоге сборка для MIPS x32 LSB, но нам нужен MIPS x32 MSB. Нужно изменить mipsel-linux-gnu на mips-linux-gnu.

Сборка

Нам нужно установить цепочку инструментов для MIPS. К счастью, в пакетах Debian она уже есть.

root@kitploit:~
**apt update && apt upgrade -y
apt install -y build-essential m4 gcc-mips-linux-gnu g++-mips-linux-gnu**

Чтобы собрать gdbserver для MIPS, нужно собрать и установить несколько пакетов. Вот откуда я беру исходники.

  1. gdb 15.1 - https://sourceware.org/pub/gdb/releases/gdb-15.1.tar.xz
  2. GNU GMP lib v6.3.0 - https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz
  3. GNU MPFR lib v4.2.1 - https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.xz

Получение исходников

root@kitploit:~
wget https://sourceware.org/pub/gdb/releases/gdb-15.1.tar.xz
wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz
wget https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.xz

Сборка библиотек с помощью toolchain Крайне важно иметь права root при сборке этих библиотек. Сначала нужно собрать GMP, так как он требуется для сборки MPFR.

root@kitploit:~
tar xvf gmp-6.3.0.tar.xz && cd gmp-6.3.0
./configure --host=mips-linux-gnu
make -j$((`nproc`+1))
make install
cd ..

Затем собираем MPFR:

root@kitploit:~
tar xvf mpfr-4.2.1.tar.xz && cd mpfr-4.2.1
./configure --host=mipsel-linux-gnu --with-gmp-build=<YOUR-FOLDER>/gmp-6.3.0
make -j$((`nproc`+1))
make install
cd ..

Теперь мы можем наконец собрать gdbserver:

root@kitploit:~
tar xvf gdb-15.1.tar.xz && cd gdb-15.1
./configure --host=mipsel-linux-gnu --with-gmp-lib=/usr/local/lib --with-mpfr-lib=/usr/local/lib --with-gmp-include=<YOUR-FOLDER>/gmp-6.3.0 --with-mpfr-include=<YOUR-FOLDER>/mpfr-4.2.1/src
make -j$((`nproc`+1)) LDFLAGS=-static

Собранный бинарный файл gdbserver должен находиться в папке gdb-15.1/gdbserver.

Отправка gdbserver в образ прошивки

Эмулированная прошивка не имеет wget, nc, curl, /dev/tcp, ... Мы не можем запустить Python HTTP-сервер для передачи файлов. Также нет ssh. Однако мы всё равно можем поместить наш gdbserver в эмулированную машину, смонтировав образ.

  • sudo ./scripts/mount.sh 1
  • Скопируйте статически собранный gdbserver в любое место смонтированной папки.
  • sudo ./scripts/umount.sh 1
  • Перезагрузите qemu (выполните ./run.sh еще раз для уверенности).

Отправка gdbserver в образ

Тестирование gdbserver

Проброс портов

Теперь вы можете выполнять отладку и взлом внутри машины Kali. Однако мы можем пойти дальше и выполнить проброс портов эмулированной машины на хост-машину (Windows или Mac).

Проверка нашей сети

Давайте сначала проверим сеть с помощью ifconfig. ifconfig

Результат показывает, что есть два интерфейса: eth0 и tap1_0. Насколько нам известно, eth0 — это интерфейс общей сети с хостом, а tap1_0 — интерфейс эмулированной машины с прошивкой.

Для более простого понимания: сеть eth0 подобна публичной сети, через которую мы можем получить доступ к машине Kali с хост-машины. tap1_0 — это частная сеть, доступ к которой возможен только с машины Kali. Нам нужно перенаправить соединение с eth0 на порт 192.168.1.1:80 на интерфейсе tap1_0.

Разрешение проброса портов

Есть много инструментов, которые могут нам в этом помочь. Однако iptables, похоже, работает лучше всего, если, конечно, вы знаете, как его настроить.

Сначала нужно разрешить проброс портов. Выполните эту команду:

root@kitploit:~
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Это действует только на одну сессию. Если вы хотите применить это постоянно, измените содержимое /etc/sysctl.conf.

root@kitploit:~
net.ipv4.ip_forward=1 # Find this line, uncomment it.

Сохраните и закройте файл, когда закончите.

Затем примените настройки из этого файла. Выполните следующую команду:

root@kitploit:~
sudo sysctl -p
sudo sysctl --system

Проброс портов с помощью iptables

Обычно мы можем выполнить кучу команд iptables. Но это будет слишком утомительно 😵‍💫. Мы можем установить инструмент iptables-persistent. Он позволяет записать конфигурационный файл, загрузить его в файл или извлечь цепочки в файл. Всё делается быстро.

root@kitploit:~
apt install iptables-persistent

Файл конфигурации, который мы хотим изменить, — /etc/iptables/rules.v4. Меняем содержимое файла на приведенное ниже.

root@kitploit:~
*filter
:INPUT ACCEPT [37:22880]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [35:2330]
# Forward HTTP Port
-A FORWARD -i eth0 -o tap1_0 -p tcp --dport 80 -d 192.168.1.1 -j ACCEPT
-A FORWARD -i tap1_0 -o eth0 -p tcp --sport 80 -s 192.168.1.1 -j ACCEPT
# Forward Debugger port
-A FORWARD -i eth0 -o tap1_0 -p tcp --dport 31337 -d 192.168.1.1 -j ACCEPT
-A FORWARD -i tap1_0 -o eth0 -p tcp --sport 31337 -s 192.168.1.1 -j ACCEPT

COMMIT
# Completed on Wed Aug  7 09:32:11 2024
# Generated by iptables-save v1.8.10 (nf_tables) on Wed Aug  7 09:32:11 2024
*nat
:PREROUTING ACCEPT [60:5405]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [1096:50947]
-A PREROUTING -i eth0 -p tcp -j DNAT --to-destination 192.168.1.1
-A POSTROUTING -o tap1_0 -p tcp -d 192.168.1.1 -j MASQUERADE

Внимание: Разрешение всех портов порождает кучу проблем с безопасностью. Рекомендуется DROP (заблокировать) все порты, а затем FORWARD (перенаправить) только некоторые по вашему усмотрению.

Сохраните и обновите цепочку iptables.

root@kitploit:~
service netfilter-persistent reload

Теперь вы можете получить доступ к этому из-за пределов хоста. Доступ извне хоста

Уязвимости

Несколько конечных точек для эксплуатации. Две из них находятся внутри бинарного файла cfg_manager. Я продемонстрирую только одну из них, другую предлагаю вам разобрать самостоятельно.

Загрузите бинарный файл в ваш любимый декомпилятор, проверьте все команды system, вы можете увидеть это. Команда запускает файл с именем /etc/lanconfig.sh. Команда system запускает файл

Проверяя другие места, которые могут использовать этот файл, я нашел место, где мы можем записать файл. Запись файла

Объяснение того, что он делает:

  • Функция открывает /etc/lanconfig.sh
  • Вызывает функцию mxmlElementGetAttr, которая, как я предполагаю, находит атрибут из объекта, возможно, прямо или косвенно из HTTP-запроса, возможно, XML.
  • Использует sprintf для создания строки из атрибутов, полученных от mxmlElementGetAttr.
  • Затем использует fputs для записи в файл.

Сразу же я поискал что-либо в веб-папке boaroot, связанное с IP, netmask и нашел это. Документация по веб-серверу boa крайне ограничена, я могу только предположить, что он помещает POST-параметр lan_ip1 в параметры IP в XML, который вызывается из бинарного файла. Точка входа для ошибки

В интерфейсе мы можем найти запрос, который вызывает ошибку. Он находится в Settings > Network (Настройки > Сеть). Расположение настроек сети Интерфейс настроек сети

Перехватите запрос с помощью Burpsuite, когда нажимаем Save (Сохранить). Перехват Burp и взлом

Полезная нагрузка 192.168.1.1;utelnetd -p 8090 -l /bin/sh; — это reverse shell. Мы можем подключиться к нему. Обратная оболочка

Бонус

Аналогичный, возможно, лучше, чем FAT, не пробовал -> FirmAE.

Binary Ninja стоит всего 74$ при наличии студенческого статуса. Лицензию можно передавать кому угодно.

Другие ошибки, связанные с CVE: CVE

Это также может привести к RCE, я оставлю это вам для самостоятельного выполнения. Память по адресу data_4c0160 может быть внедрена куда-нибудь 🫡. CVE2

Спасибо

Ссылки

  • https://bbs.kanxue.com/thread-278413.htm
  • https://secnigma.wordpress.com/2022/01/18/a-beginners-guide-into-router-hacking-and-firmware-emulation/
  • https://www.ringzerolabs.com/2018/03/the-wonderful-world-of-mips.html
  • https://sheran.sg/blog/cross-compile-gdb-for-mips/
  • https://boschko.ca/qemu-emulating-firmware/
  • https://wiki.bi0s.in/hardware/firmware/firmware-re/
  • https://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway-with-iptables
  • https://www.youtube.com/watch?v=7W5YC8kenZE
Скачать инструмент