in mysql abfrage befehle einschleusen?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

in mysql abfrage befehle einschleusen?

Beitrag von mgutt »

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?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag von larsneo »

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 :roll:
gruesse aus dem wilden sueden
larsneo
..::[krapohl.net]::..
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

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:

Code: Alles auswählen

$sql = "SELECT * FROM tabelle WHERE id=$id";
und wenn ich $id nicht schütze, dass dann nicht irgendwas in dieser richtung gemacht werden kann:

Code: Alles auswählen

$sql = "SELECT * FROM tabelle WHERE id=1"; $sql="DROP DATABASE datenbank";
also dass man die variable mit dem füllt:

Code: Alles auswählen

1"; $sql="DROP DATABASE datenbank
ich will es jetzt nicht testen, aber könnte das passieren?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

Also das ist schon möglich zum Beispiel so:

Code: Alles auswählen

$sql = "SELECT * FROM tabelle WHERE id=$id";
In $id könnte er so alles möglich einschleuse z.B

Code: Alles auswählen

$sql = "SELECT * FROM tabelle WHERE id= 0 OR 1=1; DROP TABLE tabelle --";
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..
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

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?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

intval reicht an sich das macht alles zum typ integer und daher sind das Zahlen intval reicht fuer zahlen vollkommen.

0; SELECT *...
Würde zu einer einfachen 0

So als Beispiel aber alles andere ausser Zahlen escaped phpBB normalerweise schön und gut.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

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
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

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.
//
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

fanrpg hat geschrieben:Also das ist schon möglich zum Beispiel so:

Code: Alles auswählen

$sql = "SELECT * FROM tabelle WHERE id=$id";
In $id könnte er so alles möglich einschleuse z.B

Code: Alles auswählen

$sql = "SELECT * FROM tabelle WHERE id= 0 OR 1=1; DROP TABLE tabelle --";
Das reicht schon um was zu löschen das geht ohne Probleme [...]
Ich dachte immer, das wäre nicht möglich, weil per mysql_query() nur ein Query ausgeführt werden kann!?
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

Kommt auf dem Server an, ich hatte mal einen da konnte ich auch problemlos 10 Querys in einem Befehl ausführen auf anderen wiederum nicht.
Antworten

Zurück zu „Coding & Technik“