Sicher programmieren - Expression
1. Die Abschnitte
- Einführung
- Informationen
- Desinformation
- GET-Parameter
- POST-Werte
- JavaScript-Hacks
- SQL-Injections Teil 1
- SQL-Injections Teil 2
- Dateiuploads Teil 1
- Dateiuploads Teil 2
- Expression
2. Ogottogott
Bei diesem Hack handelt es sich um eine Mischung aus CSS- und JavaScript, der nur im Internet Explorer 6 und 7 funktioniert.
3. Expression
Offenbar war man sich bei Winzigweich darüber im Klaren, dass die CSS-Unterstützung dieser beiden Browser ziemlich mies ist. Aber anstatt das eigentliche Problem zu beheben, haben sie eine Möglichkeit eingebaut, die Angreifern Tor und Tür öffnet.
Denn nun kann man mittels der Microsoft-eigenen Anweisung expression JavaScript-Code in CSS-Anweisungen unterbringen,
um die mangelhafte CSS-Untersutzüng zu kompensieren. Um das zu demonstrieren, greifen wir einfach auf die Daten aus dem Beispiel
JavaScript-Hacks zurück.
4. Der Hack
Anstelle von JavaScript-Code geben wir einfach eine CSS-Anweisung in die Textarea ein.
<style type="text/css">
td
{
height:expression(alert("Hallo"));
}
</style>
Die Auswirkungen
... sind im IE in den besagten Versionen 6 und 7 gravierend. Da wir den Eintrag einfach ungefragt in die Datenbank kloppen und
anschließend genau so schludrig auslesen, wird der JavaScript-Code innerhalb der expression-Anweisung ausgeführt. Et
voilà, es knallt.
5. Lösungsmöglichkeit
Neben den schon beschriebenen Möglichkeiten unter dem Punkt JavaScript-Hacks kann man entsprechende
expression-Anweisungen über reguläre Ausdrücke herausfiltern. Es gibt allerdings bessere Möglichkeiten. So kann man
beispielweise SafeHTML einsetzen.
Damit ist möglich, ganz gezielt bestimmte Eingaben zu filtern. Und das läuft auch noch unter PHP4.