- Mitglied seit
- 15. Mai 2008
- Beiträge
- 21.900
- Punkte für Reaktionen
- 14
- Punkte
- 0
Es geht um ein .cgi-Skript, dass die Funktionalität einer Shell in den Disk Station Manager bringt. Wozu? Damit kann man fast alle Dinge tun, für die man sonst einen Telnet braucht. Ist sicher (weil https) und schön
Achtung: Wie immer erfolgen alle Änderungen mit telnet-Aufruf auf der DS und auf eigene Kappe
Voraussetzung: Die Option HTTPS-Verbindung ist aktiv, d. h. auf den Web Station Manager wird mit https://IP_der_DS:5001 zugegriffen.
(1) Der Einfachheit habe ich das Skript auch in das Verzeichtnis: /usr/syno/synoman/phpsrc/systeminfo gelegt. Wer also noch kein Verzeichnis systeminfo hat, der lege sich eins an und stelle sich dann hinein.
(2) Die Datei shell.cgi erstellen mit folgendem Inhalt (Achtung, die erste Zeile ist sehr wichtig!) :
(3) Ein Verzeichnis anlegen: /usr/syno/synoman/webman/3rdparty/shell. In diesem Verzeichnis die Datei application.cfg erfassen:
text = shell
description = shell
type = embedded
protocol = https
address = IP_der_Diskstation
port = 5001
path = /phpsrc/systeminfo/shell.cgi
(4) Disk Station Manger aufrufen & testen
Kurze Erläuterung: Das Skript schickt ein Formular zur Eingabe des gewünschten Linux-Kommandos. Mit dem Button (oder der Return-Taste) abschicken. Das Skript ruft sich selbst wieder auf. Jetzt erfolgt die Aufbereitung der QUERY_STRINGS (Substitution der Leerstellen und des URIDECODES (z.B. %2F -> / ), Abschneiden des Variablennamens und Aufbreitung für die Ausführung). Das eingegeben Kommando wird dann am Ende mit ash -c $cmd aktiviert.
Achtung, es wird jedesmal eine neue Shell gestartet, so dass Ergebnisse von Kommandos nicht zwischengespeichert werden, d. h. ein cd .. mit nachfolgendem ls -l geht nur wie folgt: cd ..;ls -l
Einige Programm gehen nicht (z. B. vi), andere verhalten sich eigenwillig, weil bestimmte Shell-Umgebungsvariablen nicht stimmen (z. B. more) ...
OOOOhhhhjeee - ich hab was vergessen zu schreiben. Man kann jedes Kommando eingeben! Mit der Folge, dass man auch den größt-möglichen-Schaden anrichten kann. Also immer klaren Kopf, wenn man was damit tut - ist genauso wie im telnet ... also keine rm -r ... oder so ... das kann die gesamte Platte löschen
Achtung: Wie immer erfolgen alle Änderungen mit telnet-Aufruf auf der DS und auf eigene Kappe
Voraussetzung: Die Option HTTPS-Verbindung ist aktiv, d. h. auf den Web Station Manager wird mit https://IP_der_DS:5001 zugegriffen.
(1) Der Einfachheit habe ich das Skript auch in das Verzeichtnis: /usr/syno/synoman/phpsrc/systeminfo gelegt. Wer also noch kein Verzeichnis systeminfo hat, der lege sich eins an und stelle sich dann hinein.
(2) Die Datei shell.cgi erstellen mit folgendem Inhalt (Achtung, die erste Zeile ist sehr wichtig!) :
Rich (BBCode):
#!/bin/ash
cmd=$(echo $QUERY_STRING | sed 's/\+/ /g' | sed 's#%\([0-9A-F][0-9A-F]\)#\\x\1#g')
cmd=${cmd##*=}
cmd=$(echo -e $cmd)
echo "Content-type: text/html"
echo ""
echo "<html><head><title>Shell</title></head><body>"
echo "<style>body{font:11px Arial;}</style>"
echo "<form name='f' method='get' action='shell.cgi'>"
echo "<input size=100 style='font:11px Courier New' type=text name='cmd'>"
echo "<input type=submit value=go>"
echo "</form>"
echo "<div style='background-color:#ccf;border:1px solid #ccc;height:500px;overflow:auto'><pre>"
echo '$ '$cmd
ash -c "$cmd"
echo "</pre></div>"
echo "</div></body></html>"
(3) Ein Verzeichnis anlegen: /usr/syno/synoman/webman/3rdparty/shell. In diesem Verzeichnis die Datei application.cfg erfassen:
text = shell
description = shell
type = embedded
protocol = https
address = IP_der_Diskstation
port = 5001
path = /phpsrc/systeminfo/shell.cgi
(4) Disk Station Manger aufrufen & testen
Kurze Erläuterung: Das Skript schickt ein Formular zur Eingabe des gewünschten Linux-Kommandos. Mit dem Button (oder der Return-Taste) abschicken. Das Skript ruft sich selbst wieder auf. Jetzt erfolgt die Aufbereitung der QUERY_STRINGS (Substitution der Leerstellen und des URIDECODES (z.B. %2F -> / ), Abschneiden des Variablennamens und Aufbreitung für die Ausführung). Das eingegeben Kommando wird dann am Ende mit ash -c $cmd aktiviert.
Achtung, es wird jedesmal eine neue Shell gestartet, so dass Ergebnisse von Kommandos nicht zwischengespeichert werden, d. h. ein cd .. mit nachfolgendem ls -l geht nur wie folgt: cd ..;ls -l
Einige Programm gehen nicht (z. B. vi), andere verhalten sich eigenwillig, weil bestimmte Shell-Umgebungsvariablen nicht stimmen (z. B. more) ...
OOOOhhhhjeee - ich hab was vergessen zu schreiben. Man kann jedes Kommando eingeben! Mit der Folge, dass man auch den größt-möglichen-Schaden anrichten kann. Also immer klaren Kopf, wenn man was damit tut - ist genauso wie im telnet ... also keine rm -r ... oder so ... das kann die gesamte Platte löschen
Zuletzt bearbeitet: