Seite 1 von 1

SQL-Injection: SELECT ... INTO OUTFILE

Verfasst: Mo 27. Dez 2010, 14:06
von yogi
Über den SQL Befehl "select ... into outfile ..." ist es unter bestimmten Umständen möglich Dateien im Webspace zu erzeugen.

Jeder sollte daher prüfen welche Rechte sein Datenbank User auf der MySQL Datenbank hat. Wichtig ist hierbei das er keine Datei-Berechtigungen besitzt. Über den Befehl "show grants;" kann man sich die Rechte anzeigen.

Er scheint nun ein

Code: Alles auswählen

GRANT ALL PRIVILEGES ... TO ...
oder

Code: Alles auswählen

GRANT [..,]FILE[,..] TO 
Diese Ergebnisse wären z.B. OK, da zwischen GRANT und TO kein "FILE" vorkommt:

Code: Alles auswählen

GRANT USAGE ON *.* TO 'dbUser'@'%' IDENTIFIED BY PASSWORD '...'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON *.* TO 'dbUser'@'%'
Wenn eine der folgenden Inhalte auftaucht sollte man das Recht file_priv für den user deaktivieren:

Code: Alles auswählen

GRANT FILE ON *.* TO 'dbUser'@'%' IDENTIFIED BY PASSWORD '...'
GRANT ALL PRIVILEGES TO ...
GRANT ALL PRIVILEGES ON *.* TO ...
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES, EXECUTE, FILE ON *.* TO
Wenn man selbst die "GRANT OPTION" besitzt - was man nicht haben sollte (ebenfalls SQL Injection Gefahr)!! - so führt man folgenden Befehl aus:

Code: Alles auswählen

revoke FILE ON ... TO ... IDENTIFIED BY PASSWORD ...
Den "IDENTIFIED BY PASSWORD" kann man dabei weglassen wenn er beim SHOW GRANTS nicht angezeigt wurde.

Re: SQL-Injection: SELECT ... INTO OUTFILE

Verfasst: Mi 29. Dez 2010, 16:20
von DokuMan
Eine Möglichkeit, Dateien mit MySQL auszulesen besteht in der Nutzung eines "UNION SELECT"...
http://www.tullyrankin.com/mysql-load_f ... -injection
http://www.bitbybit.dk/carsten/blog/?p=173

Ob das ganze allerdings die "GRANT FILE" Rechte vorraussetzt konnte ich noch nicht in Erfahrung bringen.

Re: SQL-Injection: SELECT ... INTO OUTFILE

Verfasst: Mi 29. Dez 2010, 16:55
von Xantiva
Hallo DokuMan,
DokuMan hat geschrieben:Ob das ganze allerdings die "GRANT FILE" Rechte vorraussetzt konnte ich noch nicht in Erfahrung bringen.
http://dev.mysql.com/doc/refman/5.1/de/load-data.html
Aus Sicherheitsgründen müssen Textdateien, die auf dem Server ausgelesen werden, entweder im Datenbankverzeichnis liegen oder von allen gelesen werden können. Außerdem benötigen Sie zur Verwendung von LOAD DATA INFILE für Serverdateien die Berechtigung FILE.
Der eigentlich "Quell des Übels" sind also immer die Rechte "FILES". Wer aus "Faulheit" hier immer mit dem Root Zugang agiert und keine eigenen User pro Datenbank anlegt, dem ist kaum zu helfen.

Ciao,
Mike

Re: SQL-Injection: SELECT ... INTO OUTFILE

Verfasst: Mi 29. Dez 2010, 19:24
von DokuMan
Wäre eine Abfrage bzw. eine Info an den User im Installscript hier eine passable Lösung?
Ich denke nicht, dass das setzen/ändern der DB-Rechte im Installer bei den meisten Webhostern funktionieren würde...

Re: SQL-Injection: SELECT ... INTO OUTFILE

Verfasst: Mi 29. Dez 2010, 20:09
von Doc Olson
DokuMan hat geschrieben:Wäre eine Abfrage bzw. eine Info an den User im Installscript hier eine passable Lösung?
Ich denke nicht, dass das setzen/ändern der DB-Rechte im Installer bei den meisten Webhostern funktionieren würde...
Das streben wir zumindest für die nächste Version an.

Re: SQL-Injection: SELECT ... INTO OUTFILE

Verfasst: Mi 29. Dez 2010, 21:20
von yogi
Dieser Check wird nicht nur in der Install sondern auch in der
- admin/includes/modules/security_check.php
integriert werden.