SCD o Source code disclosure, es una vulnerabilidad que permite la lectura de ficheros que se encuentren en el sistema víctima, debido a errores en la programación de páginas que realizan descargas de archivos. Esto se da debido a que no se hace un conveniente filtrado de los datos que llegan del cliente, permitiéndonos obtener cualquier fichero del cual conozcamos su ruta dentro del servidor.
Un ejemplo de un código vulnerable es el siguiente:
<?php$f = $_GET["f"];header("Content-type: application/octet-stream");header("Content-Disposition: attachment; filename=\"$f\"\n");$fp=fopen("$f", "r");fpassthru($fp);?>
En él se observa cómo se insertan los datos directamente dentro de la función fopen, sin ningún tipo de validación o verificación, ocasionando que el fichero sea descargado sin inconveniente.
A continuación presento la explotación de este ataque en una página vulnerable. Los datos fueron modificados para proteger el sitio original.
Se tiene la siguiente ruta: www.ejemplo.com/download.php?id=archivos.pdf
En ella, la variable id recibe el archivo a descargar, en este caso archivos.pdf, reemplazamos este documento por el nombre de fichero o página que queramos obtener, para este ejemplo, el objetivo es encontrar las credenciales de conexión de la base de datos, para ello le damos como valor a la variable id el fichero download.php, como se muestra en la figura 1.
[caption id="attachment_4557" align="aligncenter" width="473" caption="Figura 1 Descarga del fichero "]
En la figura 2 se presenta el código del archivo, brindándonos información adicional, como lo es el fichero con_str.php, el cual podría ofrecernos datos sensibles, puesto que es requerido al cargar la página, pudiendo contener los datos de la conexión. A continuación, procedemos a su descarga, figura 3.
[caption id="attachment_4560" align="aligncenter" width="482" caption="Figura 2 Código fuente fichero download.php"]
[caption id="attachment_4562" align="aligncenter" width="475" caption="Figura 3 Descarga del fichero con_str.php"]
Como se dijo anteriormente, el fin principal de la explotación de esta vulnerabilidad es tener acceso a documentos existentes en el servidor objetivo, para este caso, el nuestro, era conseguir las credenciales que nos permitirán tener acceso a la base de datos. Con esta información en nuestras manos solo nos faltará acceder como un usuario legítimo al sistema. Figura 4 y 5.
[caption id="attachment_4565" align="aligncenter" width="477" caption="Figura 4 Archivo de conexión de la base de datos"]
[caption id="attachment_4566" align="aligncenter" width="482" caption="Figura 5 Conectándose a la base de datos"]
Técnica muy interesante, ¿y vosotros qué opináis?