% Created 2020-01-30 Thu 21:37 % Intended LaTeX compiler: pdflatex \documentclass[presentation]{beamer} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{graphicx} \usepackage{grffile} \usepackage{longtable} \usepackage{wrapfig} \usepackage{rotating} \usepackage[normalem]{ulem} \usepackage{amsmath} \usepackage{textcomp} \usepackage{amssymb} \usepackage{capt-of} \usepackage{hyperref} \usepackage{tabu} \usepackage{minted} \usepackage[english, ngerman]{babel} \hypersetup{pdfauthor="Vasilij Schneidermann", pdftitle="Auf der Suche nach dem verlorenen Internet", colorlinks, linkcolor=, urlcolor=blue} \setminted{breaklines,fontsize=\footnotesize} \usetheme{Rochester} \usecolortheme[RGB={87,83,170}]{structure} \author{Vasilij Schneidermann} \date{Januar 2020} \title{Auf der Suche nach dem verlorenen Internet} \uselanguage{German} \languagepath{German} \hypersetup{ pdfauthor={Vasilij Schneidermann}, pdftitle={Auf der Suche nach dem verlorenen Internet}, pdfkeywords={}, pdfsubject={}, pdfcreator={Emacs 26.3 (Org mode 9.1.9)}, pdflang={Ngerman}} \begin{document} \maketitle \begin{frame}{Outline} \tableofcontents \end{frame} \AtBeginSection{\frame{\sectionpage}} \shorthandoff{"} \section{Intro} \label{sec:org178dea7} \begin{frame}[label={sec:orgd7c89b9}]{Sprecher} \begin{itemize} \item Vasilij Schneidermann, 27 \item Cyber Security Consultant bei der msg systems ag \item mail@vasilij.de \item \url{https://github.com/wasamasa} \item \url{http://brause.cc/} \item \url{http://emacsninja.com/} \end{itemize} \end{frame} \begin{frame}[label={sec:orgef45749}]{Motivation} \begin{itemize} \item Das moderne Web ist eine Zumutung: \begin{itemize} \item Tracking \item Dark Patterns \item Website Obesity \item Paywalls \end{itemize} \end{itemize} \end{frame} \begin{frame}[label={sec:org77b4eb7}]{Antibeispiele} \begin{figure}[htbp] \centering \includegraphics[height=6cm]{img/userinyerface.png} \caption{\url{https://userinyerface.com/}} \end{figure} \end{frame} \begin{frame}[label={sec:orgc0f7241}]{Antibeispiele} \begin{figure}[htbp] \centering \includegraphics[height=6cm]{img/ngate.png} \caption{\url{http://n-gate.com/about/}} \end{figure} \end{frame} \begin{frame}[label={sec:org4002ebe}]{Antibeispiele} \begin{figure}[htbp] \centering \includegraphics[height=6cm]{img/bitreich.png} \caption{\url{http://bitreich.org/}} \end{figure} \end{frame} \begin{frame}[label={sec:org898b6f4}]{Web 1.0} \begin{figure}[htbp] \centering \includegraphics[height=6cm]{img/larrywall.png} \caption{\url{http://www.wall.org/~larry/}} \end{figure} \end{frame} \begin{frame}[label={sec:org62ac378}]{Web 1.0} \begin{figure}[htbp] \centering \includegraphics[height=6cm]{img/donaldknuth.png} \caption{\url{https://www-cs-faculty.stanford.edu/~knuth/}} \end{figure} \end{frame} \begin{frame}[label={sec:org4ccaad1}]{Web 1.0} \begin{figure}[htbp] \centering \includegraphics[height=6cm]{img/kuttingedge.png} \caption{\url{https://kuttingedgeklinik.neocities.org/}} \end{figure} \end{frame} \begin{frame}[label={sec:orga691142}]{Web 0.5} \begin{itemize} \item Geht es noch schlichter? \item Ja, wenn man auf HTTP, HTML, CSS und JavaScript verzichtet \item Es gibt andere Protokolle als HTTP \item Gopher zum Beispiel \item Nutzt das noch jemand und wofür? \end{itemize} \end{frame} \section{Kurze Einführung in Gopher} \label{sec:org7d4a77a} \begin{frame}[label={sec:org25ff1cd}]{Protokolldefinition} \begin{itemize} \item Textuelles Protokoll \item RFC 1436: The Internet Gopher Protocol (Informational) \item RFC 4266: The Gopher URI Scheme (Proposed Standard) \item Es existieren einiges an Lücken im RFC \item Ein "Living" Standard also? \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:orge66754f}]{Protokollfunktionsweise} \begin{itemize} \item Client verbindet sich mit Server über TCP auf Port 70 \item Client sendet Selektor gefolgt von \texttt{\textbackslash{}r\textbackslash{}n} \item Server antwortet mit einem textuellen Menü oder sendet eine Datei \item Einfachster Client: \texttt{echo -ne '\textbackslash{}r\textbackslash{}n' | nc hostname.tld 70} \item Hierarchische Struktur ähnelt einem Dateisystem \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:org19d6da5}]{Beispiel einer Gopher-Session} \begin{minted}[]{bash} $ echo -ne '\r\n' | nc gopher.oldfart.eu 70 | head -n5 iWelcome to gopher.oldfart.eu fake (NULL) 0 i fake (NULL) 0 1Blog articels /blog gopher.oldfart.eu 70 0Has the KSK rolled? /ksk gopher.oldfart.eu 70 1Other gopher sites /links gopher.oldfart.eu 70 $ echo -ne '/links\r\n' | nc gopher.oldfart.eu 70 | head -n5 iSome links to get you started: fake (NULL) 0 i fake (NULL) 0 1jpmens / serf.jpmens.net 70 1Pygopherd Home /devel/gopher/pygopherd gopher.quux.org 70 1Quux.Org Mega Server / gopher.quux.org 70 \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org2b175cf}]{Aufbau eines Menüs} \begin{itemize} \item Erstes Zeichen symbolisiert die Art des Eintrags \item Tabulator-gretrennte Felder: Text, Selektor, Host, Port \end{itemize} \begin{minted}[]{text} iWelcome to gopher.oldfart.eu\tfake\t(NULL)\t0 i\tfake\t(NULL)\t0 1Blog articels\t/blog\tgopher.oldfart.eu\t70 0Has the KSK rolled?\t/ksk\tgopher.oldfart.eu\t70 1Other gopher sites\t/links\tgopher.oldfart.eu\t70 \end{minted} \end{frame} \begin{frame}[label={sec:orge48992c}]{Arten von Menüeinträgen} \begin{itemize} \item 0: Text \item 1: Menü \item 3: Fehler \item 7: Suche \item 9: Binary \item I: Bild \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:org75853ba}]{Selektoren} \begin{itemize} \item Leere Selektoren sind immer gültig \item Oft spiegeln Selektoren ein Dateisystem wieder \item Dies ist nicht zwangsläufig der Fall, \texttt{/} kann ebenso gut einen Fehler werfen \item Im Zweifelsfall einfach Selektoren wie sie im Menü stehen nutzen \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:org359984a}]{Suche} \begin{itemize} \item Suchselektoren verwenden \texttt{\textbackslash{}t} als Trenner für den Suchbegriff \item Suchselektor + dynamisch generierte Seite = interaktive Anwendung \item Veronica-2 Suchmaschine: \texttt{echo -ne /v2/vs\textbackslash{}temail\textbackslash{}r\textbackslash{}n | nc floodgap.com 70} \item Gästebuch: \texttt{echo -ne /guestbook\textbackslash{}tHello\textbackslash{}r\textbackslash{}n | nc dread.life 70} \end{itemize} \end{frame} \begin{frame}[label={sec:org4f46de7}]{Gopher-URLs} \begin{itemize} \item gopher://host.tld:port/type/selector\%09query \item Startseite: gopher://87.145.6.138 \item Alternativer Port: gopher://rico.sytes.net:7070 \item Menü: gopher://richardf.synchro.net/1grp:local \item Datei: gopher://gopher.wdj-consulting.com:70/1/retro \item Suche: gopher://ratthing.com/7/guestbook.cgi\%09Hello \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:org3e11608}]{Kompatibilität mit HTTP} \begin{itemize} \item Ein Gopher-Server kann theoretisch auf HTTP-Requests antworten \item Erste Zeile eines HTTP-Requests: \texttt{GET / HTTP/1.1} \item Dies kann als Selektor interpretiert werden \item Umgekehrt gibt es die Möglichkeit auf HTTP-Inhalte zu verlinken \item Typ: \texttt{h}, Selektorsyntax: \texttt{URL:http://ix.de/} \end{itemize} \end{frame} \section{Einmal das Internet durchsuchen} \label{sec:org7f784f2} \begin{frame}[label={sec:orgf3233b5}]{Gibt es nicht schon Suchmaschinen?} \begin{itemize} \item Tatsächlich, ja \item \url{https://www.shodan.io/} ist die bekannteste, Fokus auf IoT und ICS \item Besonders geschätzt als Hackerbelustigung (IP-Cams insbesondere) \item Alternativen: \begin{itemize} \item \url{https://www.binaryedge.io/} (Unternehmenstauglich) \item \url{https://www.zoomeye.org/} (Chinesisch) \item \url{https://fofa.so/} (Chinesischer) \end{itemize} \item Aufgrund von APIs besonders interessant \end{itemize} \end{frame} \begin{frame}[label={sec:org32b6511}]{Geht es besser?} \begin{itemize} \item Man kann sich ein spezialisiertes Shodan™ bauen \item Zutaten: \begin{itemize} \item Mächtige Internetleitung \item Immunität vor böser Post \item Suche nach Servern die auf Port 70 lauschen \item Herunterladen von Menüs \item Speichern von Menüs \item Durchsuchen von Menüs nach interessanten Daten \end{itemize} \end{itemize} \end{frame} \begin{frame}[label={sec:org2925f9e}]{Internetanbindung} \begin{itemize} \item Mir wurde des öfteren empfohlen solche Experimente auf dem Chaos Communication Congress zu wagen: \begin{itemize} \item Gute Internetanbindung \item Kurzweilige Veranstaltung \item Abuse-Briefe gehen ins Leere \item Viele Spezialisten™ vor Ort \end{itemize} \item Alternativ: Einen oder mehr Server mieten, Datenlast geschickt verteilen und koordinieren \end{itemize} \end{frame} \begin{frame}[label={sec:org684092f}]{Legale Bedenken} \begin{itemize} \item Portscans sind in einer rechtlichen Grauzone \item Gängige Interpretation: Vorbereitung eines Hackversuches \item Teile des Internets reagieren eher angespannt darauf: \url{https://github.com/robertdavidgraham/masscan/blob/master/data/exclude.conf} \item Situation zu Banner Grabbing ist eher unklar \item Wenn das Banner "AUTHORIZED ACCESS ONLY" sagt, sollte man vielleicht das System in Ruhe lassen \item Meine Absicht ist eine Erhebung, ähnlich einer Suchmaschine \item Publikation der Daten ist fragwürdig (kein robots.txt-Äquivalent) \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:org9a1339c}]{Portscan} \begin{itemize} \item Klassisches \texttt{nmap} ist toll, aber zu langsam \item Tools wie \texttt{masscan} können mit der richtigen Hardware und Treibern die IPv4-Range innerhalb von 5 Minuten durchsuchen \item Alternatives Tool: \texttt{zmap} \item Größter Nachteil: Unpräzise im Vergleich zu \texttt{nmap} \item Ich habe von einer Gruppe Spezialisten™ einen Portscan erhalten \item Menge an Hosts: 3154751 (44M IP-Adressen) \item Übungsaufgabe: Eigenes Tool bauen \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:org60dee07}]{Banner Grabbing} \begin{itemize} \item Idee: An jede IP-Adresse \texttt{\textbackslash{}r\textbackslash{}n} schicken, Antwort in strukturierter Form speichern \item Problem: Naive Herangehensweise dauert länger als die Veranstaltung \item Lösung: Das \texttt{zmap}-Projekt bietet unter anderem \texttt{zgrab2} an \item Es speichert Banner mit hoher Parallelisierung und anpassbaren Timeouts als JSON \item \texttt{zgrab2 banner -p70 -f 70.targets -o 70.banners -t1} \item Mit einer Sekunde Timeout dauert es knapp eine Stunde alle Hosts zu kontaktieren \item Für die wenigen Hosts die nach Gopher aussehen, kann man die Banner mit einem längeren Timeout erneut herunterladen \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:org5555011}]{Aufbewahrung der Daten} \begin{itemize} \item JSON ist strukturiert, aber nicht platzsparend \item Repräsentation von binären Daten ist schwierig (Unicode lässt grüßen) \item \texttt{zmap} bietet ein eigenes binäres Format an, Parsing ist schwierig \item Datenbanken sind eine spannende Option \begin{itemize} \item Relationale Datenbanken erlauben mächtige Analyse \item Key-Value Stores sind sehr einfach, benötigen aber individuelle Werkzeuge \item NoSQL\ldots{} Vielleicht ein andermal \end{itemize} \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:orgf5f528b}]{Analyse und Tooling} \begin{itemize} \item \texttt{jq} ist toll um JSON zu verarbeiten \item DBM ist ein stupider Key-Value Store \item Werkzeug der Wahl: Shell-Einzeiler und kleine Ruby-Skripte (<200SLOC) \end{itemize} \end{frame} \section{Wer lauscht auf Port 70?} \label{sec:org77f3be3} \begin{frame}[fragile,label={sec:orgb856d43}]{Filterung von Bannern} \begin{itemize} \item Nicht alle Services schicken ein Banner zurück \item \texttt{jq -c 'select(.data.banner.result.banner and .data.banner.status =} "success")' 70.banners > 70.banners.success= \item 13300 Banner (0,4\%) bleiben danach übrig \item Das können aber unmöglich alles Gopher-Services sein? \item Ungeklärte Frage: Was ist mit den restlichen IP-Adressen? \item 200 SLOC Ruby zum Kategorisieren von Bannern in separate Dateien \item nmap hat eine schöne Liste: \url{https://svn.nmap.org/nmap/nmap-service-probes} \end{itemize} \end{frame} \begin{frame}[label={sec:orge4d65ab}]{Aufschlüsselung der Verteilungen} \begin{center} \begin{tabular}{lrl} Percent & Count & Filename\\ \hline 49.2\% & 6543 & 70.banners.unknown\\ 24.0\% & 3190 & 70.banners.http\\ 13.5\% & 1798 & 70.banners.ssh\\ 5.2\% & 694 & 70.banners.gopher\\ 2.3\% & 305 & 70.banners.ftp\\ 1.3\% & 178 & 70.banners.imap\\ 1.1\% & 151 & 70.banners.smtp\\ 1.1\% & 142 & 70.banners.pop3\\ 0.7\% & 93 & 70.banners.telnet\\ 0.5\% & 63 & 70.banners.vnc\\ 0.4\% & 50 & 70.banners.misc\\ 0.4\% & 48 & 70.banners.ipcam\\ 0.3\% & 46 & 70.banners.mysql\\ \end{tabular} \end{center} \end{frame} \begin{frame}[label={sec:org4840c6f}]{Honeypots} \begin{itemize} \item Ganze 694 Banner sehen nach Gopher aus \item Warum würde jemand E-Mail auf Port 70 betreiben? \item Shodan erlaubt den gesamten Host zu prüfen \item Shodan zeigt für viele dieser Hosts identische Banner auf 30-40 verschiedenen Ports an \item Fun Fact: Shodan hat einen Honeyscore™ von 0 für diese Systeme \item Von Interaktion wird abgeraten \end{itemize} \end{frame} \begin{frame}[label={sec:org14ac2a8}]{Honeypot} \begin{figure}[htbp] \centering \includegraphics[height=6cm]{img/honeypot.png} \caption{Shodan} \end{figure} \end{frame} \begin{frame}[fragile,label={sec:orgfd247cb}]{HTTP-Server} \begin{minted}[]{text} Server: Boa/0.92o Server: CompuOffice Webserver/2.0.0.0 Server: EchoLink/2.0 # Radio Server: Genetic Lifeform and Distributed Open Server 1.4.2 Server: Microsoft-Cassini/1.0.0.0 # MS CRM Server: RealVNC/E4 Server: RStudio Server: Symantec Endpoint Protection Manager Server: VNC Server Enterprise Edition/E4.4.1 (r12183) Server: WEBrick/1.3.1 (Ruby/1.9.3/2011-10-30) \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org163f327}]{Embedded Web Services} \begin{minted}[]{text} Server: alphapd/2.1.8 # IPCam Server: AVR_Small_Webserver Server: axhttpd/1.5.3 # router Server: BlueIris-HTTP/1.1 # IPCam Server: DVR Webcam daemon 1.1 / NES Technology., Inc. Server: Ethernut 4.6.3.0 Server: Henry/1.1 # telephony Server: mxhttpd/2.19-MX Apr 11 2019 # IPCam Server: thttpd/2.04 10aug98 Server: TibetSystem Server 2.0 # DVR \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org2b94005}]{Telnet} \begin{minted}[]{text} Authentication required This is an unrestricted telnet server.\r\nPlease do not user for production purposes\r\n Telnet Disabled. Error: Must authenticate before using this service. \end{minted} \end{frame} \begin{frame}[fragile,label={sec:orgb77be27}]{Andere Kuriositäten} \begin{minted}[]{text} Asterisk Call Manager/2.8.0 # telephony # ODYSSEY_E receiver ready # gps Crestron Terminal Protocol Console Opened # home automation Welcome to the TeamSpeak 3 ServerQuery interface WinAQMS Data Server V2.3.71 # medical # medical \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org3eb8f1d}]{Römer geht nach Hause} \begin{minted}[]{text} YOUR CONNECTION ATTEMPT HAS BEEN LOGGED AND SECURITY TEAM HAS BEEN ALERTED CONNECTION ATTEMPT HAS BEEN LOGGED *** GO OUT, YOU STUPID N****R! YOUR CONNECTION ATTEMPT HAS BEEN LOGGED. GO AWAY. # portsentry \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org5f0e1ad}]{Hollywood lässt grüßen} \begin{itemize} \item \texttt{Siemens BAU Task Diagnostics Delta (50) SnapShots} \item Shodan zeigt einen offenen UDP-Port für ein "Siemens BACnet Field Panel" \item \url{https://en.wikipedia.org/wiki/BACnet} \end{itemize} \begin{quote} BACnet was designed to allow communication of building automation and control systems for applications such as heating, ventilating, and air-conditioning control (HVAC), lighting control, access control, and fire detection systems and their associated equipment. \end{quote} \end{frame} \begin{frame}[label={sec:org2d27039}]{Hollywood lässt grüßen} \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{img/sprinklers.jpg} \caption{Hackers (1995)} \end{figure} \end{frame} \section{Was gibt es im Gopherspace?} \label{sec:org6b90bf7} \begin{frame}[label={sec:org4e25a5a}]{Bekannte Server} \begin{itemize} \item Debian bietet Pygopherd und Gophernicus zur Installation an \item Viele Menschen bauen ihre eigenen Server \item Manche Services bieten nebenbei noch Gopher an \item Fingerprinting ist auf viele Weisen möglich: \begin{itemize} \item Menüeinträge \item Fehlermeldungen \item Erwähnt im Bannertext \item Hosting vom eigenen Quellcode \item Leute anschreiben \end{itemize} \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:org86e11a0}]{Pygopherd} \begin{minted}[]{text} Welcome to Pygopherd! You can place your documents in /var/gopher for future use. You can remove the gophermap file there to get rid of this message, or you can edit it to use other things. (You'll need to do at least one of these two things in order to get your own data to show up!) Some links to get you started: Pygopherd Home Quux.Org Mega Server The Gopher Project Traditional UMN Home Gopher Hello World Welcome to the world of Gopher and enjoy! \end{minted} \end{frame} \begin{frame}[fragile,label={sec:orge2c55e0}]{Pygopherd} \begin{minted}[]{bash} $ ./bannersearch.rb banners '~pygopherd' | wc -l 63 # self-advertising $ ./bannersearch.rb banners type:i selector:fake 'host:(NULL)' | wc -l 170 # revealing info line $ ./bannersearch.rb banners 'Welcome to Pygopherd!' | wc -l 30 # uncustomized \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org5408c6a}]{Gophernicus} \begin{minted}[]{text} Welcome to Gophernicus! [...] Generic information: current time...: Sun Jan 26 18:04:17 CET 2020 your ip address: 87.79.236.180 server uptime..: 632 days server version.: Gophernicus/1.4 server platform: Debian/6.0 x86_64 description....: Server configuration: config file....: /etc/inetd.conf server hostname: ****** root directory.: /var/gopher running as user: nobody output charset.: US-ASCII output width...: 70 characters _________________________________________________________________ Gophered by Gophernicus/1.4 on Debian/6.0 x86_64 \end{minted} \end{frame} \begin{frame}[fragile,label={sec:orgc149160}]{Gophernicus} \begin{minted}[]{bash} $ ./bannersearch.rb banners '~gophernicus' | wc -l 119 # self-advertising $ ./bannersearch.rb banners type:i host:null.host port:1 | wc -l 164 # revealing info line $ ./bannersearch.rb banners 'Welcome to Gophernicus!' | wc -l 15 # (minimal) customization \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org2564fbd}]{Gophernicus} \begin{itemize} \item Interessante Bannerzeile: "Gophered by Gophernicus/ on " \item Anzahl an Servern mit einer solchen Zeile: \texttt{./bannersearch.rb banners 'Gophered by Gophernicus' on | wc -l \# 113} \item Zeit für Popco(r)n \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:org39246ca}]{Gophernicus} \begin{minted}[]{bash} $ ./bannersearch.rb banners 'Gophered by Gophernicus' on | jq -r '.matches[0].text|split("on ")[1]|split("/")[0]' | sort | uniq -c | sort -rn \end{minted} \begin{center} \begin{tabular}{rlrl} Count & OS & Count & OS\\ \hline 27 & Debian & 3 & MacOSX\\ 23 & Ubuntu & 2 & Fedora\\ 20 & OpenBSD & 1 & Peppermint\\ 9 & NetBSD & 1 & Linux\\ 8 & FreeBSD & 1 & Gentoo\\ 6 & Raspbian & 1 & Devuan\\ 5 & Slackware & 1 & CentOS\\ 3 & Welcome & 1 & Arch\\ \end{tabular} \end{center} \end{frame} \begin{frame}[fragile,label={sec:org190dd5d}]{GoFish} \begin{itemize} \item Server mit verräterischem Menüeintrag: "Configure\_GoFish" \end{itemize} \begin{minted}[]{bash} $ ./bannersearch.rb banners '~configure_gofish' | wc -l 4 \end{minted} \end{frame} \begin{frame}[fragile,label={sec:orgbcbd251}]{GoFish} \begin{minted}[]{text} Welcome to the GoFish Gopher Server! ------------------------------------ This file is a roadmap of how to add content to your shiny new gopher server. Most of the real documentation is in the form of man pages which where provided as part of the GoFish package. For the really impatient: 1) Add some files and/or directories to /srv/gopher 2) Run `mkcache -r' 3) Sit back and wait for the hits \end{minted} \end{frame} \begin{frame}[fragile,label={sec:orgb8f2e0f}]{Bulletin Board Systems} \begin{itemize} \item Ja, sie existieren noch, wenn auch auf Port 23 \item Manche haben ein Gopher-Interface auf Port 70 \item Menüeinträge verweisen gerne auf andere BBS-Instanzen (Local, Fidonet) \item "Synchronet Gopher Service" hat Systemeinträge wie "System Statistics", "System Time", "Version Information" \end{itemize} \begin{minted}[]{bash} $ ./bannersearch.rb banners '~text:^local|fidonet$' | wc -l 63 $ ./bannersearch.rb banners '^System Statistics|Version Information$' | wc -l 54 \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org466a4bb}]{Marke Eigenbau} Es ist viel zu einfach eigene Server zu bauen \begin{minted}[]{text} This gopher server is a PDP-11/93 running GOS, my gopher server for RSX-11M. This site runs on a Beaglebone Black using a server written in assembly. port70 - a Gopher server (RFC-1436) written in Lua \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org864d139}]{Ungewöhnliche Ports} \begin{minted}[]{bash} $ ./bannersearch.rb banners '!port:70' '!type:i' | wc -l 39 $ ./bannersearch.rb banners '!port:70' '!type:i' | jq -r '.matches[].port' | sort | uniq -c | sort -rn | head \end{minted} \begin{center} \begin{tabular}{rrrr} Count & Port & Count & Port\\ \hline 21 & 80 & 3 & 7006\\ 20 & 0 & 3 & 7005\\ 8 & 23 & 3 & 7003\\ 6 & 7070 & 2 & 9999\\ 4 & 105 & 2 & 2323\\ \end{tabular} \end{center} \end{frame} \begin{frame}[fragile,label={sec:org272ad41}]{ASCII Art} \begin{minted}[]{text} ____----------- _____ \~~~~~~~~~~/~_--~~~------~~~~~ \ `---`\ _-~ | \ _-~ <_ | \[] / ___ ~~--[""] | ________-------'_ > /~` \ |-. `\~~.~~~~~ _ ~ - _ ~| ||\% | | ~ ._ ~ _ ~ ._ `_//|_% \ | ~ . ~-_ /\ `--__ | _-____ /\ ~-_ \/. ~--_ / ,/ -~-_ \ \/ _______---~/ ~~-._< \ \`~~~~~~~~~~~~~ ##--~/ | \ \ C F L A G S \ \ \ ) |`------##---~~~~-~ ) | ~-_/_/ ~-_/_/ \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org811a8d7}]{ASCII Art} \begin{minted}[]{text} /--------------------------------------------------\ | Welcome to eyeblea.ch, the Melbourne home of the | | Gopher and IRC revival! | \--------------------------------------------------/ \ \ ,_---~~~~~----._ _,,_,*^____ _____``*g*\"*, / __/ /' ^. / \ ^@q f [ @f | @)) | | @)) l 0 _/ \`/ \~____ / __ \_____/ \ | _l__l_ I } [______] I ] | | | | ] ~ ~ | |_____________________________| \end{minted} \end{frame} \begin{frame}[fragile,label={sec:orgbaf65ff}]{ASCII Art} \begin{minted}[]{text} _____ _ _ ____ _ ___ _ ____ | ___| | | |/ ___| |/ / | | | _ \ | |_ | | | | | | ' /| | | | |_) | | _| | |_| | |___| . \| |_| | __/ |_| \___/ \____|_|\_\\___/|_| S O L U T I O N S \end{minted} \end{frame} \begin{frame}[fragile,label={sec:orgdc3a291}]{Suchfelder} \begin{minted}[]{bash} $ ./bannersearch.rb banners type:7 | jq -r '.matches[].text' | sort | uniq \end{minted} \begin{minted}[]{text} ASCII banner generator Ask the Magic 8 Ball Convert an HTML page to gopher Create a new account JPG to ASCII convertor (input: URL ending in .jpg) PDF viewer (input: URL ending in .pdf) WEATHER FORECAST \end{minted} \end{frame} \begin{frame}[fragile,label={sec:orgd8d7a81}]{Spiele} \begin{minted}[]{text} ShadowGate multi user dungeon is a large text-based Role Playing game derived from the Dungeons and Dragons [...] Welcome to the Mare Tranquillitatis People's Circumlunar Zaibatsu, an ideologically decriminalized world [...] You wake up slowly from a dream about angry bees. Your phone vibrates noisily next to your bed [...] You are at a dead end of a dirt road. The road goes to the east. Choose Your Own Adventure (anonradio) Play: Klondike (Turn One) 60 MORE Gopher Solitaire Games! \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org9d84000}]{Phlogs} Die einen haben Weblogs (AKA Blogs), die anderen Phlogs\ldots{} \begin{minted}[]{bash} $ ./bannersearch.rb banners '~phlog' type:10 | wc -l 98 $ ./bannersearch.rb banners '~phlog' type:10 | jq -r '.matches[].text' | shuf | head Link Phlog Phlog Roll Phlog My Phlog Phlog My phlog microphlog Beastie Boy - phlog about Unix/BSD, Emacs, Lisp and intersting things Ferment Phlog Kara and Michael\'s Phlog \end{minted} \end{frame} \begin{frame}[label={sec:org15f0cc6}]{Mojibake} \begin{itemize} \item Leider sagt der Standard nichts über Encodings \item Viele Services verwenden ASCII oder UTF-8 \item Es gibt eine handvoll Seiten aus Russland und Taiwan mit unbekannten Encodings \item Manche kündigen das Encoding des folgenden Textes auf Englisch an \item i18n bleibt ein ungelöstes Problem \end{itemize} \end{frame} \begin{frame}[label={sec:org37e1c03}]{Kaputte Links} \begin{itemize} \item Der Standard sieht Menüeinträge nur mit Hosts vor \item Menüeinträge auf den eigenen Server können veralten \item Kein Äquivalent zu relativen/absoluten Links \item Host kann händisch korrigiert werden \end{itemize} \end{frame} \begin{frame}[label={sec:orgc7c9dd5}]{Zutritt verboten!} \begin{itemize} \item Protokoll sieht keinerlei Authentisierung vor \item Man könnte theoretisch etwas mit Suchen und CGI bauen\ldots{} \item Ganze zwei Seiten zeigen "Forbidden!" an \end{itemize} \end{frame} \begin{frame}[fragile,label={sec:orgef8226a}]{Zutritt verboten!} \begin{minted}[]{text} *** AUTHORIZED ACCESS ONLY *** This is a private Gopher server. Please log out immediately if you have not been explicitly given permission to this server. \end{minted} \end{frame} \begin{frame}[fragile,label={sec:orgfc77921}]{Hacker} \begin{minted}[]{text} This is a Gopher server maintained by Astr0 for the hackerfraternity You've reached the first checkpoint in this this hacker challenge. Writeups for CTF events and related challenges Welcome to the Security Diary flag{do_you_know_gopher?} The Final Exam Payload \end{minted} \end{frame} \begin{frame}[fragile,label={sec:org5b2f7f3}]{Anderer interessanter Kram} \begin{minted}[]{text} If you came from the Sysadmin Wanted ad, look here Welcome to the p70.us URL shortening service! Gopherddit -> simple gopher interface to Reddit by gluon Leafly is the world's largest cannabis information resource [...] Welcome to the home of SCC, Simple C Compiler. Einwohnergemeinde Zermatt taz.de Die Tageszeitung Welcome to Devuan \end{minted} \end{frame} \section{Outro} \label{sec:orgd3acb31} \begin{frame}[label={sec:org0479e8e}]{Mögliche nächste Schritte} \begin{itemize} \item Besseres Fingerprinting \item Suche und CGI \item Sicherheitslücken entdecken und CVEs einreichen \item Suchmaschinenbau \item Mehr Statistiken \item Visualisierungen \item \ldots{} \end{itemize} \end{frame} \begin{frame}[label={sec:orgea3184b}]{Fragen?} \end{frame} \end{document}