Essa é a porta MIPS que está presente nos dispositivos fabricados, roteadores e gateways domésticos SerComm (Linksys, Netgear, Cisco) usados para atualizações de firmware.
Isso é gerenciado pelo scfgmgr
processo que está atendendo na porta 32764.
Quando acessados via telnet, os dados prefixados por ScMM
ou MMcS
(dependendo da capacidade do sistema) parecem ser retornados.
É um protocolo binário muito simples com cabeçalho (0xC bytes) seguido por uma carga útil.
Estrutura do cabeçalho:
typedef struct scfgmgr_header_s {
unsigned long magic;
int cmd;
unsigned long len;
} scfgmgr_header;
Isso é baseado nas fontes Cisco GPL (por exemplo, wap4410n_v2.0.1.0_gpl.tgz em ftp-eng.cisco.com desativado).
Para informações reais, consulte a descrição de elvanderb e o exemplo de código Python .
Atualmente, é famoso pelo estouro de buffer baseado em heap, que pode fornecer acesso total ao dispositivo ( um backdoor ). Isso foi descoberto por Eloi Vanderbeken no Natal de 2013, mas provavelmente era conhecido por hackers chineses em 2008 ( arquivo cgi ).
Aqui está como funciona.
Estouro de buffer baseado em heap:
Mensagens:
Portanto, o uso de mensagens transbordantes simples pode fornecer muitos detalhes interessantes:
No entanto, isso pode fazer com que a configuração seja redefinida; portanto, não faça isso em casa.
Aqui estão alguns comandos invertidos executados pelo roteador executados através desta porta.
nvram
- Configuração de despejo.
get var
- Obter configuração var
possível estouro de buffer baseado em pilha (se a variável for controlada pelo usuário)
set var
- Definir configuração var
estouro de buffer baseado na pilha, o buffer de saída (tamanho ≈ 0x10000) está na pilha.
commit nvram
- Leia nvram / dev / mtdblock / 3 em / tmp / nvram e verifique o CRC
configure nvram (/ dev / mtdblock / 3) em / tmp / nvram; verifique CRC
Ativar modo bridge (não tenho certeza, não tive tempo de testá-lo)
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&”)
Mostrar velocidade medida da Internet (download / upload)
cmd (sim, é uma concha…)
comandos especiais:
- sair, tchau, sair -> sair ... (vivo = 0)
- cd: altere o diretório (um pouco WTF)
outros comandos:
- estouro de número inteiro no tratamento stdout (?) não explorável, mas ainda ...
- estouro de buffer na saída cmd (mesmo buffer novamente)…
gravar arquivo
- nome do arquivo na carga
- raiz dir = / tmp
- a travessia de diretório pode ser possível (não testada, mas aberta) (sprintf (“/ tmp /% s”, carga útil))…)
versão de retorno
retornar modem roteador ip
restaurar definições originais
- nvram_set ("restore_default", 1)
- nvram_commit
leia / dev / mtdblock / 0 [-4: -2]
- não sei o que é, eu não tive tempo para testá-lo
despejar o nvram no disco (/ tmp / nvram) e confirmar
Fonte: (apresentação de slides) Como a Linksys salvou meu Natal!
Normalmente esse tipo de porta deve ser oficialmente pela IANA .
Isto é o que o unSpawn respondeu no LinuxQuestions em 2007 relacionado a esta porta:
Se for uma porta oficialmente atribuída pela IANA (com um número entre 0 e aproximadamente 30000), seu número deverá corresponder a um serviço em / etc / services ('getent services portnumber'), o arquivo de serviços de um scanner como o Nmap ou um online banco de dados como o ISC da Sans.
Observe que o uso da porta efêmera pode ser configurado localmente usando o /proc/sys/net/ipv4/ip_local_port_range
sysctl
. Um padrão antigo era 1024-5000; para servidores, um valor de 32768-61000 é usado e alguns aplicativos desejam algo como 1025-65535.
Observe também que esses são mapeamentos estáticos de número para serviço e, por exemplo, / etc / services dirá que TCP/22
corresponde ao SSH que não precisa ser o caso em uma situação específica,
Caso contrário, se for uma porta da qual você não sabe qual processo se ligou a ela, se você tiver acesso ao host, poderá interrogá-lo usando netstat -anp
, lsof -w -n -i protocol:portnumber
ou fuser -n protocol portnumber
. Este é o método mais preciso,
Caso contrário, se você não tiver acesso ao host, poderá interrogá-lo, por exemplo, enviando um telnet para ele. Este não é um método preciso e, no caso de um host comprometido, você pode alertar o intruso que está no caso dela.
Veja também: