Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Layoutprobleme? - Styleswitcher!

Antwort
 
Themen-Optionen
Alt 30.06.2007, 13:58 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard Sicherheit: Zeichensätze und UTF7 / UTF-7

Hallo,
ich habe kürzlich ein Interview mit Stefan Esser gelesen und habe eine Frage zu einer Aussage von ihm.

Zitat:
When I saw how WordPress accepted arbitrary charsets and decoded data just before using it in database queries I knew immediately that UTF7 could be used to get an SQL injection through.
Was genau meint er damit?

Kann mir das eventuell jemand erklären?
Danke im Voraus.

Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2007, 14:11 Nach oben    #2
Corvin
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 397
Standard

Zitat:
Zitat von http://www.acunetix.com/vulnerabilities/WordPress-v.2.0.5-Trackba.htm
WordPress supports decoding trackbacks with different charsets when PHP's mbstring extension is activated. Because the decoding happens after the database escaping is performed choosing the right charset for the input data allows bypassing the protection against SQL injection.
__________________
Corvin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2007, 14:18 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

Heißt also, dass "input" erst "escaped" und danach dekodiert wird, so dass der eigentliche "input" dann ungehindert "zuschlagen" kann?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2007, 15:33 Nach oben    #4
Corvin
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 397
Standard

Ja, ich denke, so ist das gemeint.. aber habe davon auch keine Ahnung
__________________
Corvin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2007, 15:35 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

Ich muss mir mal etwas genauer anschauen, was UTF-7 eigentlich ist und warum gerade dieser Zeichensatz dort erwähnt wurde.
Wenn mir da noch jemand auf die Sprünge helfen kann, dann immer her mit den Informationen.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.07.2007, 00:24 Nach oben    #6
mepeisen
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 353
Standard

UTF-7 ist kein regulärer Zeichensatz, wie man das von anderen her kennt. Vielmehr ist es eine Art Kodierung für Unicode, bei der nur 7 Bit verwendet und berücksichtigt werden. Entsprechend gibt es einen Overhead.

Das Problem ist hier wohl, dass das Gänsefüßchen, also der Ursprung aller SQL-Injection, so kodiert werden muss, dass es verfälscht bzw. maskiert ist. Wenn man nun beim Auslesen davon ausgeht, dass "a" == "a" ist, hat man verloren. Denn wenn das erste a als UTF-7 ankommt, das zweite aber in der Datei als UTF-8 kodiertes reguläres Zeichen steht, stimmen sie nicht überein und voila, man hat was durchgeschleust.

Ich finde es aber höchst seltsam, dass man erst maskiert und dann noch die Strings rummanipuliert, bevor man sie endgültig in ein Query einsetzt. Das ist wirklich farlässig, so einem Entwickler gehört der Denne übern Scheitel gezogen (Denne ist bei uns auffer Arbeit ein DB/2-Handbuch ind zwei Bänden, je 5 Kilo schwer *g*).
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.07.2007, 15:48 Nach oben    #7
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

Hallo,
so ganz habe ich deine Erläuterung
Zitat:
Zitat von mepeisen Beitrag anzeigen
Wenn man nun beim Auslesen davon ausgeht, dass "a" == "a" ist, hat man verloren. Denn wenn das erste a als UTF-7 ankommt, das zweite aber in der Datei als UTF-8 kodiertes reguläres Zeichen steht, stimmen sie nicht überein und voila, man hat was durchgeschleust.
nicht verstanden.

Könntest du mir eventuell ein "konkretes" Beispiel geben, wie so etwas letztlich aussehen würde?
Ich verstehe nicht, wie man so etwas "durchschleusen" könnte.

Klar ist mir bislang, dass das "a" in UTF-7 ungleich der entsprechenden UTF-8-kodierten "Zeichenkette" ist. Wie dort nun etwas durchgeschleust werden könnte .. da steh ich auf dem Schlauch.

Danke.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.07.2007, 16:04 Nach oben    #8
robo47
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.048
Standard

vielleicht kein konkretes Beispiel, aber mal eins um zu verdeutlichen wie ich denke dass sowas funktioniert, als beispiel die abfrage eines Logins, die die UserId abruft und username + passwort überprüft

Query: SELECT id WHERE username='$var1' AND password='$var2';
code:
PHP-Code:
$var1 mysql_escape_string($_POST['username']);
$var2 mysql_escape_string($_POST['password']);
$var1 transform_utf7_to_utf8($var1);
$var2 transform_utf7_to_utf8($var2)
$query mysql_query("SELECT id WHERE username='".$var1."' AND password='".$var2."'"); 
dann haben wir $var2 das ist in UTF-8 von mir aus: ' OR id > 0 OR password = '
[das ' gehört dazu!]
in UTF-7 kommt da jetzt z.b. sowas raus: &§ OR id &/ 0 OR password &( &§
nichts davon wird von mysql_escape_string verändert, weil ja keine ' oder ähnliche vorkommen. Dann kommt transform_utf7_to_utf8() und wandelt das "&§ OR id &/ 0 OR password &( &§" wieder in "' OR id > 0 OR password = '" um und das ' am Anfang des Strings ist wieder da.

Nur zur verdeutlichung, mir ist klar, dass die UTF-7-Variante des Strings wohl kaum so aussieht wie oben, aber es sollte das Schema wie das ganze abläuft verdeutlichen, auch eine Funktion transform_utf7_to_utf8() ist einfach gerade beim tippen meiner Phantasie entsprungen.



mfg
robo47

Geändert von robo47 (01.07.2007 um 16:07 Uhr).
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.07.2007, 16:20 Nach oben    #9
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
Standard

Ahso.
Jau. Ich danke dir. Gar nicht so schwer zu verstehen, das Ganze.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

« flash/php - Frage zu dem download-Tutorial | JW FLV Player »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:33 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.6.7, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44