MYSQL Injection, was mach ich falsch.

Hi, ich will mich ein bisschen mit MYSQL Injection üben. Deshalb probier ich bei meinen Alten Homepages ein bisschen herum.
Bei einer meiner Websiten hab ich auch meiner meinung nach schon ein Sicherheitsloch entdeckt.

Aber wieso Funktioniert folgende Injektion nicht?

Code:
comments.php?comment=news&id=42;UPDATE+news+SET+title='Es Funktioniert.'+WHERE+id=38

Der Relevante Quelltext ausschnitt von comments.php:

Code:
mysql_select_db("mydatabase",$connect);
$res_information = mysql_query("SELECT title,colour FROM ".$_GET["comment"]." WHERE id='".$_GET["id"]."'");
$res_comments = mysql_query("SELECT von,time,comment,mail FROM comments WHERE zu='".$_GET["comment"]."|".$_GET["id"]."' ORDER BY time DESC");
$information = mysql_fetch_assoc($res_information);

Ich hoffe jemand kann mir sagen was ich falsch mach :)

Gruss

IRoot
 
Original von IRoot
Aber wieso Funktioniert folgende Injektion nicht?

Weil in PHP aus Sicherheitsgründen immer nur eine SQL-Anweisung pro Query ausgeführt wird.

"Select * from Tabelle; Update Tabelle2 [...]" funzt also gar nicht erst.

Gruß
 
Hallo,
bevor man 'learniny by doing' machen kann, sollte man etwas 'learning by reading' machen ;) (siehe Signatur)

Selbst wenn PHP 2 Anfragen zulassen würde, würde es nicht klappen. Den Rest solltest du dir aber anlesen.
Dann wüsstest du auch, was wirklich gefährlich an deine Anfrage ist.
 
Naja, hab ich mir dann doch etwas zu einfach vorgestellt.

Aber eigenlich müsste das doch auch mit neueren PHP Versionen funtktionieren. ?(
Es kommen ja auch immer wieder neue SQL Exploits für phpBB, Burning Board usw. raus.

Ich hab ja den Quelltext meiner comments.php gepstet :) Würde es dort eine SQL Injection möglichkeit geben?

Gruss Builder.


PS: Kennt jemand ein aktuelles Tutorial über SQL Injetions(keins dass schon jahre alt ist).
 
Das kommt halt immer ganz auf das Script / die Webapplikation drauf an.
In deinem Beispiel könnte man z.b. mit UNION SELECT eine weitere Table abfragen und so z.b. an Passwörter oder andere Daten gelangen, vorrausgesetzt man kennt die Datenbankstruktur der Anwendung.
 
THX, :)

Ich hab mir nochmal das bei Wikipedia zu SQL Injection durchgelesen, und bin dann auf folgendes gekommen :)

Code:
http:/x.x.funpic.de/comments.php?comment=news&id=38+UNION+SELECT+*+,+'x'+FROM+users

Hmm, was mach ich genau Falsch? Darf ich das * bei der Abfrage nicht gebrauchen, oder hat Funpic die eigenen Mitglieder schon dagegen geschützt?

Oder kann es vieleicht seinn dass die PHP Datei die Union Daten verarbeiten und ausspucken muss?
Wenn ihr möchtet kann ich auch den gesamten Code der comments.php uppen :).

Gruss IRoot :)
 
Hallo,
natürlich sollte man auch gut bis sehr gute Kentnisse in Sachen SQL haben ;)

Also dein Code ist hochgradig gefährdet, aber ich werde ich kein Bsp. posten, denn du sollst Google bemühen um dich über SQL Injection und deren Abwehr zu informieren, sonst wirst du einfach nicht glücklich.
 
Zudem sollte es als Information reichen, dass da ungeprüfte Benutzereingaben im Script verarbeitet werden. Das Problem ist erkannt, die Lösung kann man sich zusammenreimen (Plausibilitätsprüfung der Benutzereingaben). Die Injektion so lange weiter zu probieren bis es mal klappt, bringt für die Behebung solcher Schwachstellen (und darum geht's ja in diesem Forum) keinen weiteren Erkenntnisgewinn ;)
 
Ich kenn mich mit MYSQL schon aus :) Aber mit Union und dem Inject zeuchs halt ned :=)

Könntest du mir vieleicht einen Tipp geben was daran falsch ist?
Kann ja auch per PN sein ;)

Gruss

IRoot
 
Lies dir den Wiki Eintrag durch.
Und die müssen net aktuell sein...da tut sich jedenfalls in den Basics nix

mfg,
Xalon
 
Ist die SQL Injection wirklich möglich? Ich hab schon viel Varianten aussprobiert, aber ich bekomm noch nicht mal einen SQL Error Zurück.

Eigentlich wenn SQL Injection möglich wäre sollt ich doch zumindest einen ERROR bekommen, auch wenn die Abfrage nicht ganz richtig ist :)

Gruss

IRoot
 
Sofern deine Eingaben nicht durch magic_quotes verändert oder über andere Mods und Plugins gesichert werden ist eine SQL Injection mit UNION durchaus möglich. Alles, was du in deinem Query falsch gemacht ist, dass du kein schliessendes ' genutzt hast:

? "SELECT id,nachricht FROM nachrichten WHERE id='".$_GET["id"]."'"

Wäre zu knacken mit
? $_GET['id'] = "1' UNION SELECT spalte1von2,spalte2von2 FROM other_table --"

Solche Beispiele solltest du auch genügend bei Google finden, genauso wie es zig-tausend Tutorials und Howtos gibt. Mit UNION (ALL) solltest du dich jedoch davor beschäftigen. Dieses Wissen wird vorrausgesetzt:

http://dev.mysql.com/doc/refman/5.0/en/union.html
 
Hmmm, klar aber kann das sein das Funpic das Blockt?, und ich noch lange probieren kann?

Meine Momentane Abfrage ;)

Code:
http://x.x.funpic.de/comments.php?comment=news&id=38'+UNION+SELECT+password,benutzername+FROM+users--"


Es kommt auch kein ERROR egal was ich mache.

Sollte doch alles Richig sein oder?

Wenn es klappen würde, wo würden denn die Daten ausgegen? Brauch ich dafür ein spezielles Programm?

Gruss IRoot
 
Ich weiss nicht, wie Funpic das regelt, ein mir bekannter, anderer Freehoster regelt das ganze mit Magic Quotes. Lass das ganze einfach mal ohne einfache Anführungszeichen laufen, da sollte auch Magic Quotes nichts ausrichten können.
 
Hi, also wie meinst du das genau mit den einfachen Anführungszeichen?

Sollte der Befehl so ausschaun?

Code:
http://x.x.funpic.de/comments.php?comment=news&id=38?comment=news&id=38+UNION+SELECT+password,benutzername+FROM+users--

Wenn ja Funktioniert es nicht, und Funpic schützt ihre Member sehrwahrscheinlich ziemlich gut vor SQL Injections ;)

Wenn nein, was ist mit dem einfachen Anführungszeichen gemeint, wie mach ich dass ;)

Gruss IRoot
 
Code:
mysql_query("SELECT irgendwas1,irgendwas2 FROM tabelle WHERE irgendwas=$_GET['sqlinj']");
Injection mittels:
Code:
seite.php?sqlinj=bla UNION SELECT ....

Informier dich einfach mal darüber, was Magic Quotes überhaupt macht und du wirst auch wissen, was zu tuhen ist ;)
 
Original von fetzer
Code:
mysql_query("SELECT irgendwas1,irgendwas2 FROM tabelle WHERE irgendwas=$_GET['sqlinj']");
Injection mittels:
Code:
seite.php?sqlinj=bla UNION SELECT ....

Informier dich einfach mal darüber, was Magic Quotes überhaupt macht und du wirst auch wissen, was zu tuhen ist ;)

Hää, das ist doch das Selbe wie dass, und das funktioniert nicht :(

Code:
http://x.x.funpic.de/comments.php?comment=news&id=38 UNION SELECT password,benutzername FROM users--

Gruss IRoot

Edit: Hier noch die Phpinfo von Funpic: http://phpinfo.ph.funpic.de/.
Ist Funpic der Spassverderber, oder ICH ? :)
 
Klar, ich weiss Magic Quotes macht einen Slash vor diese zeichen (') (").

Aber, wie müsst ich die Injection machen, um MAGIC Quotes unnnütz zu machen.
Googel hat nichts interessantes dazu ausgespuckt. Sehr wahrscheinlich hab ich nach dem falschen Gegoogelt :(

Kannst du mir vieleicht einen Guten Tipp geben wie es funktionieren würde?

Funpic hat tatsächlich Magic Quotes ON 8o

Gruss IRoot
 
Das kannst du nicht umgehen ;)
Außer der Querie schaut so aus:

SELECT name FROM user WHERE id=$id

Dann kannst ohne ' ausbrechen

mfg,
Xalon
 
Zurück
Oben