| Webmaster-Security Fragen zur richtigen Serverkonfiguration oder Absicherung dynamischer Scripte gehören hier hinein. |
Diskussion: SQL Injections im Forum Webmaster-Security, in der Kategorie Security Area; Anzeige Hi, heute bin ich wieder über etwas gestolpert, was ich nicht nachvollziehen kann: ?id=-54+union+select+concat_ws(0x3a,version(),database( ),user()),2,3,4 Mir ist klar, daß ...
![]() |
| | #1 (permalink) |
| Registriert seit: 23.05.10 ![]() Likes: 0 | Anzeige Hi, heute bin ich wieder über etwas gestolpert, was ich nicht nachvollziehen kann: ?id=-54+union+select+concat_ws(0x3a,version(),database( ),user()),2,3,4 Mir ist klar, daß diese Injection die MySQL Version den Datenbanknamen und den User ausgibt... aber warum? Ich habe dieses Ding auf russischen Seiten gefunden, die eine Vielzahl an Internet Seiten gehackt haben und die Ergebnisse dort veröffentlichen... Ich möchte diese Links nicht posten, da dort Passwörter etc aufgelistet worden sind und die Sicherheitslücken nach wie vor auf den meisten Seiten bestehen. Die Webmaster haben diese Lücken scheinbar noch nicht entdeckt. |
| | |
| | #2 (permalink) |
| Moderator ![]() Registriert seit: 30.09.06 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 443 | Das sind die Daten, die man zum Raussuchen eines versionsspezifischen Exploits und zum durchführen eines möglichst klein gehaltenen Bruteforce mindestens braucht.
__________________ Mein Blog - Mein Job - Diaspora Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund. Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+ |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Registriert seit: 13.12.09 ![]() Likes: 0 | Zitat:
Was genau möchtest du jetzt wissen? Wieso SQLi funktionieren? ?id=-54+union+select+concat_ws(0x3a,version(),database( ),user()),2,3,4 Ich spalte mal die Abfrage auf So würe sie normal ausschauen:?id=-54 Mit dem Befehl UNION kann man bei SQL abfragen verbinden+union+ danach kommt halt die Abfrage wenn dafür noch Felder für die Ausgabe Vorhanden sind. select+concat_ws(0x3a,version(),database(),user()) ,2,3,4 Und so würde es im Quellcode ausschaue Nur als Beispiel $sql = "SELECT * FROM tabelle where id = '$_GET['id']'" Und somit schließt er mit union noch eine Abfrage hinten an | |
| | |
| | #4 (permalink) |
| Registriert seit: 04.12.03 ![]() Likes: 11 | Mich würden mögliche Gegenmaßnahmen interessieren, vielleicht direkt am obigen Beispiel. |
| | |
| | #5 (permalink) | |
| Registriert seit: 12.08.10 ![]() ![]() Likes: 30 | Zitat:
In php z.B. PHP-Code:
__________________ http://www.openvas.org | |
| | |
| | #6 (permalink) | |
| Member of Honour ![]() | Zitat:
Never trust an user-input!!!
| |
| | |
| | #7 (permalink) | |
| Registriert seit: 06.06.09 ![]() Likes: 6 | Zitat:
Das heißt, wird eine Zahl erwartet, und man bekomme einen String, dann sollte man nicht versuchen diesen in eine Zahl zu casten. In PHP gibts dafür z.B. is_numeric() und Strings kann man mit Regulären Ausdrücken über z.B. preg_match() prüfen. Ein mysql_real_escape_string() sollte natürlich trotzdem nicht fehlen | |
| | |
| | #8 (permalink) | |
| Member of Honour ![]() | Zitat:
Wenn es eine ehr unwichtige numerische Eingabe ist, bei der ein "0" im Zweifelsfall keinen Schaden anrichtet, dann brauche ich ja nicht unbedingt zusätzliche Rechenleistung für Fehler-Routinen beanspruchen. Beispiel: Wenn eine Bildergallerie bei manipuliertem Start-Bild-Wert eben als Wert 'ne 0 annimmt und somit die erste Seite der Gallerie anzeigt, dann ist das ja nicht weiter tragisch. Wenn die Zahl natürlich 'nen wichtigen Einfluss hat und nicht vernachlässigt werden darf (meinetwegen 'ne Postleitzahl bei der Adress-Eingabe), dann hast du Recht - da sollte man abfragen und gegebenen Falls 'ne Fehlermeldung bringen. | |
| | |
| | #9 (permalink) |
| Weil ich das Schlagwort nochnicht gehört habe werfe ich einfach mal prepared Statements in den Raum ![]() http://de.wikipedia.org/wiki/Prepared_Statement Dabei werden die Daten als _DATEN_ interpretiert und haben nichts mit dem SQL-Statement zu tun. Für PHP gibts dazu eine schöne Klasse(PDO): http://php.net/manual/de/pdo.prepared-statements.php MfG Inliferty | |
| | |
| | #10 (permalink) | |
| Registriert seit: 12.08.10 ![]() ![]() Likes: 30 | Zitat:
PHP-Code: Code: mime@kira:~ % GET http://localhost/x.php?id=1 string Micha
__________________ http://www.openvas.org | |
| | |
| | #11 (permalink) |
| Member of Honour ![]() | wenn der String jedoch nur aus Zahlen besteht, gibt is_numeric() trotzdem true zurück und somit das von Thunderb0lt gewünschte Ergebnis. PHP-Code: Code: martin@lenotux:~$ php test.php Typ : string numeric : ja cast to int : 123 Typ : integer numeric : ja cast to int : 123 Typ : string numeric : nein cast to int : 12 Typ : NULL numeric : nein cast to int : 0 martin@lenotux:~$ Wenn ich irgendwelche Model-Klassen programmiere, wird dort (mit wenigen Ausnahmen) hart gecastet - eine Klasse soll schließlich Funktionalität darstellen und nicht Dummheit oder Böswilligkeit des Users anmeckern. Wenn eine Fehler-Behandlung stattfinden soll, dann werden die Daten, bevor sie an das Model gegeben werden, im Controller validiert und dort wird dann für die Ausgabe einer Fehlermeldung oder dergleichen gesorgt. |
| | |
| | #12 (permalink) | |
| Registriert seit: 12.08.10 ![]() ![]() Likes: 30 | Zitat:
Ich persönlich bin kein Freund von is_numeric. Das akzeptiert mir zu viel. Ich will z.B. keine Hex Values in meinen Querys. Und sowas auch nicht. PHP-Code: Code: mime@kira:~ % GET http://localhost/x.php?id=123e4567 1367 - Illegal double '123e4567' value found during parsing -- SELECT id FROM results WHERE id = 123e4567 Micha
__________________ http://www.openvas.org | |
| | |
| | #15 (permalink) |
| Registriert seit: 31.07.06 ![]() Likes: 32 | Bei Usereingaben überprüfe ich min. und max. Länge, sowie Definitionsbereich (zulässige Zeichen) und Zeichenmuster via regular Expression. Hierzu schrieb ich folgende Funktion: PHP-Code: |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |