Wie finde ich heraus, wo sich der Code der Website befindet?


28

Die Fakten:

  • Es gibt eine Website
  • Diese Website ist über www.example.org zugänglich
  • Es gibt eine EC2-Instanz, die die Website sehr wahrscheinlich beibehält
  • Der Server ist Apache
  • Das Server-Betriebssystem ist Ubuntu
  • Ich habe vollen Zugriff auf den Server (und Sudo-Berechtigungen)
  • Der Server ist ein großes Durcheinander

Das Problem ist, ich habe keine Ahnung, wo ich - einfach ausgedrückt - die index.html / index.php finden soll, die geladen wird.

Wie finde ich heraus, wo sich der PHP- und HTML-Code der Website befindet? Gibt es einen systematischen Ansatz für dieses Problem?


Kennst du den Domainnamen?
the_velour_fog

9
Ja, ich sage es im zweiten Punkt
Raffael

find / -name nameofsomefileonthewebsite.html?
user253751

Antworten:


53

Zunächst sollten Sie überprüfen, welche Websites auf dem Server gehostet werden

# apachectl -t -D DUMP_VHOSTS

Wenn Sie dann eine Site finden, überprüfen Sie die entsprechende Konfigurationsdatei für die Option DocumentRoot. Beispielsweise

# apachectl -t -D DUMP_VHOSTS
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server 192.168.88.87 (/etc/httpd/conf.d/192.168.88.87.conf:1)
         port 80 namevhost 192.168.88.87 (/etc/httpd/conf.d/192.168.88.87.conf:1)
         port 80 namevhost gl-hooks.example.net (/etc/httpd/conf.d/hooks.conf:1)
                 alias example.net
                 alias www.example.net

Sie möchten wissen, wo sich eine Website example.net befindet

# grep DocumentRoot /etc/httpd/conf.d/hooks.conf
    DocumentRoot /vhosts/gl-hooks.example.net/

# cd /vhosts/gl-hooks.example.net/
# ls -la
total 4484
drwxr-xr-x  6 apache apache    4096 Feb 10 11:59 .
drwxr-xr-x 14 root   root      4096 Feb 23 08:54 ..
-rw-r--r--  1 root   root      1078 Dec 19 09:31 favicon.ico
-rw-r--r--  1 apache apache     195 Dec 25 14:51 .htaccess
-rw-r--r--  1 apache apache      98 Dec  7 10:52 index.html

Sollte auch auf der Suche nach Aliasen und Redirects / Rewrites sein

Beachten Sie auch alle Alias-Anweisungen. Zum Beispiel mit folgenden Einstellungen

<VirtualHost *:80>
   ServerName example.net
   ServerAlias www.example.net
   ...
   DocumentRoot /vhosts/default/public_html/
   Alias /api/ /vhosts/default/public_api/
   ...
</VirtualHost>

Wenn Sie auf http://example.net/some.file.html zugreifen, durchsucht Apache die Datei nach / vhosts / default / public_html /, und zwar gleichzeitig mit http://example.net/api/some.file .html Die Datei wird unter / vhosts / default / public_api / angezeigt.

Was ist mit Umschreibungen / Weiterleitungen, insbesondere programmgesteuert (wenn Weiterleitungen durch einen PHP-Code ausgelöst werden)? Ich denke, es gibt keinen einfachen Weg, solche Fälle zu finden.


3
Sollte auch auf der Suche nach Aliasen und Redirects / Rewrites sein.
Bob

3

Versuchen Sie es mit find

find / -type f \( -iname "*index.html*" -o -iname "*index.php*" \) 2> /dev/null

Ansonsten unter der Annahme, dass Apache von Ubuntu-Repositories installiert wurde, schauen Sie in /etc/apache2/sites-available, dh

grep -niR "thedomainname" /etc/apache2/sites-available

Wenn auf der Website ein Apache-VHOST definiert ist, der möglicherweise die Konfigurationsdatei findet, "documentroot"sollten Sie in dieser Datei nachsehen, wo sich der Quellcode befindet


1
Nun ... ich "tat" das - es dauerte 2 Stunden, der Server reagierte fast nicht mehr und ich fand 67 index.html's und fast so viele index.php's. Dieser Ansatz tut es also nicht für mich.
Raffael

2
Es ist eine wirklich schlechte Idee, find in einem solchen Fall zu verwenden
ALex_hha

1
Und wahrscheinlich sollten Sie stattdessen sites-enabled verwenden
ALex_hha

1
index.html ist keine großartige Datei, nach der man suchen sollte. Es gibt einige CMSs, die einen in jedes Verzeichnis einfügen, falls die Verzeichnislisten in Apache nicht deaktiviert sind, sodass immer eine leere Seite geladen wird, anstatt den Verzeichnisinhalt anzuzeigen.
gabe3886

@the_velour_fog Nein, dass es hier sehr kritisch ist, aber das -type fgilt nur für -iname "*index.html*"in Ihrem Befehl. Sollte sein-type f \( -iname "*index.html*" -o -name "*index.php*" \)

2

Eine andere Methode, die zum Debuggen einer Website (oder eines anderen Prozesses in dieser Angelegenheit) nützlich sein kann, ist die Verwendung von lsof(möglicherweise nicht im Pfad befindlichen, häufig in /sbin/lsof).

lsof -s [PID] listet alle Dateien auf, für die der angegebene Prozess ein Handle hat, und kann hilfreich sein, um genau zu sehen, was verwendet wird (dies umfasst Ihre HTML- / PHP-Dateien sowie Protokolldateien und Bibliotheken, die die Site benötigt).


1

Ich habe keine Ahnung, wo ich ... die index.html / index.php finden soll, die geladen wird.

Suchen Sie nach Seitenquelldateien

Ein Ansatz besteht darin, die Site zu durchsuchen, um eine einzigartigere Seite zu finden - sagen wir newcontactform.php - im Idealfall eine Seite, die nicht auf anderen Sites erscheint, die auf demselben Server gehostet werden.

Sie können es dann versuchen

locate newcontactform.php

Wenn dies fehlschlägt, folgen Sie

find / -name newcontactform.php

dies sollte eine überschaubare Liste von Kandidaten ergeben.

Anschließend können Sie die Dateien überprüfen, Unterschiede festlegen und bei Bedarf kleine Änderungen vornehmen (z. B. einen HTML-Kommentar einfügen), um sicherzustellen, dass die Datei tatsächlich die Seite erstellt.

Finde die Configs

Manchmal sind Konfigurationsdateien in der Ausgabe des psBefehls zu sehen. Der schlimmste Fall ist ps -ef | grep -e 'apache|httpd'jedoch, dass eine kreativere Nutzung der psOptionen möglicherweise eine Erkundung wert ist.

Sie können httpd.confan den typischen Orten für Ubuntu und für das Apache httpd-Projekt (die sich unterscheiden können) suchen oder einfach locateund findwie oben verwenden.

Manchmal verweist die Hauptkonfigurationsdatei auf andere Konfigurationsdateien für vhosts. Sie können dies herausfinden, indem Sie die Hauptkonfigurationsdatei identifizieren.

Chronische Fälle

Manchmal führen alte Server eine Vielzahl von Webserver-Daemons aus. In diesem Fall kann es eine Weile dauern, bis alle gefunden wurden und die Konfigurationsdateien gefunden wurden. Eine Kombination der oben genannten Techniken sollte schließlich erfolgreich sein.

Sie können herausfinden, welche Programme über Port 80 usw. empfangsbereit sind netstat -lntp. Oft ist das Auffinden der Binärdateien ein nützlicher Zeiger auf eine Verzeichnisstruktur, die die Konfigurationsdateien enthält.


1

Sie können den Vhost für die gesuchte Domain in der Konfigurationsdatei des Webservers (Apache) - httpd.conf (wahrscheinlich in / etc /) überprüfen. Öffnen Sie einfach die Datei und scrollen Sie durch die Datei, bis Sie die VirtulaHost- Direktive für finden Ihre Domain und dort sehen Sie die DocumentRoot- Direktive - das ist das Dokumentenstammverzeichnis Ihrer Website, der Ort, an dem Sie die Dateien der Anwendung finden.


1

Bitte gehe zu

cd / etc / apache2 / site-avaliable /

Hier finden Sie Ihre Konfigurationsdatei (zB: 000-default.conf)

Bitte öffnen Sie diese Datei / öffnen Sie Ihre Konfigurationsdatei mit

vi 000-default.conf

Dort finden Sie DocumentRoot. Dies ist der Code Ihrer Website

Dies ist die Standard-Conf-Datei. Sie können auch einige Conf-Details überprüfen.


3
Dies ist systemabhängig.
Leichtigkeit Rennen mit Monica

Zusätzlich zum Kommentar von @PreferenceBean wird hier nur die Konfiguration für die Standard-vhosts angezeigt. Es könnte dort viele Vhosts mit nutzlosen Namen geben, die ebenfalls überprüft werden müssen
gabe3886
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.