Karsten schrieb:
> Wie kommt es, dass repl.it & Co ihre Seiten unbehelligt der Hackerwelt
> zugänglich machen können, ohne dass sie von den Usern übernommen werden?
Naja, das passiert sicher immer mal wieder. Die seiten die ich früher
nutzte sind mittlerweile alle weg.
> Das Angebot "Kompiliere jeden C-Code, den du möchtest und lasse ihn auf
> unserem Server laufen so lange du möchtest" ist doch die größte
> Sicherheitslücke, die man sich vorstellen kann?
Jup, das schwierigste ist aus dem Container auszubrechen. Ich würde dem
zwar auch nicht trauen, aber so extrem simpel ist es auch wieder nicht.
Karsten schrieb:
> Hallo,
> ich wollte mal fragen, ob jemand die Software-Architektur hinter Seiten
> wie https://repl.it/languages/ kennt, wo man online jeden gewünschten
> Python- C- bash- oder sonstigen Code ausführen kann.
Keine ahnung, aber man kann mit bash ja mal nachsehen:
https://repl.it/repls/ExpensiveSentimentalSite
Vermutlich ein x86-64 Linux system:
1 | runner@13255558d281:~$ uname -a
|
2 | Linux 13255558d281 4.13.0-1011-gcp #15-Ubuntu SMP Mon Feb 12 16:29:04 UTC 2018 x86_64 x86_64x86_64 GNU/Linux
|
/etc/fstab ist leer, vermutlich ein container.
Als init system wurde tini verwendet, welches dann /bin/init startet.
Nicht sicher was /bin/init ist, file meint es könnte SYSV sein, ist
vermutlich aber was anderes:
1 | runner@13255558d281:~$ realpath /proc/1/exe
|
2 | /dev/init
|
3 | runner@13255558d281:~$ tr '\0' '\n' /proc/1/cmdline
|
4 | tr: extra operand '/proc/1/cmdline'
|
5 | Try 'tr --help' for more information.
|
6 | runner@13255558d281:~$ tr '\0' '\n' </proc/1/cmdline
|
7 | /dev/init
|
8 | --
|
9 | /bin/init
|
10 | runner@13255558d281:~$ tr '\0' '\n' </etc/environment
|
11 | PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
|
12 | runner@13255558d281:~$ /dev/init -h
|
13 | init (tini version 0.18.0 - git.fec3683)
|
14 | Usage: init [OPTIONS] PROGRAM -- [ARGS] | --version
|
15 | runner@13255558d281:~$ file /bin/init
|
16 | /bin/init: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
|
17 | runner@13255558d281:~$ ls /proc/1/fd
|
18 | 0 1 2
|
tini scheint für docker gedacht zu sein, also vermutlich wird docker
verwendet. /dev/init ist leider ro gemountet. Standard input, output und
error worden nicht geschlossen, sind aber leider pipes, darüber kommen
wir nicht aus dem mountns raus. Mount bestätigt die verwendung von
docker, und das fs wird mit altmodischen linux overlay dateisystemen
bereitgestellt, nud nicht mit aufs oder btrfs oder sowas.
Der client verwendet kein Systemd, aber /sys/fs/cgroup/systemd/ enthält
es, gemountet durch den host. Hostsystem verwendet Systemd.
Internetverbindung mit wget geht. Könnte eventuell nen netten Proxy
abgeben.
Mehr finde ich auf die schnelle nicht über Container und Hostsystem
raus.
Wenn ich sowas machen müsste, würde ich versuchen clang nach WebAssembly
zu kompilieren. Ist aber im moment leider höllisch schwer, das zum
laufen zu kriegen.