In dieser Challenge (forensics #2) scheint es das Ziel zu sein, den Versuch eines SQL-Injection-Angriffes ausfindig zu machen. Als einzigen Hinweis erhalten wir die Information, dass der Browser beim Ausführen der SQL-Injection abgestürzt ist.
Beim Entpacken der Dateien stellen wir direkt fest, dass es sich (wieder) um das Benutzerverzeichnis eines Windows-Systems handelt. Wiederum sind es die Daten des Benutzers “proneer” (vermutlich war es sogar das selbe Archiv, wie in der Forensic #1 – Challenge).
Wonach suchen wir nun am cleversten in den Benutzerdaten? Wir wissen, dass der Browser beim SQL-Angriff abgestürzt ist und wir wissen auch – und kennen das vermutlich aus eigener Erfahrung -, dass Browser beim Schließen die letzten Sitzungen speichern und beim erneuten Öffnen dem Benutzer wieder anbieten. Unser Ziel ist es also, zuerst den verwendeten Browser zu identifizieren und in einem zweiten Schritt zu versuchen, die Aktionen der letzten Sitzung zu rekonstruieren.
rup0rt@lambda:~/forensic2/Users/proneer/AppData/Local$ ls 010 Editor History Temp Adobe IconCache.db Temporary Internet Files Apple Microsoft VirtualStore Application Data Microsoft_Corporation VMware GDIPFONTCACHEV1.DAT Microsoft Help Google Mozilla rup0rt@lambda:~/forensic2/Users/proneer/AppData/Local$ ls Google/ Chrome CrashReports Google Talk rup0rt@lambda:~/forensic2/Users/proneer/AppData/Local$ ls Mozilla/ Firefox rup0rt@lambda:~/forensic2/Users/proneer/AppData/Local$ ls Microsoft Assistance Feeds Cache Office Windows Mail CoreCon Internet Explorer VisualStudio Windows Media Credentials Media Player VSA Windows Sidebar Event Viewer Microsoft SQL Server VSTAHost Feeds MSDN Windows
Ein Blick in die lokalen Anwendungsdaten zeigt uns, dass zumindest für die drei gängigsten Browser (Chrome, Firefox und Internet Explorer) Verzeichnisse existieren. Um herauszufinden, welcher zuletzt verwendet wurde, sehen wir uns die Zeitstempel der Sitzungsdateien an.
Der Microsoft Internet Explorer speichert seine zuletzt geöffneten Sitzungen in dem Verzeichnis “AppData/Local/Microsoft/Internet Explorer/Recovery” und legt hier pro Sitzung eine “.dat”-Datei mit einzigartiger Benennung ab.
rup0rt@lambda:~/.../AppData/Local/Microsoft/Internet Explorer/Recovery$ ls -lh * Active: total 84K ... Feb 12 02:38 {744C7267-5492-11E1-8400-000C29D6D5A8}.dat ... Feb 12 02:38 {DC0E0347-5491-11E1-8400-000C29D6D5A8}.dat ... Feb 12 02:38 {F587CDD1-5491-11E1-8400-000C29D6D5A8}.dat ... Feb 12 02:38 RecoveryStore.{DC0E0346-5491-11E1-8400-000C29D6D5A8}.dat Last Active: total 20K ... Feb 12 02:38 {FE400BB3-5514-11E1-A011-000C29D6D5A8}.dat ... Feb 12 02:38 RecoveryStore.{8D73C18E-5497-11E1-8075-000C29D6D5A8}.dat
Die Sitzungsdaten von Google Chrome befinden sich im Verzeichnis “AppData/Local/Google/Chrome/User Data/Default” und sind mit “Last”- und “Current”- “Session” beziehnungsweise “Tabs” benannt.
rup0rt@lambda:~/.../AppData/Local/Google/Chrome/User Data/Default$ ls -lh *Tabs *Session -rw-r--r-- 1 rup0rt rup0rt 1.6K Feb 12 02:38 Current Session -rw-r--r-- 1 rup0rt rup0rt 1.4K Feb 12 02:38 Current Tabs -rw-r--r-- 1 rup0rt rup0rt 93K Feb 12 02:38 Last Session -rw-r--r-- 1 rup0rt rup0rt 46K Feb 12 02:38 Last Tabs
Der Mozilla Firefox speichert die zuletzt geöffneten Sitzungen im Verzeichnis “AppData/Roaming/Mozilla/Firefox/Profiles/” im Unterverzeichnis der jeweiligen Nutzer-ID (hier: “075lfxbt.default”) in der Datei “sessionstore.js”.
rup0rt@lambda:~/.../AppData/Roaming/Mozilla/Firefox/Profiles/075lfxbt.default$ ls -lh sessionstore.js -rw-r--r-- 1 rup0rt rup0rt 2.4K Feb 12 02:39 sessionstore.js
Der direkte Vergleich aller Zeitstempel zeigt uns nun, dass der Firefox zuletzt verwendet und geschlossen wurde. Wir gehen also an dieser Stelle davon aus, dass dies der Browser sein muss, über den der SQL-Injection-Angriff ausgeführt wurde. (Die Zeitstempel müssen natürlich kein Indiz dafür sein! Im Zweifel müsste man alle Sitzungsdateien durchsuchen!)
Die “sessionstore.js”-Datei speichert die Sitzungen in der “JavaScript Object Notation” (JSON). Um dieses Format etwas übersichtlicher betrachten zu können, verwenden wir einen Online JSON Parser. Das Einfügen der “sessionstore.js”-Datei und Einklappen der “windows”-Elemente vermittelt uns nun einen guten Überblick über die Sitzungen.
Man kann erkennen, dass es zwei Sitzungen gab. Interessant ist hierbei die Variable “state”, die angibt, ob eine Sitzung zuletzt aktiv (“running”) war. Für unsere Nachforschung kommt also nur die obere Sitzung in Frage. Zusätzlich ist hier auch ersichtlich, wann die Sitzung zuletzt verwendet wurde – dies ist an der Variable “lastUpdate” auszumachen.
Das Schrittweise ausklappen des oberen “windows”-Elementes sowie der “tabs”-Elemente zeigt uns, dass bei letzter Verwendung zwei Tabs im Firefox geöffnet waren. Beim Durchsehen der in den Tabs verwendeten URLs, sticht beim zweiten Eintrag des ersten Tabs auch bereits eine vermutliche SQL-Injection ins Auge.
Ohne weiter auf das Format der Variable “formdata” eingehen zu müssen, ist erkennbar, dass der Benutzer versucht hat ein Formular mit einem Eingabefeld namens “s” auszufüllen. Das Eingabefeld war befüllt mit der Zeichkette “1_UNI/**/ON_SELECT”, was dekodiert “1 UNION SELECT” entspricht und eine übliche SQL-Injection-Attacke darstellt.
Zusammen mit dem Zeitstempel der Variable “lastUpdate” von “1329009797205” aus der “running”-Sitzung sollten wir alle Daten beisammen haben, um die Challenge lösen zu können. Es muss also nur noch die Antwort im korrekten Format erstellt werden. Verlangt ist “injection_value|time”.
Den “injection_value” kennen wir bereits. Bleibt nur noch der Zeitstempel in die von der Aufgabenstellung geforderte Form zu bringen. “1329009797205” ist mit 13 Stellen ein Zeitstempel, der Millisekunden beinhaltet. Da wir diese nicht benötigen, streichen wir die letzten drei Zeichen und übergeben den Wert “1329009797” an das Werkzeug “date”.
rup0rt@lambda:~$ date -u -d @1329009797 +%Y-%m-%dT%H:%M:%S%:z 2012-02-12T01:23:17+00:00
Dieses Datum umgerechnet auf das geforderte UTC +09:00 entspricht “2012-02-12T10:23:17+09:00”.
Die Antwort lautet also “1_UNI/**/ON_SELECT|2012-02-12T10:23:17+09:00“.