Script zum Auslesen der VoIP-Passworte.
Hoi,
siehe Anhänge. Meine ersten Prototypen eines Shellskriptes, welches den im Thread geschilderten Exploit automatisiert.
Es läuft bei mir, wenn es eure Box schrottet, Ihr plötzlich Haarausfall bekommt oder euer Dackel stirbt soll das nicht meine Schuld sein - ohne jede Gewähr!!!!
Zu erwartendes Ergebnis:
- Ausgabe gefundener Passworte je Rufnummer
- mit Glück auch Ausgabe des PPP-Logins für DSL
Alles weitere was das Script ausgibt, d.h. Registrar, Benutzername etc. sind auf Grundlager allgemeiner Zugangsdaten
geraten. Bitte also die entsprechenden o2-Threads durchforsten, falls Ihr abweichende Daten haben solltet....
Die Masse des Wissens ist in diesem Thread gesammelt, insbesondere in den 92 Posts, die vor diesem hier kamen.
Gültige PPP / DSL-Zugangsdaten bekommt man auch bei der Hotline - man kommt also auf Umwegen immer ins Netz :wink:
Das Script benötigt:
- /bin/sh mit verbesserter Stringverarbeitung (ash, dash, bash) -> sollte Standard sein
- root oder sudo
- mount.cifs
- nc (netcat), tr, sed, ... (Standard-Linux-Tools)
Es müssen die Telefonnummern eingegeben werden, das ist auch schon alles. Falls Ihr nicht sicher seit, welches Format Ihr angeben müsst: Einfach beides angeben - einmal mit 49 und einmal mit 0, das Script sucht dann alle, gibt aber nur die gefundenen aus.
Optional kann man noch einen alternativen Hostnamen/IP-Adresse für die Box und einen abweichenden Registrar definieren, die Standardwerte sollten allerdings reichen, wenn die Netzwerkverbindung via DHCP konfiguriert wurde.
Man kann den Hostnamen/die IP auch einfach als ersten Befehlsparameter mitgeben.
Das ist alles noch furchtbar hässlich, keine richtige Eingabeprüfung, keine Fehlerbehandlung, sollte aber reichen damit die ersten Wagemutigen mittels einer Linux-Live-CD zu Werke gehen können. Ich hab das auch nur mit sudo getestet, es funktioniert aber auch als root (SystemRescueCD).
<HowTo>
Voraussetzungen:
- Der Wunsch, einen eigenen, nicht automatisch konfigurierbaren Router mit VoIP bei o2 zu betreiben. Soweit derzeit bekannt, kann die Fritz!Box 7490 und die 7390 an VDSL-Anschlüssel via tr069 automatisch konfiguriert werden (1, 2, 3), wenn man "o2 DSL" als Provider wählt - die Anleitung/das Script ist dann nicht notwendig!
- HomeBox 6641
- idealer Weise im Urzustand (Werkseinstellungen + Aktivierung via PIN)
- die Box muss angeschaltet sein
- Internet und Telefonie muss funktionieren
- USB-Stick
- formatiert unter Linux, Dateisystem "ext3"
- kann man z.B. mit einer Live-CD wie "System Rescue CD" machen
- Partitionieren und formatieren geht am einfachsten mit dem graphischen Tool "gparted"
- in USB-Port der Box gesteckt und von der Box erkannt (Webseite kontrollieren!)
- >200 MB freier Platz auf dem USB-Stick für den Speicherauszug der Box
- der PC muss via WLAN oder LAN mit der Box verbunden sein.
- bei Verwendung einer Linux-Live-CD würde ich eine Kabelverbindung / LAN empfehlen, da das dann meist automatisch funktioniert
Vorgehensweise:
- Linux-System oder Live-CD starten, welches die o.g. Abhängigkeiten erfüllt
- dürften quasi alle sein
- getestet mit SystemrescueCD:
- es funktioniert, aber das entpacken bzw. mounten eines USB-Sticks ist Handarbeit.
- ich empfehle daher, eine komfortablere CD zu nutzen! (habe aber gerade keine zur Hand )
- Testen, ob Ihr mit dem Browser unter Linux auf eure Box kommt, Standardmäßig über diesen Link zu erreichen.
- Script im Anhang runterladen, ggf. ausführbar machen
- das geht auch auf ner Live-CD, dann seit Ihr sicher das die korrekt funktioniert und Internet habt
- entpacken (Doppelklick...)
- ausführbar machen:
- z.B. Thunar/Xfce/Xubuntu: über Kontextmenü -> Eigenschaften -> Berechtigungen -> "Datei darf als Programm gestartet werden"
- Ansonsten Konsole in den Verzeichnis öffnen, in dem das Script liegt:
- Konsole öffnen, Script ausführen, Anweisungen folgen
- in das Verzeichnis des Scriptes wechseln
- man kann die Konsole meist auch gleich in dem Ordner des Scriptes aufmachen, i.d.R. gibt's ein Kontextmenü für sowas
- zum Benutzer "root" wechseln, das Script braucht administrative Berechtigungen!
- Befehl
eingeben, ENTER
- alternativ, wenn sudo vorhanden ist kann auch
verwendet werden
- die Box sollte nach jedem Scriptlauf neu gestartet werden, da sie danach teilweise träge wird, DNS nicht mehr funktioniert, etc. pp. Leider habe ich keine Idee, woran das liegen könnte - ich mache nichts verwerfliches mit der Box
</HowTo>
Damit nicht lange gesucht werden muss - bei der
Zielgruppe des Scriptes lauten die allgemeinen Zugangsdaten:
Code:
[B]DSL-Zugangsdaten[/B]
Benutzername: <Seriennummer_der_Box>[email protected]
Passwort: Aktivierungs-PIN
Die Seriennummer steht als "Serial Number" auf der Box hinten drauf :)
[B]VoIP-Daten[/B]
Benutzername: 49<Vorwahl_ohne_Null><Rufnummer>
Passwort: via Script
Registrar: sip.alice-voip.de
Proxy: sip.alice-voip.de
Mir ist durchaus klar, dass es auch @s93-er Zugangsdaten gibt und jede Menge Box-Besitzer, die noch ganz andere PPP-Benutzernamen haben, aber deren Daten kenne ich nicht, hier hilft
google.
Das Script macht nix weiter, als den gesamten Speicher (128MB RAM) der Box nach einer bestimmten Kombination aus Rufnummern und Registrar zu durchsuchen. Das sollte auch für andere Registrare und auch für Rufnummern ohne o.g. Format funktionieren - das ist dann aber
ein unbeabsichtigter Bonus-Effekt.
<Wichtig: Internet/PPP-Zugangsdaten>
Weil das offenbar bei den Benutzern, die hier und in den offiziellen o2-Foren nicht schon länger intensiv mitlesen für Verwirrung sorgt:
Bei allen mir bekannten 6641-Benutzern wurde von 2-Sessions/ 2. PVC / 2. PPP-Verbindung auf 1-Session umgestellt, offenbar ist das einer der Gründe für die Umstellung.
Das bedeutet im Klartext, dass Ihr nur noch
ein Login für Internet habt.
Das Login kann das durch das Script extrahierte sein, alternativ kann man auch das in den Schreiben von o2 enthaltene Rufnummer@s9..... verwenden. Man bekommt es auch nach wie vor von der o2-Hotline genannt. Die Homebox2 verwendet nur das Login, welches das Script liefert.
Die 2. Verbindung war bisher einfach dazu da, in ein internes o2-Netz vorzudringen, in dem die SIP-Server standen. Konnte man auch schön daran sehen, dass man für diese Verbindung 10.*.*.* IP-Adressen bekommen hat, die sind wie 192.168.*.* nur zur internen Verwendung im LAN und im Internet nicht gültig (private IP).
Die "neuen" o2-Server haben echte IP-Adresen und sind auch via Internet zu erreichen. Allerdings klappt die Namensauflösung nicht immer, da gibt es dann DNS-Fehler im Ereignislog der Fritz!Box. In dem Fall hilft es, entweder die o2-DNS-Server zu benutzen oder eine der IP-Adressen von sip.alice-voip.de als "proxy-Server" einzutragen:
- 62.52.148.54
- 62.52.148.38
- 62.52.148.70
- ...
Proxyserver/IP-Adressen kann man mittels einem der Befehle:
Code:
nslookup sip.alice-voip.de 62.109.121.1
dig @62.109.121.1 sip.alice-voip.de
Wobei der erste Befehl vermutlich auch unter Windows funktioniert.
</Wichtig>
Fehlerberichte:
- nur öffentlich, keine PN!
- Immer angeben: Box-Firmware-Version, exakte Fehlermeldung des Scripts
- Bitte auch den Stick, der an der Box hing auslesen: Welche Dateien sind da drauf
- Verzeichnislisting
posten!
Von Nutzern getestete Live-CDs:
- Live CD Knoppix 7.2 auf USB, CD-Version -> kein Erfolg, Probleme beim Mounten
- Live CD Ubuntu 14.04.1 auf USB, CD Version -> Erfolg, wenn Script als Root ausgeführt wird
- Live CD Xubuntu -> kein Erfolg, da keine /bin/bash vorhanden
- SystemRescueCD: Klappt mit /bin/bash als Shell
Durch die Überarbeitungen vom 2014-12-06 sollte die Kompatibilität mittlerweile deutlich besser sein, d.h. vermutlich geht auch Xubuntu und jede weitere CD, die eine etwas bessere /bin/sh hat.
ToDo:
- Parameter per Kommandozeile direkt übergeben
- Sämtliche Fritz-Einstellungen hübsch formatiert ausgeben, nicht nur das Passwort
Ablauf des Skriptes / Ein- und Ausgaben zur Referenz:
Code:
$ sudo ./6641-own-20150105-1.sh
Please enter the IP address or hostname of your HomeBox 2 (Zyxel 6641)
or just press enter to use the default value
Host [o2.box]:
Please enter the registrar of your VoIP connection
or just press enter to use the default value
Registrar [sip.alice-voip.de]:
Please enter the sip-proxy of your VoIP connection
or just press enter to use the default value
SIP-proxy [sip.alice-voip.de]: sip.alice.voip.de
Please enter the phone numbers to search for.
Seperate numbers with space and use the format
CCPPPPPPPNNNN
or
0PPPPPPPNNNN
(CC=Country-Code, PPPPP=Prefix, NNNN=Number)
For example: 498005900050 498005251378 08005900050 08005251378
If you are not sure which format is correct for your account,
simply specify both formats for your phone numbers!
Phone numbers: 49123456789 0123456789 4999988877766 4955554444333
- trying to ping the box (o2.box)... SUCCESS
- trying to mount the box: //o2.box/DRIVE1_1... SUCCESS
- trying to create symlink (0_link_to_r00t_31474) to root directory... SUCCESS
- trying to unmount /tmp/tmp.gz79qPgkiv... SUCCESS
- trying to mount the box a second time for exploit preparation... SUCCESS
- trying to append "postexec" code... SUCCESS
- trying to create a user called "bob" with password "alice" SUCCESS
- trying to unmount /tmp/tmp.gz79qPgkiv... SUCCESS
- trying to mount the box a third time for exploit execution... SUCCESS
- trying to unmount /tmp/tmp.gz79qPgkiv... SUCCESS
- checking for open port on o2.box:23000... SUCCESS
- dumping memory from box to usb drive
please be patient: this takes at least 62 seconds...
- trying to mount the box a fourth time to download the memory dump... SUCCESS
- trying to copy PPP username (<BOX-SERIAL>-CC5D4E@.*\.de), a failure here is OK... FAILURE
- trying to copy PPP password (your PIN)...
If this fails, extraction of PPP data will fail! SUCCESS
- downloading the memory dump to /tmp/tmp.4w23OaGCmn... SUCCESS
- trying to unmount /tmp/tmp.gz79qPgkiv... SUCCESS
- looking for PPP username in memory dump, since I dind't get it from the box
This may fail in a lot of cases - you may have to get the data from
o2's hotline instead!
- looking for phone number + proxy name in memory dump...
- No password for 0123456789 found, retrying with sip proxy registrar..\.alice-voip\.de
- No password for 0123456789 found
~~~~~~~~~~~~~~~~ FINISHED, RESULTS FOLLOW ~~~~~~~~~~~~~~~~
Your PPP (internet) login data is:
Username: [email protected]
Password: NEVER
For phone number 49123456789, please use the following
data to configure your router:
Phone number: your telephone number without prefixes
Username: 49123456789
Password: GONNA
Registrar: sip.alice-voip.de
SIP-proxy: sip.alice-voip.de
For phone number 4999988877766, please use the following
data to configure your router:
Phone number: your telephone number without prefixes
Username: 4999988877766
Password: GIVE
Registrar: sip.alice-voip.de
SIP-proxy: sip.alice-voip.de
For phone number 4955554444333, please use the following
data to configure your router:
Phone number: your telephone number without prefixes
Username: 4955554444333
Password: YOU UP!
Registrar: sip.alice-voip.de
SIP-proxy: sip.alice-voip.de
Please note:
You may have to reconfigure you FritzBox slightly.
o2 uses rtp_priority = 26 and rtp_port >51000
in their box.
In case of problems with voice quality, try to edit
/var/flash/voip.cfg
on your FritzBox accordingly.
- cleaning up...
Please note: Files on the USB-Stick of the Box are left intact!
You may use them to further debug your results.'
Bye!
Technische Details:
- Die mounts mache ich nicht parallel, weil das nicht funktioniert hat - wenn ich den symlink erstelle, fliegt der andere Mount über den Jordan.
- Die Symlinks werden selbst erstellt (CIFS Unix Extensions)
- Die Mountpunkte und Dateinamen sind alle mit Zufallszahlen versehen.
- Konsequenz: Jeder Skriptlauf bringt euch einen neuen Symlink auf den Stick und ggf. auch neue Memdumps.
- Das habe ich versucht in der ungetesteten Folgeversion besser zu machen und wenigstens teilweise aufzuräumen
- Nach einem erfolgreichen Lauf ist telnet auf port 23000 bis zum Neustart der Box erreichbar.
- Das Skript legt einen Benutzer "bob" mit Passwort "alice" an, auch der ist nach einem Neustart weg
- "reboot" funktioniert im telnet übrigens nur mit -f, die Box macht sonst keinen kompletten Neustart.
Historie:
Edit 2015-01-05 #3: Neue Scriptversion: Fallback-Wert für SIP-proxy ist jetzt registrar..\.sip\.... (mit .sip)
Edit 2015-01-05 #2: Neue Scriptversion: Idiotischer Typo
Edit 2015-01-05 #1: Neue Scriptversion:
- Fragt nun Registrar und SIP-Proxy getrennt ab, gibt echten gefundenen SIP-Proxy im Ergebnis aus
- Fallback-Proxy "registrar..\.alice-voip\.de" eingebaut
- kleinere Fixes, Hinweis auf die verbleibenden Dateien auf dem USB-Stick
Edit 2014-12-20 #1:
- Hinweis auf die auto-Konfiguration der Fritz!Box 7490 - das Script ist hier nicht notwendig
Edit 2014-12-07 #2: Neue Scriptversion
- Fehlende PIN-Datei ist kein kritischer Fehler mehr
- Listing und Inhalt der Dateien aus box:/var/ppp wird auf dem Stick gespeichert
Edit 2014-12-07: Neue Scriptversion
- PPP-Benutzername wird jetzt auch aus dem Speicherauszug extrahiert
- dadurch sollte jetzt bei der Masse der Benutzer auch die Extraktion der PPP-Zugangsdaten funktionieren
- Meldungen überarbeitet, kleinere fixes
Edit 2014-12-06 #2: Neue Scriptversion
- ein paar Tippfehler korrigiert
Edit 2014-12-06:
Neue Scriptversion:
- akzeptiert jetzt auch das "normale" Rufnummernformat
- sollte jetzt auch /bin/sh kompatib(ler) sein -> bash ist nicht mehr notwendig, vermutlich muss es aber wenigstens ne "/bin/ash" oder "/bin/dash" sein. Ich werd versuchen, das noch auf ne busybox ash runterzudampfen, mal sehen.
- sudo ist raus -> script muss als root laufen, also mit sudo ./6641-own.sh starten!
- registrar, box-ip etc. frei wählbar (werden derzeit abgefragt, parameter fehlen noch)
- Tippfehler beim Standard-Registrar ist raus
- es wird auf bestehende mounts geprüft und ggf. abgebrochen
- beim Abbruch werden bestehende mounts gemeldet
Ist nur grob getestet, mal sehen
Edit 2014-11-29:
Neue Skriptversion, getestet von SystemRescueCD. Ich empfehle aber ne komfortablere LiveCD, wenn jemand keine Ahnung von Linux hat - bei SystemRescueCD ist selbst das Mounten komplex.
Edith: Ich hab mal die aktuelle, getestete Version angehängt.
Funktionell ist nicht wirklich was neu, die räumt nur nachher besser auf und hat die später vorgesehenen Parameter in Variablen.