Dies ist der MIPS- Port, der in SerComm-Geräten, Routern und Heim-Gateways (Linksys, Netgear, Cisco) vorhanden ist, die für Firmware-Upgrades verwendet werden.
Dies wird von einem scfgmgr
Prozess verwaltet , der Port 32764 überwacht.
Beim Zugriff über Telnet scheinen Daten mit dem Präfix ScMM
oder MMcS
(je nach Endianess des Systems) zurückgegeben zu werden.
Es ist ein sehr einfaches binäres Protokoll mit Header (0xC Bytes) gefolgt von einer Payload.
Header-Struktur:
typedef struct scfgmgr_header_s {
unsigned long magic;
int cmd;
unsigned long len;
} scfgmgr_header;
Dies basiert auf Cisco-GPL-Quellen (z. B. wap4410n_v2.0.1.0_gpl.tgz bei stillgelegtem ftp-eng.cisco.com).
Aktuelle Informationen finden Sie in der Beschreibung von elvanderb und im Python-Beispielcode .
Derzeit ist es berühmt für einen Heap-basierten Pufferüberlauf, der Ihnen vollen Zugriff auf das Gerät ( eine Hintertür ) ermöglicht. Dies wurde von Eloi Vanderbeken in Weihnachten 2013 entdeckt, wurde jedoch wahrscheinlich bereits 2008 von chinesischen Hackern bekannt ( CGI-Datei ).
So funktioniert es.
Heap-basierter Pufferüberlauf:
Mitteilungen:
Die Verwendung einer einfachen überfüllten Nachricht kann also viele interessante Details liefern:
Dies kann jedoch dazu führen, dass die Konfiguration zurückgesetzt wird. Tun Sie dies also nicht zu Hause.
Hier einige umgekehrte Befehle, die der Router über diesen Port ausführt.
nvram
- Speicherauszugskonfiguration.
get var
- Holen Sie sich Konfiguration var
Möglicher stapelbasierter Pufferüberlauf (wenn die Variable vom Benutzer gesteuert wird)
set var
- Konfigurationsvariable einstellen
Stapelbasierter Pufferüberlauf, Ausgabepuffer (Größe ≈ 0x10000) befindet sich auf dem Stapel.
commit nvram
- Lesen Sie nvram / dev / mtdblock / 3 aus / tmp / nvram und überprüfen Sie die CRC
setze nvram (/ dev / mtdblock / 3) aus / tmp / nvram; CRC überprüfen
Setzen Sie den Bridge-Modus auf ON (nicht sicher, ich hatte keine Zeit, ihn zu testen)
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&”)
Gemessene Internetgeschwindigkeit anzeigen (Download / Upload)
cmd (yep, es ist eine Muschel ...)
spezielle Befehle:
- beenden, tschüss, beenden -> beenden ... (lebendig = 0)
- cd: Verzeichnis wechseln (ein bisschen WTF)
andere Befehle:
- Integer-Überlauf im stdout-Handling (?) nicht ausnutzbar, aber dennoch ...
- Pufferüberlauf bei cmd-Ausgabe (wieder derselbe Puffer)…
Datei schreiben
- Dateiname in Nutzdaten
- root dir = / tmp
- Directory Traversal ist möglich (nicht getestet, aber offen (sprintf ("/ tmp /% s", payload)) ...)
Rückgabeversion
Modemrouter-IP zurückgeben
Standardeinstellungen wiederherstellen
- nvram_set ("restore_default", 1)
- nvram_commit
read / dev / mtdblock / 0 [-4: -2]
- Keine Ahnung, was es ist, ich hatte keine Zeit, es zu testen
Sichern Sie nvram auf der Festplatte (/ tmp / nvram) und übernehmen Sie das Commit
Quelle: (Diashow) Wie Linksys mir Weihnachten gerettet hat!
Normalerweise sollte diese Art von Ports offiziell von IANA sein .
Dies ist, was unSpawn bei LinuxQuestions im Jahr 2007 im Zusammenhang mit diesem Port geantwortet hat:
Wenn es sich um einen offiziell von der IANA zugewiesenen Port handelt (mit einer Nummer zwischen 0 und ungefähr 30000), sollte seine Nummer mit einem Dienst in / etc / services ('getent services portnumber'), der Dienstedatei eines Scanners wie Nmap oder eines Online-Dienstes, übereinstimmen Datenbank wie Sans 'ISC.
Beachten Sie, dass die temporäre Portnutzung lokal mit konfiguriert werden kann /proc/sys/net/ipv4/ip_local_port_range
sysctl
. Ein alter Standardwert war 1024-5000, für Server wird ein Wert von 32768-61000 verwendet, und einige Anwendungen möchten einen Wert von 1025-65535.
Beachten Sie auch, dass es sich um statische Zuordnungen von Nummern zu Diensten handelt, und dass beispielsweise / etc / services TCP/22
Übereinstimmungen mit SSH angibt, die in einer bestimmten Situation nicht der Fall sein müssen.
Andernfalls, wenn es sich um einen Port handelt, von dem Sie nicht wissen, welcher Prozess daran gebunden ist, können Sie ihn mit oder abfragen netstat -anp
, wenn Sie Zugriff auf den Host haben . Dies ist die genaueste Methode,lsof -w -n -i protocol:portnumber
fuser -n protocol portnumber
Wenn Sie sonst keinen Zugriff auf den Host haben, können Sie ihn abfragen, indem Sie zum Beispiel telnet'ting. Dies ist keine genaue Methode, und im Falle eines kompromittierten Hosts können Sie den Eindringling benachrichtigen, für den Sie sich entschieden haben.
Siehe auch: