„Zero Term it!“ CLI Gateways zu paste.in-ulm.de

„Zero Term it!“ CLI Gateways zu paste.in-ulm.de

Der Paste-Service des Vereines ist ein unter https://paste.in-ulm.de erreichbarer PrivateBin-Service. Dabei werden die Daten ausschließlich im Browser ver- und entschlüsselt und der Dienstanbieter/Server hat keinerlei Kenntnisse vom Inhalt (aka „zero knowledge“). So ein Service ist nützlich – allerdings setzt er immer den Einsatz von einem Java-Script-fähigen Browser voraus. Im Browser fallen die Art von Daten, die man schnell mal teilen will, nur selten an. Also ist mühsames Copy&Paste mit Maus und/oder Tastatur notwendig. Sowas kann nerven. Und was tun, wenn man auf einem Router, NAS oder einem sonstigen Gerät werkelt, wo es keine Möglichkeit gibt, Daten in einen Broser zu kopieren? Services wie https://termbin.com mögen eine Lösung sein. Aber Klartext auf fremden Servern speichern?

Die vermutliche bessere Alternative ist „Zero Term it!“: Ein Termbin-ähnlicher Service, bei dem der Server „zero knowledge“ vom gespeicherten Inhalt hat!

Realisiert wird dies durch zwei Gateways, die den Paste-Service des Vereins ergänzen: Eins spricht HTTP (Port 80 und 443) und eins TCP (Port 9999 und 123). Beide Gateways können zum Schreiben und zum Lesen von Pastes genutzt werden. Der Inhalt wird dabei von den Gateways ver- bzw. entschlüsselt. Es können somit vorhandene Standardtools wie `curl` oder `netcat` verwendet werden.

Paste erstellen oder holen?

Jeder Inhalt, der zum Gateway gesendet wird, wird Inhalt des Pasts. Werden ausschließlich 87 Zeichen geschickt und haben diese den selben Aufbau, wie eine Paste-URL, wird versucht den Inhalt zu holen und zu entschlüsseln. Gelingt dies, wird der Inhalt zurückgegeben. In allen anderen Fällen wird ein Paste erstellt.

Beispiele

Ein Text mittels `netcat` in ein Paste übertragen und anschließend wieder lesen:

trv@T480s:~$ echo '\o/' | nc 0term.it 9999
https://paste.in-ulm.de/?fdcbabcef466941b#3FbShstpDmPRVoC8cTv3CFsbLmjHM7X9ojWPTr6vs6Lm
trv@T480s:~$ echo https://paste.in-ulm.de/?fdcbabcef466941b#3FbShstpDmPRVoC8cTv3CFsbLmjHM7X9ojWPTr6vs6Lm | nc 0term.it 9999
\o/

Text mittels `curl` in ein Paste übertragen und anschließend wieder lesen:

trv@T480s:~$ echo -e 'one\ntwo\nthree' | curl --data-binary @- 0term.it
https://paste.in-ulm.de/?3c200e93c27280d4#3H2N2Zh3Jpv4oVKN5Fko4nbTvqmXAwfG6XWnNnch9gfX
trv@T480s:~$ curl 0term.it -d https://paste.in-ulm.de/?3c200e93c27280d4#3H2N2Zh3Jpv4oVKN5Fko4nbTvqmXAwfG6XWnNnch9gfX
one
two
three

Man beachte, dass man die Daten mit `–data-binary` sendet. Ansonsten entfernt `curl` Newlines und Carriage-Returns.

Mit `wget` geht sowas natürlich auch: `-q` für `quiet` und `-O -` für die Ausgabe nach STDOUT:

trv@T480s:~$ wget -q 0term.it --post-data '\o/' -O -
https://paste.in-ulm.de/?840429997a40ad97#3T1yh9bEA59gkjJCGtwvgGSYFeNHRL4nWx6yLphqVZkv
trv@T480s:~$ wget -q 0term.it --post-data https://paste.in-ulm.de/?840429997a40ad97#3T1yh9bEA59gkjJCGtwvgGSYFeNHRL4nWx6yLphqVZkv -O -
\o/trv@T480s:~$

Wer kein `curl` oder `wget` zur Hand hat, kann auch den Inhalt einer Datei mit `openssl` schicken:

x=$(cat TEXTDATEI); y=$(echo -n $x | wc -c); echo -e "POST / HTTP/1.0\nHost: 0term.it\nContent-Type: application/x-www-form-urlencoded\nContent-Length: $y\n\n$x" | openssl s_client -crlf -quiet -connect 0term.it:443

Sieht etwas umständlich aus, kann ganz vielleicht bestimmt irgendwann aber mal nützlich sein.

Mehr Beispiele erhält man, wenn man beim HTTP-Gateway anfragt aber keine Daten sendet, was man mit einem Klick auf https://0term.it tut 😉