in mysql abfrage befehle einschleusen?
in mysql abfrage befehle einschleusen?
ich habe mal gelesen, dass wenn man seine formulardaten nicht richtig schützt, bevor sie in die mysql abfrage kommen, dann könnte man in der abfrage einen falschen code ausführen.
z.b. wenn man einen passwortschutz hat, könnte man die id des users mit "OR ..." füllen um so ohne passwort die seite sehen zu können.
das stört mich nur bedingt, aber kann man auf diese art auch lösch befehle ausführen? also in einem select dann noch einen alter oder drop befehl? das geht doch nicht?!
wenn doch, wie sollte man ids oder namensfelder genau filtern vor der übergabe an die datenbank?
z.b. wenn man einen passwortschutz hat, könnte man die id des users mit "OR ..." füllen um so ohne passwort die seite sehen zu können.
das stört mich nur bedingt, aber kann man auf diese art auch lösch befehle ausführen? also in einem select dann noch einen alter oder drop befehl? das geht doch nicht?!
wenn doch, wie sollte man ids oder namensfelder genau filtern vor der übergabe an die datenbank?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
- larsneo
- Mitglied
- Beiträge: 2622
- Registriert: 07.03.2002 15:23
- Wohnort: schwäbisch gmünd
- Kontaktdaten:
bei den klassischen JOIN exploits in mysql>4 wird in der tat 'nur' das SELECT auf weitere felder/tabellen ausgeweitet. in verbindung mit beschreibbaren verzeichnissen kann sich daraus aber ein 'lustiges' exploit durch gepipte ausgabe von db-inhalten (respektive ein remote code upload) ergeben.
nebenbei kann man durch blind sql natürlich auch die user-db etc auslesen um an kennwörter etc. zu kommen.
generell kann aber jedes sql-statement das ungeprüft variablen aus dem GPC nutzt mißbraucht werden, um schadcode einzuschleusen - bei SELECTS genauso wie bei INSERT und DELETE...
wenn es dich aber schon nicht stört, dass durch fehlende/fehlerhafte input validierung daten ausgelesen werden können, macht das den kohl auch nicht mehr fett
nebenbei kann man durch blind sql natürlich auch die user-db etc auslesen um an kennwörter etc. zu kommen.
generell kann aber jedes sql-statement das ungeprüft variablen aus dem GPC nutzt mißbraucht werden, um schadcode einzuschleusen - bei SELECTS genauso wie bei INSERT und DELETE...
wenn es dich aber schon nicht stört, dass durch fehlende/fehlerhafte input validierung daten ausgelesen werden können, macht das den kohl auch nicht mehr fett

mir geht es nur darum, dass man nicht nachher in einen select befehl eine drop oder alter unterbringen kann um die daten zu löschen.
wenn derjenige nur daten sieht ist mir das wurscht, da für dieses projekt keinen wichtigen daten ausgelesen werden können.
als beispiel:
und wenn ich $id nicht schütze, dass dann nicht irgendwas in dieser richtung gemacht werden kann:
also dass man die variable mit dem füllt:
ich will es jetzt nicht testen, aber könnte das passieren?
wenn derjenige nur daten sieht ist mir das wurscht, da für dieses projekt keinen wichtigen daten ausgelesen werden können.
als beispiel:
Code: Alles auswählen
$sql = "SELECT * FROM tabelle WHERE id=$id";
Code: Alles auswählen
$sql = "SELECT * FROM tabelle WHERE id=1"; $sql="DROP DATABASE datenbank";
Code: Alles auswählen
1"; $sql="DROP DATABASE datenbank
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Also das ist schon möglich zum Beispiel so:
In $id könnte er so alles möglich einschleuse z.B
Das reicht schon um was zu löschen das geht ohne Probleme hilfreich dagegen wäre
mysql_real_escape_string() bzw. mysql_escape_string().
Oder man bau sich das halt nach..
Code: Alles auswählen
$sql = "SELECT * FROM tabelle WHERE id=$id";
Code: Alles auswählen
$sql = "SELECT * FROM tabelle WHERE id= 0 OR 1=1; DROP TABLE tabelle --";
mysql_real_escape_string() bzw. mysql_escape_string().
Oder man bau sich das halt nach..
ich kann doch aber id einfach mit "intval" prüfen oder?
und wenn nicht intval, dann fehler oder so. das ist glaube ich auch der weg, der hier bei phpbb genutzt wird. oder prüft der hier immer alle variable beziehungsweise "escaped" sie?
und wenn nicht intval, dann fehler oder so. das ist glaube ich auch der weg, der hier bei phpbb genutzt wird. oder prüft der hier immer alle variable beziehungsweise "escaped" sie?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Weißt Du zufällig wo phpBB das macht? Ich denke da gibts eine Funktion für, dann kann ich mir da was abschauen.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Code: Alles auswählen
str_replace("\'", "''", $sql);
und s. common.php nach
Code: Alles auswählen
//
// addslashes to vars if magic_quotes_gpc is off
// this is a security precaution to prevent someone
// trying to break out of a SQL statement.
//
- S2B
- Ehemaliges Teammitglied
- Beiträge: 3258
- Registriert: 10.08.2004 22:48
- Wohnort: Aachen
- Kontaktdaten:
Ich dachte immer, das wäre nicht möglich, weil per mysql_query() nur ein Query ausgeführt werden kann!?fanrpg hat geschrieben:Also das ist schon möglich zum Beispiel so:In $id könnte er so alles möglich einschleuse z.BCode: Alles auswählen
$sql = "SELECT * FROM tabelle WHERE id=$id";
Das reicht schon um was zu löschen das geht ohne Probleme [...]Code: Alles auswählen
$sql = "SELECT * FROM tabelle WHERE id= 0 OR 1=1; DROP TABLE tabelle --";
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.