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

Для демонстрации мы проанализируем и воспроизведем CVE-2023-27216.
Для эксплуатации прошивок необходимо выполнить следующие шаги:
gdbserver статически для отладки.Обычно бинарный файл прошивки содержит загрузчик (uBoot), файл ядра, заголовок ядра для загрузчика (uImage), сжатую файловую систему (как правило, в формате SquashFS), таблицу CRC/MD5 (для проверки целостности файла) и другие вспомогательные файлы.
Сначала найдите способ анализа прошивки, проведите небольшое исследование, нашел несколько ресурсов:

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

Получена извлеченная папка 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 и находим интересный код:
echo "admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh" > /usr/etc/passwd
passwdBoa — это древний веб-сервер, в основном использовавшийся во встраиваемых устройствах, таких как маршрутизаторы, в 2000-х годах. Однако разработка boa server была прекращена еще в 2005 году! Несмотря на то, что сервер Boa мертв уже почти 20 лет, он живет и по сей день благодаря нашему вендору.

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

Давайте рассмотрим, как использовать FAT для полной эмуляции прошивки. Сначала клонируем репозиторий с github на вашу машину Kali. И проходим процесс настройки. Также нужно изменить файл fat.config, иначе он не будет работать.
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 и запускаем его.
./fat.py DSL-3782_A1_EU_1.01_07282016.bin
Примечание: В процессе настройки FAT могут возникать ошибки. Может появиться сообщение об отсутствии libmagic.

Просто выполните
pip unistall python-magic
pip install python-magic
Это должно исправить проблему, затем снова запускаем команду сборки. Теперь всё должно работать отлично.

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

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

Если вы решите выключить эмулированную прошивку, просто нажмите Ctrl+A X. Когда потребуется запустить снова, не запускайте fat.py снова, так как прошивка уже собрана в образ. Вам нужно только запустить уже сгенерированный скрипт.
cd firmadyne/scratch/<Image-ID>
./run.sh

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