Du bist nicht angemeldet.
http://dyndns/cgi-bin/fritzload/gui_download.cgi
Bei aktiven Fernzugang kommt man ohne Passwortanfrage unter der obigen Adresse auf Fritzload und hat da alle Möglichkeiten.
Ein riesiges Sicherheitsleck!
Habe jetzt den Fernzugriff erst mal abgeschaltet, würden den aber gern wieder verwenden.
Ist das Problem bekannt?
Gibt es eine Möglichkeit den Standard Pfad zu ändern
von
http://dyndns/cgi-bin/fritzload/gui_download.cgi
in
http://dyndns/cgi-bin/"irgendetwas"/gui_download.cgi
Das wäre erst mal ein Notbehelf.
DSL: 1&1 Doppel-FLAT VDSL 100 (Komplettanschluss)
Router: AVM FRITZ!Box 7490 - FRITZ!OS - 07.21
Abwesend
Bei mir geht die URL nur mit https mit Benutzername und Passwort - Port 80 ist dicht.
das galt nur bis 5.54 mit der 6.05 habe ich auch Probleme ...
Der Beitrag wurde geändert von mucki (am 23. Aug. 2014 um 03:16 Uhr)
Fritz!Load V0.42/Rev.: 3204 FRITZ!Box 7490 FRITZ!OS: 06.93
Abwesend
bei mir ist die url auch offen mit neuster fritzbox/fritzload version... kann auf die usb platte und interface voll zugreifen... ohne Abfrage...wenn da
man jemand ip ranges abscannt ist nicht so toll.... der bug ist schon älter aber noch nicht gefixt worden.
Abwesend
Ist hier schon mal behandelt worden:
http://ryblog.eu/fritzload/viewtopic.ph … er=ASC&p=1
Zur Zeit muss man den Fernzugriff deaktivieren.
Abwesend
Habe mir einen funktionierenden Passwortschutz für Fritzload gebastelt. Bei Interesse bitte melden.
DSL: 1&1 Doppel-FLAT VDSL 100 (Komplettanschluss)
Router: AVM FRITZ!Box 7490 - FRITZ!OS - 07.21
Abwesend
Hallo Andy
das mit dem Passwortschutz interessiert mich, und sicherlich auch viele andere, brennend. Wie hast Du das umgesetzt?
Vielleicht könnte man es auch in das svn einpflegen?
LG
Luka
Abwesend
Hallo Andy
Super. Bin auch sehr interessiert.
Abwesend
ich auch ...
Abwesend
Passwortabfrage für Fritzload.
-------------------------------------------------------------------------------------------------------------
cgi/gui_main.cgi bitte ersetzen.
--------------------------------------------------------------------------------------------------------------
#!/bin/ash
VERSION="V0.42"
# release revision for this VERSION
ReleaseRevision="1712"
#pdir="$(cd ..; pwd)"
if [ -f /var/tmp/fritzload.cache ]; then
. /var/tmp/fritzload.cache
else
pdir="$(realpath $0/../../)" || pdir="$(cd .. && pwd)"
. $pdir/bin/BBox
fi
#? cd "$pdir/cgi"
. $pdir/lib/util_file.sh
. $pdir/lib/util_string.sh
. $pdir/lib/captcha_service/captcha_stat.sh
if [ -f ./updatefix2.sh ]; then
. ./updatefix2.sh
fi
# Check if revision exists. If not create it
if [ ! -f $pdir/config/revision.txt ]; then
# for first update
echo "$ReleaseRevision" >$pdir/config/revision.txt
fi
VERSION="$VERSION/Rev.: $(cat $pdir/config/revision.txt)"
# newline!
N="
"
#rm -f $pdir/log/cgi.txt
#log(){
# echo "$1" >>$pdir/log/cgi.txt
#}
# Taken from LCR Updater, [url=http://www.telefonsparbuch.de]www.telefonsparbuch.de[/url]
cgi_queryString() {
QVARS=
QTYPE=GET
if [ "$REQUEST_METHOD" = POST ]; then
if [ -z "${CONTENT_TYPE##multipart/form-data*}" ]; then
QTYPE=MULTI
local boundary="--${CONTENT_TYPE#multipart/form-data; boundary=}" Rquery= Bquery=
local contentLength=$CONTENT_LENGTH
local br="$(echo -e "\015")$N"
while [ "${contentLength:-0}" -gt 0 ]; do
read Rquery
contentLength=$(( $(($contentLength-${#Rquery})) -1))
Bquery="$Bquery$Rquery$N"
done
# boundary-Blöcke
local data= name= value= file=
while true; do
Bquery="${Bquery#*$boundary}"
data="${Bquery%%$boundary*}"
[ "$data" = "--$br" ] && break
data="${data#*name=\"}"
name="${data%%\"*}"
file="${data#*filename=\"}"
if [ "$file" != "$data" ]; then
file="${file%%\"*}"
eval Q_${name}_FILE=\"$file\"
fi
value="${data#*$br$br}"
value="${value%$br}"
eval Q_${name}=\"$value\"
QVARS="$QVARS$name$N"
done
else
QTYPE=POST
read query
local br=$(echo -e "\015")
query="${query%$br}"
fi
else
query="$QUERY_STRING"
fi
# query / param Werte auslesen (Q_name=value)
local oldIFS="$IFS" data= name=
export IFS="&"
for data in $query; do
name=${data%\=*}
value="${data#$name}"
value="${value#=}"
eval value0="\$Q_${name}"
if [ -n "$value0" ]; then
eval Q_${name}=\"$value0$N$value\"
else
eval Q_${name}=\"$value\"
QVARS="$QVARS$name$N"
fi
done
export IFS="$oldIFS"
}
cgi_queryString
# Current instance:
instance=${Q_i:-1}
#?[ -n "$Q_instance" ] && instance="$Q_instance"
tmp=/var/tmp/fritzload$instance
mkdir -pm 0777 $tmp
activeButton(){
echo -n "<script type=\"text/javascript\">document.getElementById('$1').className='button active';</script>"
}
#!TODO: Uppercase all ini-Vars or set prefix to vars!
if [ -z "$SKIP_INIT_SETTINGS" ]; then
if [ -f $pdir/config/fritzload.ini ]; then
. $pdir/config/fritzload.ini
else
. $pdir/config/fritzload.default
fi
#? cd $pdir/cgi
if [ ! -d "$skindir" ]; then
skindir="skins/Skin 1 (mastertester)"
fi
fi
if [ -d /usr/www/$OEM/html/de/tools/fritzload ]; then
htmlpath=/html/de/tools/fritzload
elif [ -d /usr/www/$OEM/html/de/tr69_autoconfig/fritzload ]; then
htmlpath=/html/de/tr69_autoconfig/fritzload
else
htmlpath=../html
fi
[ -f /var/tmp/fritzload.htmlpath ] && . /var/tmp/fritzload.htmlpath
if [ "$HTTPS" = on ]; then
fritzurl="https://$HTTP_HOST/"
elif [ "$HTTPS" = off ]; then
fritzurl="http://$HTTP_HOST/"
fi
### downloadTransfer einbinden, für _checkNAS
# Muss der Aufruf jedesmal sein?
if [ "$change_nas_active" = 1 ]; then
. $pdir/lib/downloadTransfer.sh
else
# DUMMY
_checkNAS(){
return
}
fi
# Header
# Der komplette Header muss gesendet werden damit die Ausgabe nicht gepuffert wird.
echo -e "HTTP/1.0 200 OK\r"
echo -e "Content-Type: text/html; charset=iso-8859-15\r"
echo -e "Expires: -1\r"
echo -e "Pragma: no-cache\r"
########## Andy Passwortabfrage Anfang
VOIPPASS="$(grep ^passvoip= $pdir/config/fritzload.ini | ${BBox} cut -c11- | sed "s/\"//g" )"
if [ $Q_passwd == $VOIPPASS ]; then
echo -e "Set-Cookie: test=12345678" # irgend ein Wert
fi
########## Andy Passwortabfrage Ende
echo -e "\r"
[ -z "$SKIP_PAGE_TOP" ] && . "$skindir/gui_pagetop.sh"
[ -f $signaldir/flblupdated ] && echo "<p class=msg>Der Fritz!Load-Bootloader wurde aktualisiert. Bitte den Router neustarten.</p>"
# action=flaction.json?do=changeskin
skin_select(){
cat <<-EOF
<form action=#>
<select size=1 name=skindir onchange="change_skin(this)">
$(
local cdir="$(pwd)"
cd $pdir/cgi/skins
for skin in *; do
if [ "skins/$skin" = "$skindir" ]; then
echo "<option value=\"$skindir\" selected=\"selected\">$skin</option>"
else
echo "<option value=\"skins/$skin\">$skin</option>"
fi
done
cd $cdir
)
</select>
</form>
EOF
}
# Update textarea via xhttprequest
# JS_UPDATE_TEXTAREA [BUTTON-ID] [TEXTAREA-ID] [JSLOAD-FILEID]
JS_UPDATE_TEXTAREA(){
cat <<-EOF
\$('#$1').click(function() {
\$.ajax({
url: "flinfo.json?get=file_source_$3",
dataType: 'text',
success: function(data, textStatus){
\$('#$2').val( data.replace(/^\n+/, "") );
if ("$2" == "logList") showHistory($SET_showReverse)
},
error: function(jqXHR, textStatus, errorThrown) {
alert("Fehler! Empfange Daten für $1 $2 $3\n[Stand:"+ textStatus +"]\n[Ankomende:"+ jqXHR.responseText +"]");
}
})
return false;
});
EOF
}
########## Andy Passwortabfrage Anfang
if ([ "$flg_password_check_config_page" == "1" ] && [ $addurl -n ]); then
if [ `echo $HTTP_COOKIE | grep -c "test=12345678" ` -gt 0 ]
then
echo "" #"Success"
else
#echo "Fail";
if ([ "$VOIPPASS" != "" ] && [ "$Q_passwd" != "$VOIPPASS" ]); then
cat <<-EOF
<form method="post" name="FritzLoad">
<fieldset>
<legend>Fritz!Load - Anmeldung</legend>
<table class="formTable" cellspacing="10">
<tr>
<td colspan=2>
Die Einstellungenoberfläche von FRITZ!Load ist mit einem Kennwort geschützt.<br>
Melden Sie sich mit dem Kennwort der FRITZ!Box an.<br>
</td>
</tr>
<tr>
<th style="text-align: right; padding-right: 5px"><b>Kennwort</b></th>
<td>
<input name="passwd" type="password" size="20" maxlength="128">
<input type=submit value=Anmelden>
</td>
</tr>
</table>
</fieldset>
</form>
EOF
PAGEEND
exit 0
fi
fi
fi
########## Andy Passwortabfrage Ende
----------------------------------------------------------------------------------------------------------------------------
cgi/add_url.cgi bitte ersetzen
----------------------------------------------------------------------------------------------------------------------------
#!/bin/ash
SKIP_PAGE_TOP=1
########## Andy Passwortabfrage Anfang
addurl="1";
########## Andy Passwortabfrage Ende
. ./gui_main.cgi
file=${targetdir:-/var/tmp}/add_url.txt
prio=0
if [ "$QTYPE" = MULTI ];then
if [ -n "$Q_url" ];then
urldecode "$Q_url" >$file
url="FILE"
if [ -n "$Q_prio" ];then
prio=1
fi
elif [ -n "$Q_wireshark" ];then
urldecode "$Q_wireshark" >$file
url="WIRESHARK"
links="${targetdir:-$tdir}/added_links.txt"
fi
else
url="$(urldecode "$Q_url")"
file=""
fi
if [ -n "$url" ];then
cd $pdir/bin
./add_url.sh "$url" "$file" "$links" $instance 1 $prio
echo "Die Download-Liste wurde gespeichert.";
if [ -n "$links" ];then
if [ ! -f "$links" ];then
echo "Keine Datei entpackter Links wurde gefunden."
else
cat $links
fi
fi
else
echo "Keine gültige Parameter (FILE Upload/Post/Get) oder keine URL erhalten!"
fi
## Kleine Verzögerung, damit das Ausgabefenster unter Windows nicht zu schnell schließt.
#sleep 1
echo
Der Beitrag wurde geändert von Andy (am 01. Aug. 2014 um 20:32 Uhr)
DSL: 1&1 Doppel-FLAT VDSL 100 (Komplettanschluss)
Router: AVM FRITZ!Box 7490 - FRITZ!OS - 07.21
Abwesend
Unter Konfiguration muss natürlich Passwortabfrage aktiviert sein
DSL: 1&1 Doppel-FLAT VDSL 100 (Komplettanschluss)
Router: AVM FRITZ!Box 7490 - FRITZ!OS - 07.21
Abwesend
Wir schreiben das Jahr 2018, würdet ihr annehmen das dieser Passwortschutz noch stark genug ist um ein Portforwarding darauf zuzulassen?
Edit: Vielleicht sollte ich das etwas präzisieren:
Mir ist schon bewusst das es in jedem Fall suboptimal ist, aber angenommen ich nehme Benutzername und Kennwort aus einem vollen Zeichensatz, 32 Zeichen lang, was einen Bruteforce unwahrscheinlich macht, und verwende das immer nur über eine vertrauenswürde Verbindung, eigene gesicherte Netzwerke oder Mobilfunk, da es ja kein https ist und der stunnel nicht mehr zu funktionieren scheint, ist der verwendete Webserver (httpd glaube ich) dann noch aktuell genug als das es nicht einfach einen Bypass, exploit oder verstecktes Masterkennwort gibt?
Edit2:Stunnel funktioniert offensichtlich doch noch, man muss dann nur natürlich diesen Port in die "Portforwarding" Ausnahmen in der Firewall eingeben. Vllt könnt ihr ja eine Einschätzung für beide Fälle abgeben?
Edit3: Der User lernt noch während dem Schreiben, und vor die Wahl gestellt zwischen weiterer Leichenschändung und Off-Topic entscheide ich mich für die Leichenschändung und führe mein kleines Selbstgespräch in einem anderen Thread fort.
Der Beitrag wurde geändert von Chefi (am 10. Mar. 2018 um 00:58 Uhr)
Abwesend