Spieglein, Spieglein an der Wand...
Mirror 0.2.2 ist ein kleiner Server, der HTTP
(Hypertext Transfer Protocol) Requests, die an ihn gerichtet
sind, spiegelt. Es ist ein Multithreading Server, der in der
interpretierten, objektorientierten und dynamisch typisierten
Skriptsprache Ruby geschrieben
wurde.
Spiegelung des HTTP Requests an diesen Server:
GET / HTTP/1.1
User-Agent: CCBot/2.0 (https://commoncrawl.org/faq/)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: br,gzip
Host: mirror.ping.de:8888
Connection: Keep-Alive
Bedeutung der Headerzeilen
Ihre genaue Bedeutung und weitere Einzelheiten des HTTP sind in der
HTTP/1.1 Spezifikation
definiert. Eine grobe Bestimmung der häufiger vorkommenden
Headerzeilen erfolgt in dieser Liste:
- GET, POST und Freunde: Die erste Zeile
eines Requests ist eigentlich keine Headerzeile, sondern hier steht die
Methode nach welcher der Server die Anfrage des Clients beantworten
soll. Die häufigsten sind, GET und POST, die von einem URL gefolgt
werden, die eine Resource angibt. Am Ende steht ab HTTP 1.0 das
gewünschte Protokoll, also z. B. HTTP 1.0 oder HTTP 1.1.
- User-Agent: Diese Headerzeile gehört zu den
interessantesten: Hier steht der Name des verwendeten Clients
und meistens noch genaue Angaben zur Art und Version des vom User
verwendeten Betriebssystem.
- Host: Diese Zeile ermöglicht es einem Webserver
"Virtuelle Hosts" bei Verwendung nur einer
einzigen IP Adresse zu implementieren. Der Webserver entscheidet
aufgrund dieser Zeile welchen Webtree er an den Client des Users
ausliefern soll. Für den User ist das meist völlig
transparent, da er nur verschiedene DNS Namen für ein und
dieselbe IP Adresse eingeben muß.
- Accept: Hier steht welche Medien-Typen der Client
annehmen möchte unter Umständen auch mit einem
Qualitätsfaktor, der angibt, welche bevorzugt werden.
- Accept-*: Durch diese Zeilen werden
Zeichensätze, Kompression, und Sprachen, die sich der Client
wünscht, übermittelt.
- Cookie: Hier steht welche Cookies der Client an
den Server sendet. Auch dieser Server versucht einen
Cookie zu setzen.
- Referer: In dieser Zeile übermittelt der
Client den URL, von der auf diese Website verlinkt wurde. Das ist
eine Zeile, die von Serverbetreibern mit Vorliebe
ausgewertet wird.
- Via: In dieser Zeile steht kommasepariert
welche Stationen an Proxy-Servern ein Request genommen hat, ehe
er am Ziel angekommen ist. Jede Station besteht aus Protokoll,
Protokollversion, IP (mit Portnummer) des Proxies und einem
Kommentar meistens ueber die Art und Version des Proxies.
- X-Forwarded-For: Diese Zeile enthät die
IP-Adresse für die ein Proxy einen Request (vermutlich)
weitergeleitet hat. Unter Umständen steht hier stattdessen
"unknown", falls bei einem Proxy diese Angabe
abgestellt ist.
Der Body des Requests
Im Body eines Requests stehen z.B. die
Formulardaten, die mit der
POST-Methode vom Client an den Server geschickt werden. Die
Formulardaten, welche mit GET verschickt werden, stehen stattdessen
in dem URL hinter dem GET.
Quelle dieses Requests:
Client IP Adresse:Portnummer = 3.237.31.191:55632
DNS Name = ec2-3-237-31-191.compute-1.amazonaws.com
Ident Reply = FAILED
Informationen über die Quelle
Die IP Adresse (Internet Protocol) und die Portnummer von der
die Verbindung zum Server ausging sind natürlich bekannt. Falls
man keinen Proxy verwendet, kann ein Serverbetreiber leicht
herausfinden, von welchem Provider aus gesurft wird.
Lutz Donnerhackes
Whois-Forwarder unter whois.thur.de macht es sogar richtig
einfach, den richtigen Eintrag aus der richtigen Datenbank zu fischen.
Die IP Adresse des Rechners, von dem sie surfen, bzw. des verwendeten
Proxies ergibt dann z.B. dieses Ergebnis.
Desweiteren ist es möglich weitere Informationen herauszufinden,
wenn die IP-Adresse eines Hosts erst einmal bekannt ist: Man kann z. B.
diverse Portscans an diese Adresse richten.
Der DNS Name (Domain Name System) der zugreifenden IP Adresse
ist ebenfalls leicht herauszufinden, falls der Provider des Clientusers
DNS Reverse Lookups unterstützt. (Ansonsten wird in der Quelle
weiter oben auf dieser Seite noch einmal die IP-Adresse angezeigt.)
Mit dem
Ident
Protokoll kann man noch andere interessante Information
gewinnen, z. B. den Usernamen des anfragenden Benutzers, falls
ein identd-Server auf dem Client-Rechner läuft. Unter
Umständen erhält man so stattdessen nur ein
kryptographisches Token, welches etwas aufwendiger zu
entschlüsseln ist.
Es gibt etliche Verfahren herauszufinden, welche Ports eines Hosts
"offen" sind und welche nicht. Falls hinter einem offenen Port
ein Stück defekte Server-Software läuft, ist es für
mehr oder weniger findige Leute möglich einen Remote Exploit auf
Ihrem Rechner durchzuführen und entweder nur den entsprechenden
Service oder den gesamten Rechner zur Einstellung seines Dienstes zu
bewegen. Alternativ kann es für Unbefugte auf diese Weise sogar
möglich sein, in Ihren Rechner einzudringen. Es ist deshalb
für die Sicherheit eines Systems wichtig, so wenige Ports wie
nötig offenstehen zu lassen und diese nach Möglichkeit mit
sicherer Software zu betreiben.
Im folgenden können
Sie die am häufigsten verwendeten Portscanarten auf den Host
anwenden, von dem aus Sie gerade surfen, um von den offenen TCP
(Transmission Control Protocol) Ports ihres Hosts einen Eindruck zu
erhalten. Alle Scanarten betreffen aus Geschwindigkeitsgründen nur
die Ports 1 - 1023.
Achtung! Falls Sie einen
Proxy-Server verwenden, wird dieser Rechner statt Ihrem eigenen
gescannt werden, so daß Sie nichts über die Sicherheit
Ihres Systems erfahren, sondern nur über die des verwendeten
Proxy-Rechners. Bitte nur scannen, wenn Ihre IP-Adresse 3.237.31.191
(ec2-3-237-31-191.compute-1.amazonaws.com) ist oder der Betreiber des Proxy-Rechners keine Einwände
gegen einen Portscan hat.
- TCP Scan: Dieser Scan überprüft
den Status der TCP Sockets eines Zielrechners, indem er einen vollen
TCP-Connect (mit Threeway-Handshake) für jeden gescannten Port
durchführt. Das bedeutet, daß zuerst der scannende Host
einen SYN-Paket an den Zielrechner schickt, dieser mit einem
SYN|ACK-Paket antwortet und ersterer darauf mit einem ACK-Paket zum
Abschluß des Handshakes eine vollständige TCP-Verbindung
aufbaut, falls der gescannte Port offen ist.
- TCP Halfopen Scan: Dieser Scan
ist sozusagen die verkürzte Form des TCP Scans, da hier die
TCP-Verbindung nicht vollständig sondern nur halb geöffnet
wird. Der Threeway-Handshake wird nach dem ersten Antwortpaket des
Zielrechners abgebrochen: Der Port gilt als offen, falls dieses Paket
ein SYN|ACK-Paket war, als geschlossen, falls es ein RST-Paket war.
- Null Scan: Mit diesem Scan können
Sie ebenfalls die offenen TCP-Ports eines Hosts herausfinden. Ein Null
Scan kann auch dann noch offene TCP Ports erkennen, wenn ein
Packetfilter alle TCP-Pakete mit gesetztem SYN-Bit filtert. Ein Port
wird als offen angenommen, falls der gescannte Host nicht auf ein Paket
ohne gesetzte Flags antwortet. Wird ein RST-Paket als Antwort gesendet,
wird der Port als geschlossen markiert. Dieser Scan funktioniert
nicht bei allen Betriebssystemen und kann unter Umständen etwas
länger dauern.
Die Scans selbst wurden mit Hilfe von nmap von Fyodor
durchgeführt, dem wohl besten Portscanner, der zur Zeit frei
verfügbar ist. Man kann ihn als Standalone-Version von hier herunterladen.
Ihre Besuche auf diesem Server werden mitgezählt, indem
der Server in Ihrem Client ein
Cookie
namens mirror zu setzen versucht. Hier ist der
entsprechende Befehl:
Set-Cookie: mirror=1; path=/; expires=Fri, 13 Oct 2023 00:08:26 GMT
Beim wiederholten Reload der Seite sollte das Cookie
oben angezeigt
und sein Wert jeweils inkrementiert werden, falls Sie Cookies in Ihrem
Browser nicht abgeschaltet haben. Die Zahl Ihrer Besuche auf dieser
Website beträgt demnach im Moment: 1.
Im Gegensatz zu dieser recht harmlosen Anwendung können
Cookies auch dazu mißbraucht werden, Ihre Besuche auf
einer Website zu personalisieren, also Ihre Anonymität
aufzuheben. Der Cookie enthält dann einen Schlüssel,
der eine eindeutige Zuordnung zu einem User ermöglicht.
Falls Sie auf einer Webseite z. B. einmal etwas gekauft haben
sollten und Ihre Anschrift oder Emailadresse angegeben haben, kann
es sein, daß Sie unaufgefordert Werbung für bestimmte
Produkte erhalten, obwohl Sie sich beim letzten Besuch auf dieser
Website nur informieren wollten, aber sehr lange auf bestimmte
Seiten geschaut haben. Dies ist besonders bei sehr langlebigen
Cookies mit hoher Expiretime eine Gefahr. Der Cookie von dieser
Website wird sich allerdings schon nach 14 Tagen selbst
vernichten.
Formulare dienen dazu, Eingaben des Benutzers vom Client an
den Server zu übertragen. Formulare gibt es in zwei
Geschmacksrichtungen: Mit der Methode GET und mit der
Methode POST. Mit beiden kann man in den Textfeldern
unten experimentieren und jeweils Submit Query
drücken, um den Request oben gespiegelt zu sehen.
Die GET Methode
Hier wird der URL, die bei einem normalen GET Request verwendet
wird, dazu zweckentfremdet, die Formulardaten an den Server zu
übertragen. Das hat unter anderem den Nachteil, daß
Sie deswegen häufig in Proxy-Logs zu lesen sind.
Wenn Sie in die Felder unten etwas eingeben, werden
die Eingaben oben in der Spiegelung des abgesandten Requests zu
sehen sein. Aber auch versteckte Eingaben (Hidden Input) sind
möglich.
Die POST Methode
Mit dieser Methode werden die Formulardaten im Body des Requests
übertragen. Auch hier sind wieder versteckte Eingaben
möglich. Beide kann man wiederum oben in der Spiegelung des
Requests sehen.
Letzte Worte
Die Idee zu diesem Server ist nicht auf meinem Mist gewachsen,
sondern war ursprünglich eine aus dem Kopf rekonstruierte Replika
von Pascal Giengers "Pascals Headerecho", welches leider
nicht mehr am Netz ist. Inzwischen kann der Server zusätzlich
Portscans der connectenden Hosts durchführen, falls das verlangt
wird.
© Florian Frank <flori@ping.de>