moritz augsburger: über http verzeichnisstruktur auslesen?

hi,
ist es irgendwie möglich über http die verzeichnisstruktur eines servers auszulesen? und wenn ja wie?
und wie kann man das so einstelles, dass nur noch ein cgi-script das kann?

mfg
moritz augsburger

  1. Hi,

    ist es irgendwie möglich über http die verzeichnisstruktur eines servers auszulesen? und wenn ja wie?

    zum Glück geht das nicht (zumindest nicht nach meinem Verständnis von HTTP)! Die einzige Möglichkeit, eine ungefähre Struktur nachzubilden ist, einen Robot auf die betreffende Site zu schicken, der dann alle lokalen Links verfolgt. Aber das ist auch schon alles. Wäre ja auch echt blöd, wenn jeder die komplette Verzeichnisstruktur meines Webservers kennen würde.

    und wie kann man das so einstelles, dass nur noch ein cgi-script das kann?

    Da ich/wir nicht genau weis/wissen was Du eigentlich machen willst, schreib doch einfach mal was drüber. Vielleicht gibts ja andere Lösungen für Dein Problem.

    Viele Grüße,
    Achim

  2. hi,
    ist es irgendwie möglich über http die verzeichnisstruktur eines servers auszulesen? und wenn ja wie?

    Selbstverständlich ist das möglich, wenn der Server offen wie ein Scheunentor ist.
    Ein Script, das das macht, würde aber - wie ich meine teils zurecht - wieder unter die in diesem Forum nicht geduldete Illegalität fallen.

    Ciao

    W. Pichler

  3. Hallo Moritz,

    ist es irgendwie möglich über http die verzeichnisstruktur eines servers auszulesen?

    Wenn Du damit meinst "durch HTTP-Anforderungen an den Server von einem entfernten Rechner aus", dann lautet die Antwort darauf "nein".

    Das ist übrigens keine Frage der Sicherheitseinstellungen, sondern liegt alleine schon daran, daß ein HTTP-Server üblicherweise eine beliebige, von außen nicht einsehbare Abbildung zwischen URL-Baum und Verzeichnisbaum durchführt (Apache: "Alias").
    Via HTTP kannst Du ggf. den URL-Baum lesen, aber welcher Verzeichnisbaum tatsächlich dahinter liegt, das verbirgt HTTP vor Dir.

    und wenn ja wie?

    Den URL-Baum lesen lassen kannst Du im Prinzip so, wie Du es auch manuell tun würdest:
    1. Rate eine Einsprungstelle (z. B. '/')
    2. Lies das entsprechende Dokument
    3. Extrahiere alle Referenzen aus diesem Dokument, welche auf dieselbe Domain verweisen (das sind nicht nur Links, sondern auch Bilder, Javascript- und CSS-Referenzen, nicht zu vergessen Frames usw.).
    4. Für jedes so gefundene neue (!) Dokument beginne erneut bei 2.

    Such doch mal im WWW nach dem Quelltext von Suchmaschinen-Spidern oder Links-Checkern - beide arbeiten im Wesentlichen nach dem obigen Prinzip. Das ist auch der Grund dafür, warum einige Suchmaschinen mit Framesets nicht klar kommen: Sie extrahieren nur normale Links und ignorieren andere HTML-Tags, die ebenfalls auf weitere Dateien referenzieren würden.

    und wie kann man das so einstelles, dass nur noch ein cgi-script das kann?

    Zunächst einmal: Man kann es sogar so einstellen, daß nicht mal ein CGI-Skript das darf!

    Ein CGI-Skript dürfte auf dem Server, auf dem es installiert ist (und _nur_ dort) statt über HTTP direkt auf Dateien und Verzeichnisse zugreifen - und damit auch den gesamten Verzeichnisbaum einlesen und ausgeben.
    Vorausgesetzt ist dabei allerdings, daß die Benutzerkennung, unter welcher dieses CGI-Skript läuft, das Leserecht auf sämtliche Verzeichnisse der Maschine besitzt - und das wäre in der Tat ein schlecht konfigurierter Webserver, wenn er Dir gleichzeitig erlauben würde, dort eigene CGI-Skripte zu installieren. (Dann hättest Du ggf. auch Leserecht auf die Webserver-Konfiguration.)
    Üblicherweise läuft der Webserver (und die von ihm gestarteten CGI-Skripte ebenfalls) auf einer UNIX-Maschine unter einer Benutzerkennung, welche so gut wie nichts darf. Das ist der Grund, weshalb man bei einigen Providern eigene Dateien, die von einem CGI-Skript bearbeitet werden sollen, zugreifbar für _alle_ Benutzer machen muß.

    Eleganter, aber schwieriger zu installieren ist es, eine Schale um die Ausführung von CGI-Skripten zu legen (CGI-Wrapper), welche dem Aufruf des Skripts aus dem URL erkennen kann, welcher Benutzerkennung dieses Skript gehört, und das Skript dann auch unter genau dieser Benutzerkennung ausführt - dann kann der Besitzer dieses Skripts wenigstens seine eigenen Dateien und Verzeichnisse gegenüber anderen CGI-Benutzern desselben Servers schützen. Es wird dann per Server-Konfiguration gar nicht mehr das eigentliche CGI-Skript, sondern zunächst mal der Wrapper aufgerufen (mit dem Pfad zum Skript als Parameter - der Wrapper wechselt dann auf die gewünschte Benutzerkennung und startet schließlich selbst das eigentliche CGI-Skript), und der direkte Aufruf des CGI-Skripts (welcher dann unter der 'falschen' Benutzerkennung laufen würde) muß explizit unterbunden werden (kein "echtes" /cgi-bin-Verzeichnis mehr, außer für den Wrapper selbst). Eine Methode dazu wäre es z. B., im Apache den URL mit Hilfe von mod_rewrite so dynamisch umzuschreiben, daß der Wrapper davor gesetzt und der Skript-URL als QUERY_STRING übergeben wird.

    Viele Grüße
          Michael

    1. Hallo Moritz,

      ist es irgendwie möglich über http die verzeichnisstruktur eines servers auszulesen?

      Versuchs vielleicht mal damit:

      Perl: http://www.rohitab.com/cgiscripts/cgitelnet.html

      Und das gleiche mit PHP:

      http://www.gimpster.com/php/phpshell/index.php

      Beide funktionieren nahezu auf allen Servern, vorausgesetzt du hast da drauf einen ent
      sprechenden Account.

      Ciao

      Wolfgang Pichler

      1. Hallo Wolfgang,

        Versuchs vielleicht mal damit:
        Perl: http://www.rohitab.com/cgiscripts/cgitelnet.html
        Und das gleiche mit PHP:
        http://www.gimpster.com/php/phpshell/index.php

        auch ein telnet via CGI muß sich an die Berechtigungen von Dateien und Verzeichnissen halten.
        Wenn ein CGI-Skript ein Verzeichnis nicht lesen darf, dann darf auch ein telnet-Dialog uter derselben Benutzerkennung das nicht - und genau das tun diese beiden shells offensichtlich.

        Eine CGI-Shell ist sinnvoll, wenn man selbst keinen telnet- oder (besser) SSH-Zugang hat (wie das vor ca. 18 Monaten beim früheren Provider des Self-Portals noch der Fall war). Damit kann man beispielsweise Daten mit 'tar' auf dem Server archivieren, was alleine über FTP nicht möglich wäre - oder für einen 'dummen' FTP-Client 'unsichtbare' Dateien (mit '.' als erstem Zeichen des Dateinamens) bearbeiten.
        Bedenke aber, daß eine CGI-Shell bestimmte Dinge einer normalen Dialog-Shell nicht wird nachbilden können - ein 'cd' zu simulieren, indem man den Referenzpfad als CGI-Parameter von  Aufruf zu Aufruf durchschleift, ist noch das kleinere Problem, aber versuch mal, mit einer solchen CGI-Shell ein 'su' zu machen ... HTTP ist nun mal kein session-Protokoll.

        Viele Grüße
              Michael