root@sparrow:~/writeups$ cat vulnerability-pattern-path-traversal.md
// bug-bounty
Path Traversal / LFI
23 Jul 2026
· 2 min read
What it is
Reading internal files by manipulating a path parameter with relative path sequences —
../../../../etc/passwd tacked onto a parameter meant to point at a document the app was supposed to serve.Why it matters
It reaches straight past the application layer into the filesystem — config files, credentials, source code and environment variables are all fair game if the traversal isn't blocked.
Where to look
- Download and view-document endpoints, export features
- Parameters named
,file=
,path=
,template=
,page=document=
How I test it
- Find download or view endpoints.
- Identify the file-referencing parameter.
- Try relative paths:
, encoded variants like../../../../etc/passwd
, and obfuscated ones like..%2f..%2f..%2fetc%2fpasswd
(in case a naive filter strips....//....//etc/passwd
only once); on Windows try../
...\..\..\windows\win.ini - Check whether the response contains unexpected file content instead of the usual document.
Hunting checklist
- Found a file/path/download parameter
- Tried plain relative-path traversal
- Tried URL-encoded and double-slash-obfuscated variants
- Tried the OS-appropriate separator (\ on Windows)
- Confirmed actual file content in the response, not just a different error
Evidence to collect
- Vulnerable endpoint and parameter
- Payload used
- Response containing the internal file's content
- Explanation of what that file exposes (config, credentials, source code)
Recommended fix
- Never build file paths from user input directly
- Resolve the path and verify it stays inside an allowed base directory
- Use an internal ID/allowlist of filenames instead of accepting a path
- Run the process with minimal filesystem permissions
Qué es
Leer archivos internos manipulando un parámetro de ruta con secuencias de ruta relativa —
../../../../etc/passwd pegado a un parámetro pensado para apuntar a un documento que la app debía servir.Por qué importa
Se salta directamente la capa de aplicación y llega al sistema de archivos — ficheros de configuración, credenciales, código fuente y variables de entorno quedan expuestos si el traversal no está bloqueado.
Dónde buscar
- Endpoints de descarga y visualización de documentos, funciones de exportación
- Parámetros llamados
,file=
,path=
,template=
,page=document=
Cómo lo pruebo
- Encuentra endpoints de descarga o visualización.
- Identifica el parámetro que referencia el archivo.
- Prueba rutas relativas:
, variantes codificadas como../../../../etc/passwd
, y ofuscadas como..%2f..%2f..%2fetc%2fpasswd
(por si un filtro ingenuo solo quita....//....//etc/passwd
una vez); en Windows prueba../
...\..\..\windows\win.ini - Comprueba si la respuesta trae contenido de archivo inesperado en vez del documento habitual.
Checklist de hunting
- Encontrado un parámetro de file/path/download
- Probado traversal de ruta relativa simple
- Probadas variantes con URL-encoding y doble barra ofuscada
- Probado el separador propio del SO (\ en Windows)
- Confirmado contenido real de archivo en la respuesta, no solo un error distinto
Evidencias para el reporte
- Endpoint y parámetro vulnerable
- Payload usado
- Respuesta con el contenido del archivo interno
- Explicación de qué expone ese archivo (configuración, credenciales, código fuente)
Mitigación
- Nunca construir rutas de archivo directamente desde input del usuario
- Resolver la ruta y verificar que se queda dentro de un directorio base permitido
- Usar un ID interno/allowlist de nombres de archivo en vez de aceptar una ruta
- Ejecutar el proceso con permisos mínimos de sistema de archivos