¿Qué significa la tilde (~) al final de una extensión de archivo? [cerrado]

38

Mientras jugaba algo de Capture the Flag (CTF), no pude resolver un desafío debido a esta tilde ~ . Estoy jugando en www.example.com/index.php pero cuando agregué (~) al final: www.example.com/index.php~ , se inició la descarga de un archivo con el nombre index.php.

¿Podría explicarme cuál es el rol de esta tilde (~)?

    
pregunta r00t_xx 01.03.2018 - 11:36
fuente

4 respuestas

60

Es solo una parte del nombre de archivo, al igual que las letras, números y otros caracteres especiales pueden ser parte del nombre de archivo.

Es convencional crear "copias de seguridad" de los archivos antes de editarlos agregando una tilde, por lo que en caso de que arruines algo, tienes una versión anterior para restaurar. En Bash, esto se puede hacer fácilmente con cp index.php{,~} que se expande a cp index.php index.php~ .

Podría estar en el CTF porque la gente a menudo se olvida de esos archivos y los deja desprotegidos. Especialmente un archivo como index.php puede contener credenciales de base de datos.

En bash, una tilde al inicio de un argumento también se expande a una carpeta de inicio: ~ se convierte en $HOME (por ejemplo, /home/yourusername ), o ~username se convierte en la carpeta de inicio de ese usuario (por ejemplo,% co_de Por lo general,% se expande a ~root ). Sin embargo, ese no es el caso aquí porque no está al principio.

    
respondido por el Luc 01.03.2018 - 11:41
fuente
49

~ es un sufijo común agregado a los nombres de archivos para copias de seguridad o copias temporales de archivos. Esto puede ser una copia de seguridad manual o una creada por un editor u otra herramienta.

Aunque la mayoría de los sistemas de archivos no tienen el concepto de "extensiones de archivo", una gran cantidad de software utiliza la parte de un nombre de archivo después del primer o último . para determinar el tipo de archivo y qué hacer con él.

En este caso, el servidor web se habrá configurado para ejecutar los archivos que terminan en .php , pero para servir el contenido de otros tipos de archivos. Dado que .php~ parece ser una "extensión de archivo" diferente, no coincide con la regla que se ejecutará, y recibe el código fuente. Esto, a su vez, le permite ver los contenidos probables de la secuencia de comandos PHP que deberían haberse ejecutado (es decir, es probable que index.php~ tenga contenidos similares a index.php ), que pueden revelar credenciales o pistas sobre otras vulnerabilidades.

Hay dos cosas que el administrador de sistemas hipotético debería haber hecho para evitar esto:

  1. No quedan archivos de copia de seguridad dentro de los directorios asignados a las URL web.
  2. Configuró el servidor web para responder con un error, en lugar del contenido del archivo, para extensiones de archivo no reconocidas.
respondido por el IMSoP 01.03.2018 - 16:37
fuente
6

Has descubierto una falla potencial de seguridad para las aplicaciones web.

El escenario es este:

  • Un servidor web está configurado para interpretar una determinada extensión de archivo utilizando un intérprete de script (por ejemplo, PHP para archivos .php ).
  • Algunos editores de texto almacenan copias de respaldo o copias "en funcionamiento" del archivo que está editando con el mismo nombre de archivo pero con una tilde ( ~ ) al final. Una tilde a menudo significa "esto es generado por el sistema, no te preocupes por eso".
  • En ocasiones, estos archivos pueden permanecer después de que hayas terminado de editar, ya sea porque el editor no está configurado para eliminarlos o si el editor se elimina sin cerrar correctamente.
  • Al agregar una tilde al final de una URL, es posible que tenga la suerte de encontrarse con una de estas copias de respaldo que un administrador de web dejó accidentalmente (o subió a) su sitio de producción en vivo.
  • El servidor web no lo interpretará con un intérprete de script porque la extensión es diferente (por ejemplo, no es ".php"), por lo que vuelve a su comportamiento predeterminado para extensiones de archivo desconocidas, que es para servir como un archivo. descarga.
  • Puedes leer el código fuente de su script.

Si esto es de mucha utilidad es variable. A veces, el código fuente puede contener elementos como detalles de autenticación para bases de datos o servicios externos.

    
respondido por el thomasrutter 01.03.2018 - 23:33
fuente
3
  

Estoy jugando en www.example.com/index.php pero cuando agregué (~) al final: www.example.com/index.php~ , un archivo con el nombre index.php comenzó a descargarse.

Como han mencionado otros, muchos editores de texto (especialmente Emacs, diría yo) hacen copias de seguridad de las versiones anteriores de los archivos en los que trabaja creando otro archivo cuyo nombre es el mismo que el original pero con una tilde adjunta.

Sin embargo, lo que otras respuestas no han enfatizado lo suficiente es que el hecho de que pueda acceder a un archivo de este tipo es consecuencia de una combinación de control de versión incorrecto o compilación e implementación incorrectas .

Control de versión incorrecto (omisión de archivos "ignorar")

Los sistemas de control de versiones (VCS) tienen mecanismos para configurar un repositorio de modo que los nombres de archivos VCS que coincidan con los patrones especificados se ignorarán. El sistema de control de versiones más popular hoy en día es Git, y su mecanismo para esto es archivos especiales llamados .gitignore . La mayoría de los repositorios Git de código fuente deberían tener un archivo .gitignore de nivel superior que tenga esta línea:

*~

Ese es un patrón que le dice a Git que ignore todos los archivos cuyo nombre termina con una tilde. Un error común entre los desarrolladores es no mantener estos archivos diligentemente, o simplemente ignorarlos por completo. Por ejemplo, muchos IDE mostrarán una advertencia cuando encuentren archivos sin seguimiento en su árbol de origen y le darán la opción de decirle al IDE que los ignore. Casi nunca debes usar esa opción; en lugar de eso, descubra qué incluir en el archivo "ignorar" del repositorio para que todos los que lo comprueban se configuren automáticamente para que nunca ingresen estos archivos.

El uso disciplinado de tales archivos de "ignorar" va muy lejos de protegerlo de muchos otros problemas de seguridad. Por ejemplo, pueden ayudarlo a protegerse contra el problema común de los desarrolladores que verifican accidentalmente las credenciales secretas. Una práctica que me ha resultado útil es adoptar un diseño estándar en el que sus proyectos tengan un directorio designado para que los desarrolladores coloquen dichos archivos. Luego puede configurar su repositorio VCS para que los archivos en ese directorio se ignoren, y diseñe su aplicación para que las construcciones de desarrollo obtengan su configuración desde allí.

Procesos incorrectos de compilación y despliegue

La otra cosa que probablemente cause problemas de este tipo es la creación y los procesos de implementación que propagan incorrectamente archivos como el index.php~ en cuestión.

Algunas prácticas que deben adoptarse para evitar esto:

  • Haga que su sistema de control de versiones ignore los archivos en primer lugar, como se mencionó anteriormente.
  • Tenga un sistema de compilación automatizado que verifique periódicamente su proyecto desde el control de origen, lo compila y empaqueta para su implementación.
  • Nunca edite archivos en el directorio de trabajo del sistema de compilación, de modo que su copia del repositorio de origen esté siempre limpia. Siempre observe la disciplina de que los entornos de desarrollador están separados de los entornos de compilación automatizados.
  • Nunca compile lanzamientos desde los propios entornos de los desarrolladores.

Otro consejo importante es usar herramientas de construcción probadas en la batalla para construir tus proyectos, que impongan un diseño racional del proyecto y tengan una buena historia sobre cómo identificar qué archivos deben empaquetarse y cuáles no. Las herramientas de compilación para muchos idiomas, por ejemplo, en lugar de simplemente archivar a ciegas todo en su repositorio de origen, copiarán los archivos de forma selectiva en un directorio temporal provisional y luego los archivarán, de modo que solo los archivos que la herramienta seleccionó explícitamente para inclusión incluido.

    
respondido por el Luis Casillas 02.03.2018 - 02:03
fuente

Lea otras preguntas en las etiquetas