Category Archives: SQLi

Penntest vs. Zeit

Das größte Problem für mich als Penntester: Die Zeit die ich für einen Check zur Verfügung habe ist begrenzt. Ich muss mich zwar nicht an die Vorgabe halten und nach x Stunden meine Tests abbrechen, aber irgendwann muss der Bericht abgeliefert werden, auch weil bereits der nächste Check in der Pipeline ist. Wenn ich genug Zeit habe kommt es regelmäßig vor, dass ein zwei-Stunden-Kurzcheck schon gerne mal zu einer sechs- oder acht-Stunden-Session wird — es ist eben immer davon abhängig was ich finde.


Anfang des Monats hatte ich einen Kurzcheck bei einem Kunden zu erledigen, den ich bereits Anfang des Jahres nachbewertet hatte, also die Gegenmaßnahmen begutachtete, die aufgrund der Ergebnisse eines Serverchecks ergriffen werden mussten. Bei solchen Kunden finde ich in der Regel nichts spannendes, weil er die gefunden Löcher gestopft hat.

Während ich manuell die Seite auf Unebenheiten abtastete, ließ ich Burp seine Arbeit machen. Ich hatte meinen Teil erledigt, wobei ich auch nach XSS, SQL-Injection, RFI, etc. schaute. Nach solchen Lücken schaut zwar auch Burp, aber ich will auch meinen Spaß haben. Nach einigen falschen Positiven fand ich noch einen Hinweis, wo Burp meine Hilfe brauchte, um eine endgültige Bewertung abzugeben. Burp hatte einen Verdacht auf SQL-Injection gefunden. Bei der manuellen Prüfung wurde klar, dass der Verdacht zur Gewissheit wurde, es gibt eine SQL-Injection, die im regulärem Check nicht erkannt wurde.

Hier muss ich den ursprünglichen Checker etwas in Schutz nehmen: Wie bereits gesagt, man hat bei Tests nur eine begrenzte Zeit. Ein krimineller Hacker hat theoretisch unbegrenzt viel Zeit. Und die anfällige Seite war, man könnte fast sagen, versteckt. Burp hatte sie nur gefunden, weil er auch abseitige Seiten, die nur irgendwo am Rande verlinkt sind, findet, sofern man ihm genug Zeit gibt — auch da gibt es das Zeitproblem.

Ein zweites Tool welches ich gerne einsetze ist Havij. Nach wenigen Minuten war die komplette Struktur der Datenbank erschlossen. Da ich schon längst über der veranschlagten Zeit von zwei Stunden war, versuchte ich nur die interessantesten Teile der Datenbank zu finden. Eines der Hausaufgaben des ersten Serverchecks war es, die Passwort-Hashes mit Salz zu erzeugen, die ursprünglich nur als MD5-Hash in der Datenbank abgelegt wurden. In der Datenbank fand ich nun die Hashes und das Salz, welches für jeden Hash ein anderes war.

Nun kam das dritte Tool zum Einsatz — Hashcat. Nach wenigen Sekunden hatte ich bereits die ersten Passworte, aber nicht weil ich einen sagenhaft schnellen Computer oder gar einen GPU-Cluster hätte, sondern weil meine Wörterlisten mehrere Millionen Einträge haben und einfache Passworte zulässig sind. Wenn Passworte wie schalke04 zulässig sind und das Hashen einem einfachen Muster wie passwort+salz folgt, dann sind auch gesalzene Hashes zu leicht zu knacken.


Wer professionell penntestet, also wer nur eine begrenzte Zeit zur Verfügung hat, der braucht gute Werkzeuge, die ihm einen Teil der Arbeit abnehmen.

Burp und ich sind ein gutes Team. Wenn viele Seiten zu durchforsten sind, was eher langweilig und langwierig ist, da kommt er zum Zuge. Seine uneindeutigen Funde sind dann mein Part, wie auch die Suche nach eher ungewöhnlichen Zielen, weil sie evtl. nur noch im Cache von Google zu finden sind.

Havij brauche ich nicht wirklich, aber es ist immer hilfreich, dem Kunden die Brisanz einer Lücke verständlich zu machen. Passworte im Klartext zu präsentieren, die zwar gesalzen gehasht wurden, ist sehr viel eindrucksvoller, als eine langweilige SQL-Fehlermeldung — da versteht sogar der Chef das Problem.

Hashcat war diesmal nur für das Sahnehäubchen nötig.

SQL-Injection für Scriptkiddies

Bei den in den letzten Wochen gehäuft aufgetretenen Einbrüchen in Datenbanken mit Kundendaten (LinkedIn, eHarmony, Last.fm, Yahoo Voice Yahoo! Contributor Network, etc.), könnte man auf die Idee kommen, dass da Fachleute am hacken waren — dem muss aber nicht so sein. Auch DAUs kommen leicht per SQL-Injection (und dem richtigen Werkzeug), an Zugangsdaten — und dies ohne jegliche Kenntnisse, wie eine SQLi-Lücke konkret ausgenutzt werden kann.


Das Video zeigt WordPress mit einem Plugin, welches für SQL-Injection anfälligen ist.

Als erstes sieht man den Firefox (mit der HackBar). Wird ein Hochkomma an die 1 von postID gehängt, so wird eine Fehlermeldung ausgegeben. Diese Fehlermeldung ist noch kein Beweis für eine SQL-Injection, aber ein Hinweis darauf, dass hier die Benutzereingaben nicht ausreichend gefiltert werden. Das ausbleiben einer Fehlermeldung wäre hingegen kein Indiz dafür, dass keine Schwachstelle vorliegt, denn Fehlermeldungen können auch generell unterdrückt werden.

Dass das and 1=1 keine Fehlermeldung ausgibt, aber ein and 1=2, ist dagegen schon ein deutlicher Beleg für ein Schwachstelle.

Die weiteren Schritte im Video zeigen nicht die Details einer manuellen SQL-Injection, sondern das Werkzeug Havij, welches den Angriff automatisch durchführt. Es muss nur noch ausgewählt werden welche Daten Havij auslesen soll.

Wie im Video zu sehen ist, gibt es neben der Datenbank “havijdemo” noch weitere Datenbanken. Dies alles ist eine XAMP-Installation in die ich einmal WordPress mit dem für SQLi anfälligen Plugin installiert habe und eine nackte WordPress-Installation. Wer also auf seinem System, und sei es auch nur zum Testen, etwas installiert, worin eine SQL-Injection zu finden ist, der kompromittiert alle Datenbanken auf dem System. Dies sagt uns: Nur weil die Daten aus dem VoIP-Dienst Yahoo Voice Yahoo! Contributor Network stammen, bedeutet dies nicht, dass genau dieser Dienst auch Anfällig für SQL-Injection ist bzw. war, es könnte auch eine vollkommen andere Anwendung auf dem Server angegriffen worden sein.


Was will ich jetzt hiermit verdeutlichen? Das nicht jeder Hack von hochspezialisierten Cyberkriminelle durchgeführt wurde und der Cyberwar nicht vor der Tür steht, nur weil sich dies in den Medien besser verkaufen lässt. Was in den letzten Wochen und Monaten an Zugangsdaten nach oben geschwemmt wurde, geht wahrscheinlich eher auf das Konto der pickligen 15-jährigen DAUs, die entsprechende Tools im Netz entdeckt haben…

15-jähriger Hacker knackte PCs von 259 Firmen” (futurezone.at)

Ein 15-jähriger Hauptschüler aus Niederösterreich soll einen groß angelegten Hackerangriff gegen die Wirtschaft geführt haben. Insgesamt knackte er Computer von 259 Firmen, darunter befanden sich auch 30 österreichische. Der Jugendliche wurde von einer Spezialeinheit des Bundeskriminalamts aufgespürt und angezeigt.



Update: 13.07.2012 – 14:05 Uhr

Es tropfte nicht aus Yahoo Voice, sondern aus dem Yahoo! Contributor Network, siehe: “Yahoo bestätigt Passwort-Leck” (heise.de)