Это порт MIPS, который присутствует в производимых SerComm маршрутизаторах и устройствах домашних шлюзов (Linksys, Netgear, Cisco), используемых для обновления встроенного программного обеспечения.
Это управляется scfgmgr
процессом, который прослушивает порт 32764.
При доступе через telnet данные с префиксом ScMM
или MMcS
(в зависимости от системного порядка) возвращаются.
Это очень простой двоичный протокол с заголовком (0xC байтов), за которым следует полезная нагрузка.
Структура заголовка:
typedef struct scfgmgr_header_s {
unsigned long magic;
int cmd;
unsigned long len;
} scfgmgr_header;
Это основано на источниках Cisco GPL (например, wap4410n_v2.0.1.0_gpl.tgz на списанном ftp-eng.cisco.com).
Для получения актуальной информации смотрите описание elvanderb и пример кода Python .
В настоящее время он известен переполнением буфера на основе кучи, которое может дать вам полный доступ к устройству ( бэкдор ). Это было обнаружено Элоем Вандербекеном в Рождество 2013 года, однако, вероятно, оно было известно китайским хакерам еще в 2008 году ( файл cgi ).
Вот как это работает.
Переполнение буфера на основе кучи:
Сообщения:
Таким образом, использование простого переполнения сообщения может дать много интересных деталей:
Однако это может привести к сбросу конфигурации, поэтому не делайте этого дома.
Вот несколько обращенных команд, выполняемых маршрутизатором через этот порт.
nvram
- дамп конфигурации.
get var
- Получить конфигурацию вар
возможное переполнение буфера в стеке (если переменная контролируется пользователем)
set var
- установить конфигурацию var
переполнение буфера в стеке, выходной буфер (размер ≈ 0x10000) находится в стеке.
commit nvram
- Прочитайте nvram / dev / mtdblock / 3 из / tmp / nvram и проверьте CRC
установите nvram (/ dev / mtdblock / 3) из / tmp / nvram; проверить CRC
Включите режим моста (не уверен, у меня не было времени проверить его)
nvram_set(“wan_mode”, bridgedonly)
nvram_set(“wan_encap”, 0)
nvram_set(“wan_vpi”, 8)
nvram_set(“wan_vci”, 81)
system(“/usr/bin/killall br2684ctl”)
system(“/usr/bin/killall udhcpd”)
system(“/usr/bin/killall -9 atm_monitor”)
system(“/usr/sbin/rc wan stop >/dev/null 2>&1”)
system(“/usr/sbin/atm_monitor&”)
Показать измеренную скорость интернета (загрузка / выгрузка)
CMD (да, это оболочка ...)
специальные команды:
- выход, пока, выход -> выход ... (живой = 0)
- cd: изменить каталог (немного WTF)
другие команды:
- целочисленное переполнение при обработке stdout (?) не используется, но все же ...
- переполнение буфера на выходе cmd (снова тот же буфер)…
записать файл
- имя файла в полезной нагрузке
- root dir = / tmp
- Обратный путь в каталогах возможен (не проверено, но открыто) (sprintf («/ tmp /% s», полезная нагрузка))…)
возвратная версия
возврат модема роутера ip
- nvram_get ( «lan_ipaddr»)
восстановить настройки по умолчанию
- nvram_set («restore_default», 1)
- nvram_commit
чтение / dev / mtdblock / 0 [-4: -2]
- не знаю, что это, у меня не было времени, чтобы проверить это
выгрузить nvram на диск (/ tmp / nvram) и зафиксировать
Источник: (слайд-шоу) Как Linksys спасла мое Рождество!
Обычно такие порты должны быть официально предоставлены IANA .
Вот что unSpawn ответил на LinuxQuestions в 2007 году относительно этого порта:
Если это официально назначенный IANA порт (с номером от 0 до примерно 30000), то его номер должен соответствовать службе в / etc / services ('номер порта служб getent'), файлу служб сканера, такого как Nmap или онлайн База данных, как Сан-ISC.
Обратите внимание, что эфемерное использование порта может быть настроено локально с помощью /proc/sys/net/ipv4/ip_local_port_range
sysctl
. Старое значение по умолчанию было 1024-5000, для серверов используется значение 32768-61000, а некоторые приложения хотят что-то вроде 1025-65535.
Также обратите внимание, что это статические сопоставления номеров и сервисов, и, например, / etc / services скажет, что TCP/22
соответствует SSH, что не должно иметь место в конкретной ситуации,
Иначе, если это порт, с которым вы не знаете, какой процесс связался с ним, тогда, если у вас есть доступ к хосту, вы можете опросить его, используя netstat -anp
, lsof -w -n -i protocol:portnumber
или fuser -n protocol portnumber
. Это самый точный метод,
В противном случае, если у вас нет доступа к хосту, вы можете опросить его, например, используя telnet'ting для него. Это не точный метод, и в случае скомпрометированного хоста вы можете предупредить злоумышленника о вашем случае.
Смотрите также: