Tutorial: Shell in a Box auf der DS

Status
Für weitere Antworten geschlossen.

Steini

Benutzer
Mitglied seit
22. Mrz 2010
Beiträge
423
Punkte für Reaktionen
1
Punkte
0
Tach,

Ich war's langsam leid, dass ich von meiner Firma aus keine SSH- oder Telnet-Verbindung zu meinem NAS aufbauen konnte ob der geballten Firewall- und Proxy-Power... ;-) Aber es gibt ja Mittel und Wege, wie man trotzdem die auf seiner NAS installierten Terminal-Skripte nutzen kann: Web-Shell heißt das Zauberwort!

Es gibt einige Web-Shells im Cyberspace - ich entschied mich für Shell in a Box (SiaB).

Vorweg: Alles, was ihr mit eurer DS anstellt und evtl. dabei "zu Bruch" geht, geht auf eure Kappe! Also: Backup, Backup, Backup!

Vorbeitungen:
Ladet euch das aktuelle Skript (als Source Code) von der Website herunter und auf das NAS rauf, beispielsweise nach /volume1/public/

Noob-kompatibles Entpacken:
Im Dateibrowser auf die gepackte Datei rechtsklicken und entpacken. :rolleyes:

Sofern noch nicht geschehen, muss das Itsy Package Management System (iPKG) installiert werden. Wie das geht, steht hier. Danach via SSH (Telnet geht auch, ist aber eine unverschlüsselte Verbindung) auf der DS als root (nicht admin oder irgendein anderer User) einloggen. Die Synology-Boxen setzen auf ein Busybox-Linux. Daher müssen wir dem System erstmal auf die Sprünge helfen, indem wir ihm einige Tools verpassen, die uns das Leben erleichtern. Los geht's:

Code:
ipkg install gawk
ipkg install gcc
ipkg install make
Als nächstes verschieben wir das entpackte SiaB-Verzeichnis und springen in eben jenes:

Code:
mv /volume1/public/shellinabox-2.10 /tmp/
cd /tmp/shellinabox-2.10
Nun folgen die drei bekannten Installationsroutinen:

Code:
./configure
make
make install
Für die Geeks unter euch: Standardmäßig wird SiaB unter /usr/local/bin/ und die Includes unter /usr/local/include/ abgelegt. Ihr könnt das aber natürlich mit --prefix=PREFIX beeinflussen:

Code:
./configure --prefix=/usr/local/nocheinlokal/unddasletztelokal

Bis hierin noch alle dran? Dann testen wir jetzt mal, ob alles glatt gelaufen ist...

Code:
shellinaboxd -b
Dies startet den Daemon auf dem Standardport 4200. Ruft nun im Browser http://MEINEIP-ODER-DOMAENE:4200/

Shell in a Box sollte euch nun begrüßen. Falls nicht, die Schritte von oben nach unten noch einmal durchgehen...

Falls ja, weiter im Text.

Soll euch die Shell jederzeit zur Verfügung stehen? Dann startet die Shell automatisch als Service. Folgende Zeile in die Datei /etc/rc.local (gehört zum iPKG) eintragen:

Code:
/usr/local/bin/shellinaboxd --background=/var/run/shellinaboxd.pid --port=12345 --service=/:LOGIN
Es ist gar nicht so doll, wenn SiaB auf einem Standardport rennt. Angreifer können so bei Port-Scans leicht herausfinden, dass ihr SiaB am Start habt. Darum: Port-Forwarding einrichten! Das ist natürlich von Router zu Router unterschiedlich, darum nur das Wichtigste: Sagen wir, ihr habt euch für Port 12345 entschieden, so gebt ihr in eurem Router an, dass TCP:12345 auf TCP:12345 weitergeleitet wird - nicht vergessen, euer NAS als Zielgerät festzulegen!

Es gibt natürlich noch wesentlich mehr Optionen, zum Beispiel kann man den SiaB-Daemon auch als CGI-Skript bei Bedarf laufen lassen. Es lohnt sich in jedem Fall einen Blick ins Manual zu werfen!

Und wer immer noch nicht genug hat, für den/die habe ich noch etwas: Ein Desktopsymbol, um SiaB direkt vom DS-Desktop zu starten... Los geht's!

Desktop.jpg

Voraussetzung ist, dass ihr mindestens Firmware ab Version 3.0 einsetzt. Mit einem Texteditor eurer Wahl (beispielsweise vi) erzeugt ihr die folgenden Ordner und Dateien (alle UTF-8):

WebShell
|
+-- images
|
+-- applications.cfg
|
+-- authenticate.cgi
|
+-- config <- Das ist eine Datei ohne Endung
|


Inhalt der applications.cfg:

Code:
text=WebShell
description=Shell in a Box starten
protocol=http
address=MEINE-IP-ODER-DDNS-OHNE-PROTOKOLL
port=12345
type=embedded
icon_16=images/icon_16.png
icon_32=images/icon_32.png
adminonly=true

Inhalt der authenticate.cgi:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

int IsUserLogin(char *user, int bufsize)
{
FILE *fp = NULL;
char buf[1024];
int login = 0;
bzero(user, bufsize);
fp = popen("/usr/syno/synoman/webman/modules/authenticate.cgi", "r");
if (!fp) {
return 0;
}
bzero(buf, sizeof(buf));
fread(buf, 1024, 1, fp);
if (strlen(buf) > 0) {
snprintf(user, bufsize, "%s", buf);
login = 1;
}
pclose(fp);
return login;
}
int main(int argc, char **argv)
{
char user[256];
printf("Content-type: text/html\r\n\r\n");
if (IsUserLogin(user, sizeof(user)) == 1) {
printf("User is authenticated. Name: %s\n", user);
} else {
printf("User is not authenticated.\n");
}
return 0;
}

Inhalt der config:

Code:
{
".url": {
"type":"legacy",
"allUsers":false,
"title":"WebShell",
"desc":"Shell in a Box starten",
"icon":"images/icon_{0}.png",
"url":"http://MEINE-IP-ODER-DDNS:12345/"
}
}
}

In den Ordner ./images packt ihr vier PNG-Dateien namens icon_16.png, icon_24.png, icon_32.png und icon_48.png - ihr könnt euch sicherlich denken, wie groß jede einzelne sein muss... :cool:

Dateien und Ordner mit Inhalten gefüllt? Dann ab damit ins Verzeichnis /usr/syno/synoman/webman/3rdparty/, wobei ./images und die drei Dateien in diesem Ordner liegen müssen: /usr/syno/synoman/webman/3rdparty/WebShell

Nach einem Refresh des DS-Desktops seht ihr im Bedienfeld das Icon eurer WebShell und könnt dieses einfach auf den Desktop ziehen.

Zu den Inhalten der Dateien lasse ich mich jetzt nicht aus, nur so viel: adminonly=true und "allUsers":false bedeuten, dass nur der Admin diese Icons zu Gesicht bekommt und "normale" User nicht. Wollt ihr das anders haben, müsst ihr jeweils die beiden Werte vertauschen. Die verwendeten Protokolle sind unverschlüsselte HTTP-Verbindungen. Warum? Weil die wenigsten von euch proper generierte Zertifikate mit OpenSSL oder einem anderen Tool erstellt haben, die zwingend von SiaB für HTTPS vorausgesetzt werden. Falls ihr dennoch https eintragt und keine Zertifikate habt, erhaltet ihr eine SSL-Fehlermeldung und die Shell verweigert den Start.

Ich empfehle aber dringend, dies schnellstmöglich nachzuholen, da jegliche Verbindung unverschlüsselt über den virtuellen Äther geht und gesnifft werden kann.

Das war's fürs Erste! Fragen, Meinungen, Kritik, Feedback jeglicher Art: Ich erwarte euch... :)

Gruß,
Steini
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Haut bei mir beim Kompillieren leider einen Fehler raus und bleibt stehen.
Für den Fall, dass jemandem diese Fehler was sagen, hier die letzten Zeilen vor dem exit
/volume1/@optware/bin/../lib/gcc/powerpc-linux-gnuspe/3.4.6/../../../../powerpc-linux-gnuspe/bin/ld:shellinabox/cgi_root.o: file format not recognized; treating as linker script
/volume1/@optware/bin/../lib/gcc/powerpc-linux-gnuspe/3.4.6/../../../../powerpc-linux-gnuspe/bin/ld:shellinabox/cgi_root.o:1: syntax error
collect2: ld returned 1 exit status
make[1]: *** [shellinaboxd] Error 1
make[1]: Leaving directory `/volume1/public/shellinabox-2.9'
make: *** [all] Error 2
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
Ich hatte Probleme bei der Installation von binutils -liegt wohl am Symlink meiner IPKG Installation.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Welche Fehler hat binutils denn geworfen? Konnte binutils bei mir problemlos installieren, auch mit Symlink-/opt
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
das:
Code:
synology> ipkg install binutils
Installing binutils (2.19.1-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/binutils_2.19.1-1_arm.ipk
ipkg: Cannot link from ./opt/bin/ar to './opt/arm-none-linux-gnueabi/bin/ar': Invalid cross-device link
ipkg: Cannot link from ./opt/bin/as to './opt/arm-none-linux-gnueabi/bin/as': Invalid cross-device link
ipkg: Cannot link from ./opt/bin/ld to './opt/arm-none-linux-gnueabi/bin/ld': Invalid cross-device link
ipkg: Cannot link from ./opt/bin/nm to './opt/arm-none-linux-gnueabi/bin/nm': Invalid cross-device link
ipkg: Cannot link from ./opt/bin/objcopy to './opt/arm-none-linux-gnueabi/bin/objcopy': Invalid cross-device link
ipkg: Cannot link from ./opt/bin/objdump to './opt/arm-none-linux-gnueabi/bin/objdump': Invalid cross-device link
ipkg: Cannot link from ./opt/bin/ranlib to './opt/arm-none-linux-gnueabi/bin/ranlib': Invalid cross-device link
ipkg: Cannot link from ./opt/bin/strip to './opt/arm-none-linux-gnueabi/bin/strip': Invalid cross-device link
Configuring binutils
update-alternatives: Linking //opt/bin/strings to /opt/bin/binutils-strings
Successfully terminated.
synology>

Kommst du heute oder morgen noch on in Skype?

gruss,
ubuntulinux
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
mhm diese Meldungen kriege ich bei binutils ned. Ergibt denn bei dir ein ls -al /opt und ein ls -al /opt/ dasselbe? ;-)
Nö heute ist nix mehr mit skype. Sorry wegen gestern, bin noch zum Nachbarn auf ein paar Bier gegangen und es ist sehr spät/früh geworden
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
Kein Problem ;)

bekomme das:
Code:
synology> ls -al /opt
drwxr-xr-x    8 root     root          4096 Apr 17 22:56 .
drwxr-xr-x   21 root     root          4096 Apr 17 17:32 ..
drwxr-xr-x    4 root     root          4096 Nov 30 05:55 arm-none-linux-gnueabi
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 bin -> /volume1/@optware/bin
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 etc -> /volume1/@optware/etc
drwxr-xr-x    3 root     root          4096 Apr 17 22:56 include
drwxr-xr-x    2 root     root          4096 Apr 17 22:56 info
drwx------    4 root     root          4096 Apr 17 22:04 ipkg-9SpoO8
lrwxrwxrwx    1 root     root            29 Apr 13 16:31 ipkg-HUS3Sq -> /volume1/@optware/ipkg-HUS3Sq
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 lib -> /volume1/@optware/lib
drwxr-xr-x    3 root     root          4096 Apr 17 22:02 libexec
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 man -> /volume1/@optware/man
drwxr-xr-x    2 root     root          4096 Apr 17 17:21 sbin
lrwxrwxrwx    1 root     root            23 Apr 13 16:31 share -> /volume1/@optware/share
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 tmp -> /volume1/@optware/tmp
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 var -> /volume1/@optware/var
synology>
synology>
synology>
synology> ls -al /opt/
drwxr-xr-x    8 root     root          4096 Apr 17 22:56 .
drwxr-xr-x   21 root     root          4096 Apr 17 17:32 ..
drwxr-xr-x    4 root     root          4096 Nov 30 05:55 arm-none-linux-gnueabi
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 bin -> /volume1/@optware/bin
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 etc -> /volume1/@optware/etc
drwxr-xr-x    3 root     root          4096 Apr 17 22:56 include
drwxr-xr-x    2 root     root          4096 Apr 17 22:56 info
drwx------    4 root     root          4096 Apr 17 22:04 ipkg-9SpoO8
lrwxrwxrwx    1 root     root            29 Apr 13 16:31 ipkg-HUS3Sq -> /volume1/@optware/ipkg-HUS3Sq
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 lib -> /volume1/@optware/lib
drwxr-xr-x    3 root     root          4096 Apr 17 22:02 libexec
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 man -> /volume1/@optware/man
drwxr-xr-x    2 root     root          4096 Apr 17 17:21 sbin
lrwxrwxrwx    1 root     root            23 Apr 13 16:31 share -> /volume1/@optware/share
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 tmp -> /volume1/@optware/tmp
lrwxrwxrwx    1 root     root            21 Apr 13 16:31 var -> /volume1/@optware/var
synology>

Von daher eigentlich alles iO.
 

santorial

Benutzer
Mitglied seit
21. Feb 2010
Beiträge
160
Punkte für Reaktionen
0
Punkte
0
Hi,

danke für die Anleitung. Hab das gleich mal ausprobiert. :)
Die Installation von SiaB hat einwandfrei funktioniert und ich kann sie über den Browser auch nutzen.

Allerdings habe ich bei dem Symbol für den Desktop noch das Problem, dass ich kein Icon angezeigt bekomme.
Die drei Dateien liegen alle in /usr/syno/synoman/webman/3rdparty/WebShell/ die vier Bilder in /usr/syno/synoman/webman/3rdparty/WebShell/images .
Die Dateirechte sind 755. Die drei Dateien habe ich 1zu1 übernommen und lediglich den Port und die Adresse geändert.

Hat vielleicht jemand ne Ahnung wo ich noch was falsch habe?

Gruß Marc
 

Steini

Benutzer
Mitglied seit
22. Mrz 2010
Beiträge
423
Punkte für Reaktionen
1
Punkte
0
Siehst du denn die Desktop-Verknüpfung oder taucht diese auch nicht auf? Sind die drei Dateien als UTF-8 erstellt worden? Achte darauf, dass kein BOM (Byte Order Marker) als erstes Zeichen in den Dateien auf. Sind die Bilder als PNG-Dateien abgespeichert worden?
 

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
bekomme auhc folgenden fehler:

Rich (BBCode):
objcopy shellinabox/cgi_root.html shellinabox/cgi_root.o
objcopy:shellinabox/cgi_root.o: Invalid bfd target
make[1]: *** [shellinabox/cgi_root.o] Error 1
make[1]: Leaving directory `/tmp/shellinabox-2.10/shellinabox-2.10'
make: *** [all] Error 2

Gibts schon ne lösung
hab ein x86 modell

Grüße Wessix
 

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
habe dazu gefunden:

I figured out the problem. It just so happened that the build
environment defined GNUTARGET to something ar didn't recognize.
I reconfigured the build system to not defined GNUTARGET and
everything started working.

wie ich das aber anstelle habe ich leider keine Ahnung.
 

santorial

Benutzer
Mitglied seit
21. Feb 2010
Beiträge
160
Punkte für Reaktionen
0
Punkte
0
Ich sehe die Desktop-Verknüpfungen nicht.
Die Dateien waren tatsächlich kein utf-8, obwohl ich es mit utf-8 gespeichert habe (Notepad++).
Ich hab nun mit vim die Dateien in utf-8 konvertiert, allerdings muss geht nur mit BOM. Ohne BOM macht er mir normales ASCII drauss.
Rich (BBCode):
Data> file -i *
applications.cfg: text/plain; charset=utf-8
authenticate.cgi: text/x-c; charset=utf-8
config:           text/plain; charset=utf-8

Data> file *
applications.cfg: UTF-8 Unicode (with BOM) text
authenticate.cgi: UTF-8 Unicode (with BOM) C program text
config:           UTF-8 Unicode (with BOM) text

Dementsprechend sehe ich das Symbol für den Desktop immernoch nicht.
Die Bilder sind alle PNG.

Wie kann ich denn das ganze in utf-8 ohne BOM konvertieren? iconv hatte bei mir nicht geklappt.

Danke für die Hilfe.
Gruß Marc
 

Steini

Benutzer
Mitglied seit
22. Mrz 2010
Beiträge
423
Punkte für Reaktionen
1
Punkte
0
Versuch's mal mit dem systemeigenen vi Editor.
 

santorial

Benutzer
Mitglied seit
21. Feb 2010
Beiträge
160
Punkte für Reaktionen
0
Punkte
0
Funktioniert nun.
Ich habe einfach ein neues Verzeichnis erstellt, dann die application.cfg aus dem phpPgAdmin-Verzeichnis reinkopiert und die inhalte verändert. Danach die Datei dupliziert und in config umbenannt. Hier dann auch die Einträge angepasst. Schlussendlich noch die authenticate.cgi erstellt.
Ich musste allerdings bei der config-Datei auch in der letzten Zeile ein Komma ans Ende setzen. Ohne wird das Symbol wieder nicht angezeigt.
Also so:
Rich (BBCode):
{
".url": {
"type":"legacy",
"allUsers":false,
"title":"WebShell",
"desc":"Shell in a Box starten",
"icon":"images/icon_{0}.png",
"url":"http://MEINE-IP-ODER-DDNS:12345/",
}
}
}

Wegen dem SSL: Wenn ich das Ganze über ne Verschlüsselte DSM-Session mache sollte das Sniffen ja auch erledigt sein. Außer es sitzt jmd in meinem Heimnetz. :)
Oder habe ich hier noch ein Denkfehler?

Nochmal danke für die Hilfe.
Gruß Marc
 

Wessix

Benutzer
Mitglied seit
14. Okt 2010
Beiträge
328
Punkte für Reaktionen
0
Punkte
22
Hat sich zu unserem obigen Problem noch was ergeben?
 

3x3cut0r

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
489
Punkte für Reaktionen
11
Punkte
24
woher bekomm ich denn die icons?
ohne die in dem ordner images seh ich ja auch keine anwendung in der DSM oder?
 

3x3cut0r

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
489
Punkte für Reaktionen
11
Punkte
24
hi
das tutorial hat soweit funktioniert, dass "shellinaboxd -b" sauber startet auf meiner DS-211j (DSM 3.1-1613).
http://192.168.178.211:4200/ funzt also ...
weiter habe ich in der /etc/rc.local die zeile eingetragen (über exit 0, ist das richtig?)
und die dateien und den ordner in /usr/syno/synoman/webman/3rdparty/WebShell abgelegt.

so nun kann ich aber weder über den port zugreifen, den ich in der rc.local angegeben habe
noch erscheint die WebShell in der DSM Oberfläche.
Was habe ich vergessen oder mache ich falsch?
beim ./configure, make und make install gab es soweit keine fehlermeldungen die mir aufgefallen wären.

so und in wieweit ist das Generierung eines eigenen SSL-Zertifikats für mich nun wichtig?
ist das dann für die webshell über https ?

danke für hilfe
 

donkhan

Benutzer
Mitglied seit
22. Mai 2011
Beiträge
202
Punkte für Reaktionen
0
Punkte
16
Hy,

danke für das Tutorial, ich habe alles soweit hinbekommen bis auf Zwei Punkte.

/usr/local/bin/shellinaboxd --background=/var/run/shellinaboxd.pid --port=12345 --service=/:LOGIN

Wie muss ich das mit der Oberenzeile genau machen, damit es nach einem Neustart auch weiter läuft?

und zweitesns, wie groß ,müssen denn die PNG datein sein? Damit ich das auf dem DSM Desktop starten kann?
 

Christian72D

Benutzer
Mitglied seit
29. Apr 2010
Beiträge
715
Punkte für Reaktionen
12
Punkte
44
Mhhh, also bis zum Testen der Shell lief schon mal alles ohne Fehler, die Shell kann ich auch über den Browser starten, aber es reagiert nicht.
Beim Drücken der Enter Taste kommt zwar ein Beep, aber das wars, keine Passwortabfrage oder so.
 

cyberdesigns

Benutzer
Mitglied seit
12. Okt 2011
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Super Anleitung allerdings würde ich den root login disablen, externes root login erlauben vom web aus kann sehr böse enden und in vollkommenen datenverlust resultieren inkl. angehängtem externen usb backup.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat