Como parte de una evaluación, estoy usando mysql para buscar en el sistema de archivos de un host comprometido. Como recordé la última vez que jugué con él, algunos archivos se pueden leer (por ejemplo, / etc / passwd) y otros no (/ etc / shells).
La documentación de mysql dice específicamente: Por razones de seguridad, al leer archivos de texto ubicados en el servidor, los archivos deben residir en el directorio de la base de datos o ser legibles por todos ... enlace
Pero ese no parece ser el caso, ya que ambos archivos tienen los mismos permisos efectivos, y la propiedad y solo el primero se puede leer con load_data () o LOAD DATA INFILE.
-rw-r--r-- 1 root root 73 Feb 13 2013 shells
-rw-r--r-- 1 root root 1.7K Oct 9 04:49 passwd
mysql> select load_file("/etc/passwd");
| load_file("/etc/passwd")
| root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
...
mysql> select load_file("/etc/shells");
+--------------------------+
| load_file("/etc/shells") |
+--------------------------+
| NULL |
+--------------------------+
1 row in set (0.00 sec)
¿Cómo se realiza esta discriminación y es algo que se puede restringir aún más? (Sé que puede deshabilitar el archivo de datos de carga, pero digamos que no pudo debido a un ETL o algo así, ¿cómo aplicaría esto de forma selectiva en / etc / passwd, por ejemplo)?