La lista del ladrón
Cada día, algunos programas le piden a Pyssly archivos que nunca hemos tenido: contraseñas, código fuente y copias de seguridad. Aquí tienes la lista, cuántas veces los han pedido, por qué los quiere el ladrón y cómo proteger tu propio sitio.

¿Quién es el ladrón?
El ladrón casi nunca es una persona que se sienta a buscar. Es un programa que va de sitio en sitio con la misma lista y pide cada archivo de ella.
Si un sitio responde con el archivo, el ladrón ya tiene la llave, sin forzar nada. Pyssly no tiene ninguno de esos archivos, así que el ladrón recibe una página falsa y nosotros contamos la petición.
Si tienes una página web, un sitio o un servidor: asegúrate de que esos archivos no se puedan descargar. Al final te explicamos cómo comprobarlo.
Los más buscados
Las veces que los robots han pedido estos archivos a Pyssly.
Contando …
Contraseñas y claves
El mayor tesoro: un solo archivo con todo lo que abre el sitio.
/.envContando …¿Qué es? Un pequeño archivo de texto donde muchos sitios guardan sus secretos: la contraseña de la base de datos, las claves de los servicios de pago y de correo, y la clave que mantiene seguros los inicios de sesión. También variantes como .env.production y env.js.
¿Por qué lo quiere el ladrón? Con él, el ladrón puede entrar en la base de datos, enviar correos en nombre del sitio o usar las cuentas del sitio en otros servicios.
/config.jsonContando …¿Qué es? Archivos de configuración: config.json, settings.py, web.config, docker-compose.yml, appsettings.json, credentials.json, el service-account.json de una cuenta en la nube y el terraform.tfvars de Terraform.
¿Por qué lo quiere el ladrón? A menudo tienen los mismos secretos que .env y además dicen dónde están la base de datos y los servidores. Un service-account.json o un archivo tfvars pueden dar acceso a toda la cuenta en la nube.
/id_rsaContando …¿Qué es? Una clave SSH: la mitad secreta de la clave que permite entrar en un servidor sin contraseña.
¿Por qué lo quiere el ladrón? Quien tiene el archivo suele poder entrar directamente en el servidor, como si fuera el dueño.
/.htaccessContando …¿Qué es? Otros archivos cuyo nombre empieza por punto, como .htaccess, .htpasswd, .DS_Store y .bash_history. En el ordenador el punto significa oculto, pero en la web no.
¿Por qué lo quiere el ladrón? Muestran cómo está configurado el servidor y qué archivos hay, y a veces contraseñas (.htpasswd) o comandos que alguien escribió.
Cómo protegerte
- No pongas nunca secretos en la carpeta que muestra el servidor web. Léelos de variables de entorno o de un servicio de secretos (secrets de Kubernetes, GitHub Actions o la nube).
- Bloquea en el servidor web todos los archivos y carpetas que empiezan por punto, salvo /.well-known/. Más abajo verás cómo.
- No pongas nunca una clave privada en la carpeta web, y guarda para ti tus propias claves de acceso, protegidas con una frase de contraseña.
El código fuente
Todo el código del sitio, con cada cambio que se ha hecho alguna vez.
/.git/Contando …¿Qué es? La carpeta donde Git guarda toda la historia de un proyecto. Si está en el servidor, cualquiera puede descargar todo el código, archivo por archivo.
¿Por qué lo quiere el ladrón? En el código, el ladrón busca contraseñas que alguien puso una vez y luego quitó (siguen en el historial) y fallos que aprovechar.
/.svn/Contando …¿Qué es? Lo mismo para sistemas de control de versiones más antiguos: Subversion (.svn), Mercurial (.hg), Bazaar y CVS.
¿Por qué lo quiere el ladrón? Igual que con .git: código fuente y secretos antiguos.
Cómo protegerte
- No subas nunca la carpeta .git. Compila el sitio y sube solo lo compilado, o deja la carpeta fuera con un .dockerignore.
- Bloquea también las carpetas que empiezan por punto en el servidor web, como seguridad extra.
- Si alguna vez hubo una contraseña en el código, cámbiala. Borrarla en un cambio nuevo no basta: sigue en el historial.
Bases de datos y copias de seguridad
Copias que alguien dejó un rato en el servidor y luego olvidó.
*.sqlContando …¿Qué es? Un volcado de base de datos: toda la base de datos en un archivo, por ejemplo backup.sql o db.sql.gz.
¿Por qué lo quiere el ladrón? Ahí está todo lo que sabe el sitio: usuarios, correos, contraseñas (ojalá con hash) y pedidos. Una fuga de datos de golpe.
*.bakContando …¿Qué es? Copias de seguridad y versiones antiguas: .bak, .old, .orig, .swp, y archivos comprimidos como site.zip o backup.tar.gz.
¿Por qué lo quiere el ladrón? Un wp-config.php.bak se muestra como texto en lugar de ejecutarse, así que las contraseñas quedan a la vista. Un zip puede ser el sitio entero.
Cómo protegerte
- Guarda las copias de seguridad fuera de la carpeta web, mejor en otra máquina.
- Bloquea .sql, .bak, .zip y similares en el servidor web.
- No edites archivos directamente en el servidor: los editores dejan copias como .swp y ~.
WordPress
WordPress mueve buena parte de la web, así que el ladrón siempre prueba sus puertas, también en sitios que no usan WordPress, como Pyssly.
/wp-login.phpContando …¿Qué es? La página de inicio de sesión de WordPress.
¿Por qué lo quiere el ladrón? El ladrón prueba nombres de usuario y contraseñas comunes una y otra vez, con la esperanza de que alguno acierte.
/wp-admin/Contando …¿Qué es? La carpeta del panel de administración de WordPress, con la página de instalación dentro.
¿Por qué lo quiere el ladrón? Una instalación a medias la puede terminar el propio ladrón y hacerse administrador. Si no, es la misma puerta que el inicio de sesión.
/xmlrpc.phpContando …¿Qué es? Una interfaz antigua de WordPress para publicar desde otros programas.
¿Por qué lo quiere el ladrón? En versiones antiguas, el ladrón podía probar cientos de contraseñas en una sola llamada. Sigue siendo una puerta para adivinar contraseñas, y los pingbacks pueden hacer que el sitio envíe tráfico contra otros sitios.
/wp-content/Contando …¿Qué es? La carpeta con plugins, temas y archivos subidos.
¿Por qué lo quiere el ladrón? El ladrón busca plugins viejos con agujeros de seguridad conocidos y copias de seguridad que los plugins hayan dejado ahí.
/wp-includes/Contando …¿Qué es? Los archivos de programa propios de WordPress.
¿Por qué lo quiere el ladrón? Muestran qué versión usa el sitio y, por tanto, qué agujeros conocidos puede haber.
/wp-json/Contando …¿Qué es? La interfaz REST de WordPress.
¿Por qué lo quiere el ladrón? Puede listar los nombres de usuario del sitio, así el ladrón sabe en qué cuentas vale la pena probar contraseñas.
/wp-config.phpContando …¿Qué es? El archivo de configuración de WordPress, con la contraseña de la base de datos y las claves secretas del sitio.
¿Por qué lo quiere el ladrón? Si PHP funciona como debe, nadie ve el contenido, pero una copia (wp-config.php.bak, wp-config.php~) o un servidor roto lo muestra todo.
Cómo protegerte
- Actualiza WordPress, los temas y los plugins, y borra los plugins que no uses.
- Activa la verificación en dos pasos y desactiva xmlrpc.php si no lo necesitas.
- WordPress también busca wp-config.php una carpeta por encima de su instalación. Muévelo ahí solo si esa carpeta no se sirve en la web, y no dejes nunca copias del archivo.
Herramientas de bases de datos
Programas que te dejan manejar la base de datos desde una página web.
/phpmyadmin/Contando …¿Qué es? phpMyAdmin, una herramienta muy común para manejar bases de datos MySQL desde el navegador.
¿Por qué lo quiere el ladrón? Si el ladrón la encuentra, prueba contraseñas o agujeros conocidos de versiones viejas. Si entra, se lleva toda la base de datos.
/adminer.phpContando …¿Qué es? Adminer, una herramienta parecida en un solo archivo que a menudo se sube un rato y se olvida.
¿Por qué lo quiere el ladrón? Igual que phpMyAdmin: una puerta directa a la base de datos.
Cómo protegerte
- No pongas herramientas de bases de datos en el sitio público. Úsalas en tu ordenador y llega a la base de datos por un túnel SSH o una VPN.
- Si tienen que estar ahí: ciérralas con un acceso extra o con una lista de direcciones permitidas.
Páginas de depuración
Páginas que los desarrolladores usan para mirar dentro de un sitio mientras funciona. Muy útiles en tu ordenador, peligrosas en la web.
/phpinfo.phpContando …¿Qué es? Una página que muestra todos los ajustes de PHP, también las variables de entorno.
¿Por qué lo quiere el ladrón? Ahí suele haber contraseñas y claves, rutas y versiones exactas: un mapa del servidor.
/vendor/phpunit/Contando …¿Qué es? Una herramienta de pruebas para PHP que a veces llega al servidor dentro de la carpeta vendor.
¿Por qué lo quiere el ladrón? Las versiones viejas tienen un agujero que deja a cualquiera ejecutar su propio código en el servidor.
/actuator/Contando …¿Qué es? Las páginas de gestión de Spring Boot para aplicaciones Java.
¿Por qué lo quiere el ladrón? Algunas muestran variables de entorno, ajustes o un volcado de memoria con contraseñas dentro.
/server-statusContando …¿Qué es? La página de estado de Apache, que muestra qué está haciendo el servidor en este momento.
¿Por qué lo quiere el ladrón? Enseña qué direcciones piden todos los visitantes, a veces con enlaces secretos y claves.
/_ignition/Contando …¿Qué es? Ignition, la página de depuración de Laravel.
¿Por qué lo quiere el ladrón? Las versiones viejas tienen un agujero que deja al ladrón ejecutar su propio código, y una página de error suele mostrar los ajustes.
/_profiler/Contando …¿Qué es? El profiler de Symfony, que guarda cada petición con todo lo que contenía.
¿Por qué lo quiere el ladrón? Muestra inicios de sesión, sesiones y ajustes de cada visita, también las de otras personas.
Cómo protegerte
- No ejecutes nunca un sitio en modo depuración en la web: APP_DEBUG=false y ningún entorno de desarrollo en producción.
- Borra los archivos phpinfo y las herramientas de pruebas antes de publicar el sitio (composer install --no-dev).
- Limita las páginas de gestión, como Actuator y server-status, a tu propia dirección o a una red interna.
Puertas viejas
Programas y páginas que el servidor ejecuta cuando alguien los pide.
/cgi-bin/Contando …¿Qué es? Una carpeta para scripts viejos que ejecuta el servidor, a menudo en Perl o shell.
¿Por qué lo quiere el ladrón? Los scripts viejos tienen agujeros conocidos, como Shellshock, que dejan al ladrón ejecutar comandos en el servidor.
/boaform/Contando …¿Qué es? Páginas de ajustes de routers y cámaras (boaform, HNAP1).
¿Por qué lo quiere el ladrón? El ladrón busca aparatos que controlar con agujeros viejos o contraseñas de fábrica, para usarlos en una botnet.
*.phpContando …¿Qué es? Cualquier archivo PHP, por ejemplo shell.php o uno con un nombre raro.
¿Por qué lo quiere el ladrón? A menudo el ladrón busca una puerta trasera (un web shell) que otro ya ha dejado en el sitio, para apoderarse de él.
*.aspContando …¿Qué es? Programas en otros lenguajes que ejecuta el servidor: .asp, .aspx, .jsp y .cgi.
¿Por qué lo quiere el ladrón? Igual que con PHP: agujeros conocidos en páginas viejas, o una puerta trasera que ya existe.
Cómo protegerte
- Quita todo lo que el servidor no necesite ejecutar: scripts viejos, páginas de prueba y carpetas como cgi-bin.
- Cambia la contraseña de fábrica de routers y cámaras, actualízalos y no muestres nunca sus páginas de ajustes en internet.
- Que se ejecute solo lo que debe ejecutarse: un archivo subido nunca debería poder ejecutarse como código.
Tiendas y sitios de phishing
Dos tipos de búsqueda que no son un robo inmediato, pero casi.
/cart.jsContando …¿Qué es? Archivos que tiene toda tienda Shopify, como cart.js y products.json.
¿Por qué lo quiere el ladrón? Con ellos, el programa encuentra tiendas y lee productos y precios, a menudo para copiarlos en tiendas falsas.
/lander/Contando …¿Qué es? Restos de un kit de phishing: páginas de destino y scripts que imitan a un banco o a una empresa de paquetería.
¿Por qué lo quiere el ladrón? Quien lo pide busca sitios donde alguien ya ha puesto un kit así: sitios hackeados que se pueden volver a usar.
Cómo protegerte
- Lo que una tienda muestra a todos lo puede leer cualquiera. No pongas nada secreto en los productos ni en sus campos.
- Si ves en tu servidor una carpeta o un archivo que no reconoces, como lander/: puede que alguien haya entrado. Bórralo, cambia todas las contraseñas y actualiza todo.
Bloquear en el servidor web
La mejor protección es que los archivos nunca estén en el servidor. Estos bloqueos son una seguridad extra por si alguno acaba ahí.
Todos dejan abierta la carpeta /.well-known/, porque hace falta, por ejemplo, para los certificados. Pruébalos primero en un sitio de pruebas.
# First in the server block: nginx takes the first regex location that matches,
# and a location ^~ (such as /static/) skips them, so repeat these inside it.
# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
location ~ /\.(?!well-known/) {
return 404;
}
# Databases, backups and old copies
location ~* \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$ {
return 404;
}# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
RedirectMatch 404 "/\.(?!well-known/)"
# Databases, backups and old copies
<FilesMatch "\.(sql|bak|old|orig|swp|zip|tar|gz|7z)$">
Require all denied
</FilesMatch># Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
@hidden {
path_regexp /\.
not path_regexp ^/\.well-known/([^./][^/]*/?)*$
}
respond @hidden 404
# Databases, backups and old copies, /.well-known/ included
@copies path_regexp \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$
respond @copies 404**/.git
**/.env*
**/*.sql
**/*.bak
**/*.zip
**/id_*
**/*.tfvarsCómo comprobarlo
Cinco minutos en una terminal. Cambia example.com por tu propia dirección.
Comprueba solo tu propio sitio. Buscar archivos ajenos es justo lo que hace el ladrón.
Pide .env
curl -sS -i https://example.com/.envMira la respuesta y también el contenido. 404 o 403 está bien. Si llegan tus ajustes, el archivo es público. (Si el sitio responde 200 a todo, como muchas aplicaciones, el contenido debería ser tu página normal.)
Pide .git
curl -sS -i https://example.com/.git/HEADSi ves una línea como ref: refs/heads/main, todo el código fuente está a la vista. Una página de error o tu página normal está bien.
Prueba en otras carpetas
curl -sS -i https://example.com/static/.envUn bloqueo puede faltar en carpetas que se sirven directamente, como /static/ o /assets/. Prueba ahí, y prueba más archivos de la lista, como un .sql o una copia vieja de un archivo de configuración. Lo que cuenta es si se ve el contenido.
Mira el registro
grep -E '\.env|\.git/|wp-login|phpinfo|\.sql' /var/log/nginx/access.logLas peticiones llegan todos los días, así que verlas no es raro. Un 200 en el registro no demuestra una filtración, porque muchas aplicaciones responden 200 con su página normal. Si ves un 200 para .env o .git/HEAD, pide la dirección como arriba y mira el contenido.
Si un archivo se ha filtrado
- Borra el archivo y bloquea la dirección.
- Cambia todas las contraseñas y claves que había en él: la base de datos, el correo, los servicios de pago y la cuenta en la nube. Da por hecho que el ladrón ya las tiene.
- Mira en el registro quién descargó el archivo y si ha pasado algo con las cuentas desde entonces.
Más sobre ladrones y otros tipos de robots en Así funcionan los robots.