¿Cómo averiguo dónde reside el código del sitio web?

28

Los hechos:

  • hay un sitio web
  • Se puede acceder a este sitio web a través de www.example.org
  • hay una instancia EC2 que muy probablemente mantiene el sitio web
  • el servidor es Apache
  • el sistema operativo del servidor es Ubuntu
  • Tengo acceso completo al servidor (y privilegios de sudo)
  • el servidor es un gran desastre

El problema es que no tengo idea de dónde, simplemente, encontrar el index.html / index.php que se carga.

¿Cómo puedo averiguar dónde encontrar el código PHP y HTML del sitio web? ¿Existe un enfoque sistemático para este problema?

Raffael
fuente
conoces el nombre de dominio?
the_velour_fog
99
sí, lo digo en el segundo punto
Raffael
find / -name nameofsomefileonthewebsite.html?
immibis

Respuestas:

53

En primer lugar, debe verificar qué sitios web están alojados en el servidor

# apachectl -t -D DUMP_VHOSTS

Luego, cuando encuentre un sitio, verifique el archivo de configuración correspondiente para la opción DocumentRoot. Por ejemplo

# 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

Desea saber dónde reside un sitio web example.net

# 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

También debe estar atento a los alias y redireccionamientos / reescrituras

También debe prestar atención a las directivas de alias. Por ejemplo con la siguiente configuración

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

Cuándo accederá a http://example.net/some.file.html - apache buscará el archivo en / vhosts / default / public_html /, al mismo tiempo con http://example.net/api/some.file .html el archivo se verá en / vhosts / default / public_api /.

¿Qué pasa con las reescrituras / redirecciones, especialmente programáticas (cuando las redirecciones son activadas por algún código php), creo que no hay una manera fácil de encontrar tales casos?

ALex_hha
fuente
3
También debe estar atento a los alias y redireccionamientos / reescrituras.
Bob
3

Intenta usar find

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

De lo contrario, suponiendo que Apache se haya instalado desde los repositorios de Ubuntu, mire /etc/apache2/sites-available, es decir

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

Si el sitio web tiene un Apache VHOST definido, que podría ubicar el archivo de configuración, entonces busque en ese archivo para que "documentroot"esto le indique la ubicación del código fuente

the_velour_fog
fuente
1
bueno ... "hice" eso: tardó 2 horas, el servidor casi dejó de responder y encontré 67 index.html y casi tantos index.php. Entonces ese enfoque no lo está haciendo por mí.
Raffael
2
Es una muy mala idea usar find en ese caso
ALex_hha
1
Y probablemente deberías usar sitios habilitados en su lugar
ALex_hha
1
index.html no es un gran archivo para buscar. Hay algunos CMS que ponen uno en cada directorio en caso de que las listas de directorios no estén desactivadas en Apache, por lo que siempre cargará una página en blanco en lugar de mostrar el contenido del directorio.
gabe3886
@the_velour_fog No, es súper crítico aquí, pero -type fsolo se aplica -iname "*index.html*"en tu comando. Debería ser-type f \( -iname "*index.html*" -o -name "*index.php*" \)
BroSlow
2

Otro método, que puede ser útil para depurar un sitio web (o cualquier proceso para el caso) es usar lsof(que puede no estar en la ruta, comúnmente se encuentra en /sbin/lsof)

lsof -s [PID] enumerará todos los archivos que el proceso dado maneja y puede ser útil para ver exactamente qué se está utilizando (esto incluye sus archivos html / php, así como los archivos de registro y las bibliotecas que el sitio necesita)

Centimane
fuente
1

No tengo idea de dónde ... encontrar el index.html / index.php que se carga.

Busque los archivos fuente de la página

Un enfoque es navegar por el sitio para encontrar una página más única, digamos newcontactform.php, idealmente una que sea poco probable que aparezca en otros sitios alojados en el mismo servidor.

Entonces puedes intentar

locate newcontactform.php

si eso falla, sigue

find / -name newcontactform.php

esto debería producir una lista manejablemente pequeña de candidatos.

Luego puede inspeccionar los archivos, hacer diferencias y, si es necesario, probar pequeños cambios (por ejemplo, insertar un comentario HTML) para verificar que el archivo realmente produce la página.

Encuentra las configuraciones

A veces, los archivos de configuración son evidentes en la salida del pscomando. El peor de los casos es que vale la pena explorar ps -ef | grep -e 'apache|httpd'un uso más creativo de las psopciones.

Puede buscar httpd.confen las ubicaciones típicas de Ubuntu y para el proyecto httpd de Apache (que puede diferir) o simplemente usar locatey findcomo se indica arriba.

A veces, el archivo de configuración principal se refiere a otros archivos de configuración para vhosts. Puede resolver esto identificando el archivo de configuración principal.

Casos crónicos

A veces, los servidores antiguos ejecutan una variedad de demonios de servidor web. En ese caso, puede llevar un tiempo encontrarlos a todos y determinar dónde están sus archivos de configuración. Una combinación de las técnicas anteriores eventualmente debería tener éxito.

Puede encontrar qué programas están escuchando en el puerto 80, etc usando netstat -lntp. A menudo, localizar los archivos binarios es un puntero útil a un árbol de directorios que contiene los archivos de configuración.

RedGrittyBrick
fuente
1

Puede verificar el Vhost para el dominio que está buscando en el archivo de configuración del servidor web (apache) - httpd.conf (probablemente ubicado en / etc /) Simplemente abra el archivo y desplácese hasta encontrar la directiva VirtulaHost para su dominio y allí verá la directiva DocumentRoot , que es el directorio raíz de documentos de su sitio web, el lugar donde encontrará los archivos de la aplicación.

Georgi Tsvetanov Tsenov
fuente
1

Por favor ve a

cd / etc / apache2 / site-avaliable /

Aquí encontrará su archivo de configuración (es decir: 000-default.conf)

Abra este archivo / abra su archivo de configuración usando

vi 000-default.conf

Allí encontrará DocumentRoot. Ese es el código de su sitio web

Este es el archivo de configuración predeterminado, de la misma forma que tendrá algunos detalles de configuración, por favor verifíquelos también.

Krishna Chandra
fuente
3
Esto depende del sistema.
ligereza corre en órbita
Además del comentario de @PreferenceBean, esto solo mostrará la configuración de los vhosts predeterminados. Podría haber muchas vhosts en que hay con nombres inútiles que también puede requerir la comprobación
gabe3886