SQL-Injection: SELECT ... INTO OUTFILE

Informationen rund um die Sicherheit des Webs - Shops
Antworten
yogi
Administrator
Beiträge: 292
Registriert: Do 6. Mai 2010, 14:16
Shop Version: die aktuelle
Wohnort: Köln
Kontaktdaten:

SQL-Injection: SELECT ... INTO OUTFILE

Beitrag 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.
DokuMan
Beiträge: 8
Registriert: Sa 3. Jul 2010, 19:16
Shop Version: xtcModified

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

Beitrag 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.
Xantiva
Beiträge: 948
Registriert: Mo 10. Mai 2010, 16:26
Shop Version: 1.0.10 [dev]
Kontaktdaten:

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

Beitrag 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
Mein Shop: http://www.basteln-selbermachen.de
DokuMan
Beiträge: 8
Registriert: Sa 3. Jul 2010, 19:16
Shop Version: xtcModified

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

Beitrag 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...
Doc Olson
Beiträge: 536
Registriert: Mo 10. Mai 2010, 08:54

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

Beitrag 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.
yogi
Administrator
Beiträge: 292
Registriert: Do 6. Mai 2010, 14:16
Shop Version: die aktuelle
Wohnort: Köln
Kontaktdaten:

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

Beitrag von yogi »

Dieser Check wird nicht nur in der Install sondern auch in der
- admin/includes/modules/security_check.php
integriert werden.
Antworten