[SQLi] INTO OUTFILE in UPDATE query

Hallo allerseits,
Ich habe mir lokal das folgende Skript erstellt:
PHP:
<?php
$sql = "UPDATE a SET b=".$_GET["c"]."";
mysql_query($sql);
?>
Man sieht ja recht schnell, dass dieses Skript sehr anfällig bezüglich SQL-Injections ist. Mich würde allerdings eine Sache sehr interessieren: Meiner Meinung nach ist die gefährlichste aller SQL-Injection Arten jene, die INTO OUTFILE exploitet, sodass der Angreifer in der Lage ist Schaddateien (z.B. ein Shellskript) zu erstellen.

Mir ist diese Attacke jedoch nur bei SELECT queries bekannt, weswegen ich fragen wollte ob dieser UPDATE query (oder generell UPDATE queries) immun gegen INTO OUTFILE ist. Ich habe zunächst folgende Überlegung gemacht:
Code:
UPDATE a SET b=(SELECT 'x' INTO OUTFILE 'pfad/zu/datei.txt')
was jedoch von MySQL mit einem Syntaxerror nicht angenommen wurde. Ich kenne mich mit der MySQL Syntax nicht sehr gut aus und kann der Onlinedokumentation auch nicht wirklich entnehmen warum es nicht funktioniert. Denn eigentlich hat MySQL ja keine Probleme mit eingebetteten Subqueries wie zum Beispiel:
Code:
UPDATE a SET b=(SELECT 'c')
UPDATE a SET b=(SELECT c FROM d)
Deshalb würde ich gerne wissen was ihr denkt. Ist die Suchabfrage in diesem Fall immun gegen die INTO OUTFILE Attacke?

Viele Grüße,
PHRoZeNCReW

PS: Bevor jemand fragt, ja der User hat Dateirechte und magic_quotes sind ausgestellt
 
ich könnte mir vorstellen, dass der query optimizer ein problem damit hat, da die subquery vermutlich nichts zurück gibt ... und das auch vor der ausführung bekannt ist ...
 
Ja, solche Überlegungen habe ich auch schon gemacht. Es ist nur schade, dass man bei solchen Sicherheitsangelegenheiten keine gute, ausführliche und vor allen Dingen eindeutige Dokumenation bezüglich Syntax und Semantik hat.

Gewisse Fragestellungen werden einfach nicht von diesen Pseudogrammatiken auf der Website von MySQL beantwortet.
 
Hallo t3rr0r.bYt3,
Vielen Dank für deine Antwort. Ich habe den Satz eher so verstanden, dass es nicht SINVOLL ist INTO OUTFILE in subqueries zu nutzen (aus genannten Gründen). Ich konnte dem Satz nicht wirklich entnehmen, dass es einen Syntaxerror verursacht.

Viele Grüße,
PHRoZENCReW
 
Ich denke mal, dass 0; SELECT x INTO OUTFILE 'datei.txt' funktionieren müsste. damit sähe die abfrage ja so aus:

Code:
[COLOR=DarkGreen]UPDATE a SET b=[/COLOR][COLOR=Navy]0; SELECT x INTO OUTFILE 'datei.txt'[/COLOR]
Hab ich jetzt aber nicht überprüft.
 
Ich denke mal, dass 0; SELECT x INTO OUTFILE 'datei.txt' funktionieren müsste. damit sähe die abfrage ja so aus:

Code:
[COLOR=DarkGreen]UPDATE a SET b=[/COLOR][COLOR=Navy]0; SELECT x INTO OUTFILE 'datei.txt'[/COLOR]
Hab ich jetzt aber nicht überprüft.


das funktioniert zwar als reines SQL aber nicht via. PHP da PHP maximal 1 SQL statement ausführt d.h alles hinter ";" wird nicht ausgeführt.
 
Zurück
Oben