Come parte di una valutazione sto usando mysql per esplorare il filesystem degli host compromessi. Come mi è sembrato di ricordare dall'ultima volta che ho giocato con esso, alcuni file possono essere letti (ad esempio / etc / passwd) e altri non possono (/ etc / shells.)
La documentazione di mysql dice esplicitamente: Per motivi di sicurezza, durante la lettura dei file di testo che si trovano sul server, i file devono risiedere nella directory del database o essere leggibili da tutti ... link
Ma non sembra essere il caso, dal momento che entrambi i file hanno le stesse autorizzazioni effettive, e la proprietà e solo la prima possono essere letti da 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)
Come viene eseguita questa discriminazione ed è qualcosa che può essere ulteriormente limitata? (So che puoi disabilitare l'infile dei dati di caricamento, ma diciamo che non è possibile a causa di un ETL o qualcosa del genere, come applicheresti selettivamente su / etc / passwd per esempio.)